1

HTML、CSS、Wordpress でのカスタム テーマの作成の経験を持つ Web デザインのバックグラウンドを持つ私は、プログラミングを試してみたかったのです。私を手伝ってくれる友人がいて、彼の最近の仕事は三目並べゲームでした。以下は私がこれまでに持っているコードです。現在、プレイヤー 1 とプレイヤー 2 の間でゲーム ループを作成し、ゲームが 0 未完了、1 p1 勝利、2 p2 勝利、または 3 匹の猫のゲームであるかどうかをゲームに認識させるのに問題があります。

#include <stdio.h>
#define O 2
#define X 1

void printItem(int item)
{
    char items[] = { ' ', 'X', 'O' };
    printf(" %c ", items[item]);
 /*   
    if (item == 0)
        printf(" ");
    else if (item == 1)
        printf("X");
    else
        printf("O");
  */
}

void printRowDivider()
{
    printf("  +---+---+---+\n");
}

void printBoard(int board[9]) 
{
    printf("    A   B   C\n");
    printRowDivider();
    printf("1 ");
    for (int i = 0; i < 9; i++)
    {
        printf("|");
        printItem(board[i]);
        if (i == 2 || i == 5)
        {
            printf("|\n");
            printRowDivider();
            printf("%d ", (i+1)/3 + 1);
        }
    }
    printf("|\n");
    printRowDivider();
}

int gameStatus(int board[9]) {

    // check rows
    if (board[0] == board[1] && board[1] == board[2] && board[0] != 0)
        return board[0];
    else if (board[3] == board[4] && board[4] == board[5] && board[3] != 0)
        return board[3];
    else if (board[6] == board[7] && board[7] == board[8] && board[6] != 0)
        return board[6];

    // check columns
    else if (board[0] == board[3] && board[3] == board[6] && board[0] != 0)
        return board[0];
    else if (board[1] == board[4] && board[4] == board[7] && board[1] != 0)
        return board[1];
    else if (board[2] == board[5] && board[5] == board[9] && board[2] != 0)
        return board[2];

    // check diagnols 
    else if (board[0] == board[4] && board[4] == board[8] && board[0] != 0)
        return board[0];
    else if (board[2] == board[4] && board[4] == board[6] && board[2] != 0)
        return board[2];

    else {
        return 3;
    }

}

int main()
{
    int gameBoard[9] = { 0, 0, 0, 
                         0, 0, 0, 
                         0, 0, 0 };

    printBoard(gameBoard);          

        printf("p1 (Column + Row): ");
        int row;
        char column;                

        scanf(" %c%d", &column, &row);
        printf("You said %d, %d.\n", row, column);

        row -= 1;
        column -= 'A';

        printf("You said %d, %d.\n", row, column);
        gameBoard[row*3 + column] = X;

        printBoard(gameBoard);
        printf("p2 (Column + Row): ");
        scanf(" %c%d", &column, &row);
        row -= 1;
        column -= 'A';

        printf("You said %d, %d.\n", row, column);
        gameBoard[row*3 + column] = O;

        printBoard(gameBoard);

        int player = 0; 

        while (1) { 
            printBoard(gameBoard);

            printf("Player %d: ", player + 1); 
            scanf(" %c%d", &column, &row ); 
            player -= player;

        }

    printBoard(gameBoard);

    return 0;
}

読んでくれてありがとう。

4

1 に答える 1

1

メインプログラムでは、ループは次のとおりです。

int player = 0; 

while (1)
{ 
    printBoard(gameBoard);
    printf("Player %d: ", player + 1); 
    scanf(" %c%d", &column, &row ); 
    player -= player;
}

これにより、プレイヤーが 0 に設定され、次に 0 に設定されます (0 - 0 は 0 であるため)。0 と 1 の間で振動する必要がある場合は、少なくとも以下を含むいくつかの方法があります。

player = !player;
player = 1 - player;

また、このループの上にある移動コードのほとんどを、ループ内で呼び出される関数内に配置する必要があります。

于 2012-05-07T02:17:58.677 に答える