0

次のコードをご覧ください

#include <iostream>
#include <stdlib.h>
#include <ctime>

using namespace std;

const char PLAYER_1 = 'O';
const char PLAYER_2 = 'X';


int row = 0;
int col = 0;

int winningStates[8][3][2] = {{{0,0},{0,1},{0,2}},{{1,0},{1,1},{1,2}},{{2,0},{2,1},{2,2}},{{3,0},{3,1},{3,2}},
                                {{4,0},{4,1},{4,2}},{{5,0},{5,1},{5,2}},{{6,0},{6,1},{6,2}},{{7,0},{7,1},{7,2}}};

//This sets all the elements within the body to '-' to indicate that the square is free
void intialise(char board[][3])
{
    for(int i=0;i<3;i++)
    {
        for(int a=0;a<=3;a++)
        {
            board[i][a] = '-';

        }
    }


}

//This displays the board on the screen
void display(char board[][3])
{
    for(int i=0;i<3;i++)
    {
        for(int a=0;a<3;a++)
        {
            cout << board[i][a] << "\t ";

        }
        cout << endl;
    }
}

//setValue() sets the cell indicated by the parameter to the value that is contained within the symbol parameter
void setValue(int row, int col, char symbol, char board[][3])
{
    board[row][col] = symbol;
}

//isFree() returns true if the cell identified by the parameter contains '-'
bool isFree(int row, int col, char board[][3])
{
    if(board[row][col]=='-')
    {
        return (true);
    }
    else
    {
        return (false);
    }
}

bool hasWon(char symbol,char board[][3])
{
    bool match = false;

    row = 0;
    col = 0;

    for(int m=0;m<8;m++)
    {
        for(int s=0;s<3;s++)
        {
            row = winningStates[m][s][0];
            col = winningStates[m][s][1];

            if(board[row][col]==symbol)
            {
                match = true;
            }
            else
            {
                match = false;
                break;
            }
        }
    }
    return match;
    //return false;
}

int main()
{
    char board[3][3];

    srand(time(0));

    bool gameOver = false;

    char player = PLAYER_1;

    int count = 0;

    intialise(board);
   // display();

    while(gameOver!=true)
    {     

        do
        {
            row = rand()%3;
            col = rand()%3;
        }
        while(! isFree(row,col,board));


        setValue(row,col,player,board);
        if(player==PLAYER_1)
        {
            player = PLAYER_2;
        }
        else
        {
            player = PLAYER_1;
        }

        gameOver = hasWon(player,board);

        if(gameOver==true)
        {
            cout << "WON" << endl;
        }
        count++;

        if(count==9)
        {
            gameOver = true;
            break;
        }


        display(board);
        cout << endl;


    }
}

このコードでは、「WON」メッセージが表示されることはありません。また、1つのセルは常に空いており、記号はありません。このコードを何度実行しても、誰も勝てません!! どうしてこれなの?助けてください!!

4

1 に答える 1

1

論理エラーのようです。これを試してください

bool hasWon(char symbol,char board[][3])
{
    for(int m=0;m<8;m++)
    {
        bool found_line = true;
        for(int s=0;s<3;s++)
        {
            int row = winningStates[m][s][0];
            int col = winningStates[m][s][1];

            if(board[row][col]!=symbol)
            {
                found_line = false;
                break;
            }
        }
        if (found_line)
            return true;
    }
    return false;
}

この種のタスクにはより適切な変数名を選択するのに役立つと思いmatchますが、一致するものがわからないため、あまり良くありません。これはあなたの間違いだったようです。

于 2012-11-19T15:20:14.263 に答える