我的代码如下,其中大部分可能没有帮助,但也许问题出在我认为的地方之外。这就是说,请首先阅读以下内容,因为它会给出我的代码的简要说明,并指出我认为问题在哪里。C:比较两个不能产生正确结果的元素?
我想用C创建一个战舰游戏。我首先创建两个二维数组,一个代表玩家的棋盘,另一个代表敌方的棋盘。我用两段时间填满他们。我用两边的数字将它们打印出来,使事物看起来很漂亮(使用我的initialPrintBoards函数)。然后我通过用's'替换敌人阵列中的某些时段来设置敌方船只的位置,并将其打印出来以确保它们在我想要的位置。他们是,这很棒。然后我让玩家在敌人的船上“开火”。这是通过用'x'(代表命中)或替换''来替换敌人阵列中的's'来完成的。 'o'(代表未命中)。我打印出来,一切正常。
现在,这里是我遇到问题的地方。到目前为止,为了测试,敌人的舰船通过我的打印方法已经完全可见。我不想那样。所以,我想我会做的是创建一个新的打印功能(称为printBoards),完全符合我以前的打印功能,除了打印“。”。当它遇到'作为敌人阵列中的一个元素时。我最初的想法是使用比较。基本上,如果存储在敌人阵列中任何位置的元素都打印'。',否则打印存储在阵列中该位置的内容(即'。','x'或'o' )。不幸的是,即使在数组中的某个位置存储了“x”或“o”,所有操作都会打印所有时段。我对此感到不知所措。我对C很陌生(过去我学习过Java),所以也许在C中有一些我不了解的比较。但是,这是假设问题是与比较,它可能不是。
任何帮助或提示将不胜感激。
#include <stdio.h>
char playerBoard[8][8];
char enemyBoard[8][8];
void fillBoards()
{
int a;
for (a = 0; a < 8; a++)
{
int b;
for (b = 0; b < 8; b++)
{
enemyBoard[a][b] = '.';
}
}
int x;
for (x = 0; x < 8; x++)
{
int y;
for (y = 0; y < 8; y++)
{
playerBoard[x][y] = '.';
}
}
}
void initialPrintBoards()//This is used before the enemy's ships are set.
{
printf("Enemy Board\n*12345678\n");
int a;
for (a = 0; a < 8; a++)
{
printf("%d", a + 1);
int b;
for (b = 0; b < 8; b++)
{
printf("%c", enemyBoard[a][b]);
}
printf("\n");
}
printf("\n");
printf("Player Board\n*12345678\n");
int x;
for (x = 0; x < 8; x++)
{
printf("%d", x + 1);
int y;
for (y = 0; y < 8; y++)
{
printf("%c", playerBoard[x][y]);
}
printf("\n");
}
printf("\n");
}
void printGreeting()
{
printf("\nWelcome to Battleship!\n\n");
}
void setEnemyShips()
{
// Ship 1.
enemyBoard[3][2] = 's';
enemyBoard[4][2] = 's';
enemyBoard[5][2] = 's';
// Ship 2.
enemyBoard[1][1] = 's';
enemyBoard[1][2] = 's';
enemyBoard[1][3] = 's';
// Ship 3.
enemyBoard[6][5] = 's';
enemyBoard[6][6] = 's';
enemyBoard[6][7] = 's';
}
void playerFire()
{
if (enemyBoard[2][2] == 's')
{
enemyBoard[2][2] = 'x';
}
else
{
enemyBoard[2][2] = 'o';
}
}
void printBoards()//This is used after the enemy's ships are set.
{
printf("Enemy Board\n*12345678\n");
int a;
for (a = 0; a < 8; a++)
{
printf("%d", a + 1);
int b;
for (b = 0; b < 8; b++)
{
if (enemyBoard[1][0] == 's')
{
printf("%c", '.');
}
else
{
printf("%c", enemyBoard[1][0]);
}
}
printf("\n");
}
printf("\n");
printf("Player Board\n*12345678\n");
int x;
for (x = 0; x < 8; x++)
{
printf("%d", x + 1);
int y;
for (y = 0; y < 8; y++)
{
printf("%c", playerBoard[x][y]);
}
printf("\n");
}
printf("\n");
}
int main()
{
fillBoards();
printGreeting();
initialPrintBoards(); //This will print the boards before the enemy's ships are set.
setEnemyShips();
initialPrintBoards(); //This will end up printing the enemy ships' locations. Need a different print method.
playerFire();
initialPrintBoards(); //This prints to see if a hit or miss is properly printed.
printBoards(); //This prints to see if the ships are hidden and a hit or miss is properly printed.
return 0;
}
您有:'如果(enemyBoard [1] [0] == 'S')'和'的printf( “%C”,enemyBoard [1] [0]); '。也许这是一个打字错误/调试剩余的,是不是应该包含'enemyBoard [a] [b]'? – nnn