问题切换播放器-井字游戏

时间:2020-01-22 19:06:23

标签: c++ tic-tac-toe game-loop

我遇到一个问题,我似乎无法正确切换播放器(从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 :(得分:0)

查看_kbhit()功能文档:

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

因此,如果用户未按任何键,则_kbhit()将返回0。
当用户不执行任何操作时,input()函数将退出,并且while循环会不断更改player变量...

解决此问题后,您的代码应处理已经播放的位置。
顺便问一下,你想一直画吗?
看来您不需要这样做,直到发生有效的运动。