Выпуск переключения игроков - Ti c Ta c Toe - PullRequest
0 голосов
/ 22 января 2020

У меня есть проблема, из-за которой я не могу правильно переключать игроков (с X на O), она просто случайным образом переключается между ними. Вот мой код:

#include <iostream>
#include <conio.h>
#include <windows.h>
using namespace std;

bool gameover = false;
char position[3][3] = {'1', '2', '3', '4', '5', '6', '7', '8', '9'};
char player = 'X';
char player2 = 'O';
void draw(){
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            cout << position[i][j] << " ";
        }
        cout << endl;
    }
}


void input(){
    if (_kbhit()) {
        switch (_getch())
        {
        case '1':
            position[0][0] = player;
            break;
        case '2':
            position[0][1] = player;
            break;
        case '3':
            position[0][2] = player;
            break;
        case '4':
            position[0][3] = player;
            break;
        case '5':
            position[0][4] = player;
            break;
        case '6':
            position[0][5] = player;
            break;
        case '7':
            position[0][6] = player;
            break;
        case '8':
            position[0][7] = player;
            break;
        case '9':
            position[0][8] = player;
            break;
        }
    }

}

void logic() {
    if (player == 'X') {
        player = 'O';
    }
    else {
        player = 'X';
    }
}

int main (){
    while (!gameover) {
        input();
        draw();
        logic();
        system("cls");
    }
    return 0;
}

Извините, если этот вопрос задавался так много раз раньше, но я просто не могу найти решение. Я попытался изменить систему ('cls'), чтобы вместо этого сделать паузу, но она тоже не работает.

1 Ответ

0 голосов
/ 22 января 2020

Проверка _kbhit () документация к функции:

_kbhit returns a nonzero value if a key has been pressed. Otherwise, it returns 0.

Таким образом, если пользователь не нажимает какую-либо клавишу, _kbhit() возвращает 0.
input() Выход из функции и while l oop постоянно меняет переменную player, когда пользователь ничего не делает ...

Когда вы исправите это, ваш код должен обрабатывать уже сыгранные позиции.
Кстати, Вы хотите рисовать это все время?
Кажется, вам не нужно делать это, пока не произойдет правильное движение.

...