Игрок в крестики-нолики против ИИ - проблема с ИИ - PullRequest
0 голосов
/ 23 января 2019

Это игрок против ИИ в крестики-нолики на C. Если ИИ катится в занятое место, как мне сделать так, чтобы он катился снова, пока не достигнет незанятого места?

char boardchar[3][3] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'} }; 


void Turn()
{
    /*Player's Turn*/

    AIrandomizer();
    AI = AI_roll();


        if (AI == 1 && boardchar[0][0] == '1')
        {
            boardchar[0][0] = symbAI;
        }

        else if (AI == 2 && boardchar[0][1] == '2')
        {
            boardchar[0][1] = symbAI;                   
        }


        else if (AI == 3 && boardchar[0][2] == '3')
        {
            boardchar[0][2] = symbAI;               
        }


        else if (AI == 4 && boardchar[1][0] == '4')
        {
            boardchar[1][0] = symbAI;       
        }

        else if (AI == 5 && boardchar[1][1] == '5')
        {
            boardchar[1][1] = symbAI;               
        }


        else if (AI == 6 && boardchar[1][2] == '6')
        {
            boardchar[1][2] = symbAI;               
        }

        else if (AI == 7 && boardchar[2][0] == '7')
        {
            boardchar[2][0] = symbAI;               
        }

        else if (AI == 8 && boardchar[2][1] == '8')
        {
            boardchar[2][1] = symbAI;               
        }

        else if (AI == 9 && boardchar[2][2] == '9')
        {
            boardchar[2][2] = symbAI;           
        }

}

Я пробовал switch (case) и несколько ifs и else if, но мне все еще не удается найти способ исправить эту проблему.

1 Ответ

0 голосов
/ 23 января 2019

Вы можете использовать оператор while или do-while.

Также создайте двумерный массив 3x3, который отслеживает пятна: 0 = незаполненный, 1 = человек, 2 = AI (лучше использовать enum).

В псевдокоде:

Глобальная переменная:

int spots[3][3]; // 3x3 array

Код:

Setup(); // Setup of board, sets 0's to spots.

while (!endOfGame())
{
    Player(); // Handle player, assuming it plays first, sets a 1 in one spot

    if (!endOfGame())
    {
         AI();
    }
}


void AI() 
{
    do
    {
       square = AIChoice();
    } while (spots[square] == 0);

    // Now we know spots[square] == 0, thus unfilled
    spots[square] = 2; // AI
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...