C:比较两个不能产生正确结果的元素?

时间:2015-12-01 23:23:30

标签: c multidimensional-array comparison

我的代码如下,其中大部分可能没有帮助,但问题可能在我认为的范围之外。话虽如此,请首先阅读以下内容,因为它提供了我的代码的简要说明,并说明我认为问题所在。

我试图在C中创建战舰游戏。我首先创建两个二维阵列,一个代表玩家的棋盘,另一个代表敌人的棋盘。我用句号填写他们两个。我用两边的数字打印出来,使事情看起来不错(使用我的initialPrintBoards函数)。然后我通过用敌人的阵列中的一些时期替换敌人的船只的位置来设置他们的位置。并打印出来以确保它们是我想要它们的地方。他们是伟大的。然后我让玩家"火"在敌人的船上。这是通过替换'在敌人阵列中使用' x' (代表命中)或替换'。'与' o' (代表一个小姐)。我打印出来,一切正常。

现在,我遇到了问题。到目前为止,为了测试,敌人的船只通过我的打印方法对玩家完全可见。我不想要那个。所以,我认为我要做的就是创建一个新的打印功能(称为printBoards),它完全按照我以前的打印功能执行,除非它打印出来。'在董事会遇到的时候会遇到这样的问题。作为敌人阵列中的一个元素。我最初的想法是使用比较。基本上,如果元素存储在敌人阵列的任何位置,打印',否则打印出该位置存储的内容。在数组中(可能是'。',' x'或' o')。不幸的是,它所做的只是打印所有时段,即使有一个' x'或者' o' 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;
}

2 个答案:

答案 0 :(得分:0)

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

当船被击中时,将'A'更改为'a'等等。

打印时,传入一个控制变量来控制视图的渲染方式:敌人视图,玩家视图,程序员视图。

答案 1 :(得分: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]);
        }