2015-12-01 58 views
0

我的代码如下,其中大部分可能没有帮助,但也许问题出在我认为的地方之外。这就是说,请首先阅读以下内容,因为它会给出我的代码的简要说明,并指出我认为问题在哪里。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; 
} 
+0

您有:'如果(enemyBoard [1] [0] == 'S')'和'的printf( “%C”,enemyBoard [1] [0]); '。也许这是一个打字错误/调试剩余的,是不是应该包含'enemyBoard [a] [b]'? – nnn

回答

0

对此代码,在printBoards()功能发现:

 if (enemyBoard[1][0] == 's') 
     { 
      printf("%c", '.'); 
     } 
     else 
     { 
      printf("%c", enemyBoard[1][0]); 
     } 

这看起来总是在第二行第一列以确定打印的内容。如你所见,那是一个错误。

推荐:

 if (enemyBoard[a][b] == 's') 
     { 
      printf("%c", '.'); 
     } 
     else 
     { 
      printf("%c", enemyBoard[a][b]); 
     } 
+0

呃,我怎么忘记了?是的,就是这样。我不知道我是如何错过它的。当这些值被硬编码时,我正在测试这些值。我想我忘了改变这些。谢谢。 – AileWing

0

Board[][]变量包含状态'.'(水)或'A''B' ... 'E'为5艘。

当船被击中,改变'A''a'

打印时,通过在控制变量来控制视图的呈现方式:敌人查看,播放器查看,程序员查看。