Крестики-нолики: человек против компьютера - PullRequest
0 голосов
/ 13 октября 2019

Проблема, с которой я сейчас борюсь, состоит в том, чтобы заставить компьютер двигаться в случайном месте после того, как человек выберет первый ход. В нижней части кода я пытаюсь настроить компьютер для получения случайных значений x и y, но мне также нужно проверить, чтобы убедиться, что компьютер не рандомизирует место, которое уже занято. так что я попытаюсь сделать это исправить это последнее утверждение в нижней части, и я должен быть хорошим. Кто-нибудь может понять, что мне нужно делать? Спасибо!

#include<iomanip>
#include <stdlib.h>     /* srand, rand */
#include <time.h>       /* time */

using namespace std;

int main ()
{
char board [3][3] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',}; // This is going to create the 3X3 board for the X's and O's to be placed
bool playing = true;
int x,y; // the X and Y will correspond to the rows and columns
int randomX, randomY;

while (playing) {

   for (int i=0;i<3; i++){
    for (int j=0;j<3; j++){
        cout<<board[i][j];
        if (j<2)
            cout << "|";
    }
    if (i<2){
    cout<<endl;
    cout << "-----";
    cout << endl;
    }
   }
   cout << endl << "Where would you like to move? ";
   cin >> x >> y;
   board [x-1][y-1] = 'x'; // When the user is asked to place a X in a certain box, the values they enter will be subtracted by 1 so that it corresponds to the location on the board

    if (board [0][0]== 'x' && board [0][1]== 'x'){
       if (board [0][2] == 'x')
            playing = false;
            else board [0][2] = 'o';// This is the start of all the rows being checked
    }
    else if (board [0][0]== 'x' && board [0][2]== 'x'){
       if  (board [0][1]== 'x')
            playing = false;
            else board [0][1] = 'o';
    }
    else if (board [0][1]== 'x' && board [0][2]== 'x'){
        if  (board [0][0]== 'x')
            playing = false;
            else board [0][0] = 'o';
    }
    else if (board [1][0]== 'x' && board [1][1]== 'x'){
         if  (board [1][2]== 'x')
            playing = false;
            else board [1][2] = 'o';
    }
    else if (board [1][0]== 'x' && board [1][2]== 'x'){
         if  (board [1][1]== 'x')
            playing = false;
            else board [1][1] = 'o';
    }
    else if (board [1][1]== 'x' && board [1][2]== 'x'){
         if  (board [1][0]== 'x')
            playing = false;
            else board [1][0] = 'o';
    }
    else if (board [2][0]== 'x' && board [2][1]== 'x'){
        if  (board [2][2]== 'x')
            playing = false;
            else board [2][2] = 'o';
    }
    else if (board [2][0]== 'x' && board [2][2]== 'x'){
         if  (board [2][1]== 'x')
            playing = false;
            else board [2][1] = 'o';
    }
    else if (board [2][1]== 'x' && board [2][2]== 'x'){
         if  (board [2][0]== 'x')
            playing = false;
            else board [2][0] = 'o';// this is the end of all the rows being checked
    }
    else if (board [0][0]== 'x' && board [1][0]== 'x'){
         if  (board [2][0]== 'x')
            playing = false;
            else board [2][0] = 'o';// this is the start of all the columns being checked
    }
    else if (board [0][0]== 'x' && board [2][0]== 'x'){
         if  (board [1][0]== 'x')
            playing = false;
            else board [1][0] = 'o';
    }
    else if (board [1][0]== 'x' && board [2][0]== 'x'){
         if  (board [0][0]== 'x')
            playing = false;
            else board [0][0] = 'o';
    }
    else if (board [0][1]== 'x' && board [1][1]== 'x'){
         if  (board [2][1]== 'x')
            playing = false;
            else board [2][1] = 'o';
    }
    else if (board [0][1]== 'x' && board [2][1]== 'x'){
         if  (board [1][1]== 'x')
            playing = false;
            else board [1][1] = 'o';
    }
    else if (board [1][1]== 'x' && board [2][1]== 'x'){
         if  (board [0][1]== 'x')
            playing = false;
            else board [0][1] = 'o';
    }
    else if (board [0][2]== 'x' && board [1][2]== 'x'){
         if  (board [2][2]== 'x')
            playing = false;
            else board [2][2] = 'o';
    }
    else if (board [0][2]== 'x' && board [2][2]== 'x'){
         if  (board [1][2]== 'x')
            playing = false;
            else board [1][2] = 'o';
    }
    else if (board [1][2]== 'x' && board [2][2]== 'x'){
         if  (board [0][2]== 'x')
            playing = false;
            else board [0][2] = 'o';// This is the end of all the columns being checked
    }
    else if (board [0][0]== 'x' && board [1][1]== 'x'){
         if  (board [2][2]== 'x')
            playing = false;
            else board [2][2] = 'o';// This is the start of checking for diagonals
    }
    else if (board [0][0]== 'x' && board [2][2]== 'x'){
         if  (board [1][1]== 'x')
            playing = false;
            else board [1][1] = 'o';
    }
    else if (board [1][1]== 'x' && board [2][2]== 'x'){
         if  (board [0][0]== 'x')
            playing = false;
            else board [0][0] = 'o';
    }
    else if (board [0][2]== 'x' && board [1][1]== 'x'){
         if  (board [2][0]== 'x')
            playing = false;
            else board [2][0] = 'o';
    }
    else if (board [0][2]== 'x' && board [2][0]== 'x'){
         if  (board [1][1]== 'x')
            playing = false;
            else board [1][1] = 'o';
    }
    else if (board [1][1]== 'x' && board [2][0]== 'x'){
         if  (board [0][2]== 'x')
            playing = false;
            else board [0][2] = 'o';
    }
     else {

        srand(time(0));
        randomX = rand()% 3;
        randomY = rand()% 3;
        board [randomX][randomY]== 'o';
     }

    return 0;
}
} 

1 Ответ

0 голосов
/ 15 октября 2019

Если я правильно вас понимаю, вы в настоящее время пытаетесь «исправить» последнее утверждение else. Исправление означает: вы хотите, чтобы компьютерный игрок изменил значение на «board [randomX][randomY]».

В настоящее время вы делаете три вещи:

  1. Инициализируйте генератор случайных чисел.
  2. Получите 2 случайных индекса в качестве местоположения.
  3. Сравните эту позицию с 'o'. (== делает это сравнение. Это не меняет значение.)

Что вы, вероятно, хотите сделать:

  1. Инициализируйте это один раз, очень высоко,И на самом деле не с константой, поскольку компьютер всегда будет воспроизводить одни и те же числа, в противном случае.
  2. Установите для своей случайной позиции значение 'o'.

Используйте взамен [randomX][randomY] = 'o';из [randomX][randomY] == 'o';

Также вам, вероятно, следует проверить, имеет ли позиция значение. В противном случае вы просто переопределите все, что было в нем до этого.

И после этого вам нужно проверить, победил ли Компьютер.

Ох. И ваш return 0; находится в цикле while. Вероятно, он должен быть снаружи.

Наконец: посмотрите на комментарии под своим постом. Там есть несколько хороших / интересных предложений. Например, вы можете использовать одно случайное число от 0 до 8 вместо двух: 0-2.

Особенно предложение о форматировании: вместо форматирования рассмотрите возможность использования:

    if  (board[1][0] == 'x')
        playing = false;
    else 
        board[1][0] = 'o';

Будьте последовательны иТакже сделайте отступ в своем коде.

Надеюсь, это поможет. Приветствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...