c++ - 我的 Tic Tac Toe 游戏代码中的一个问题

标签 c++ tic-tac-toe

我用 C++ 制作了一个井字游戏。我不知道如何输出合适的板,所以我制作了一个带有标记为 1-9 的数组的网格,让用户输入数字以告诉计算机将他的镜头放在哪里。第二个玩家是电脑。我很高兴,因为这是我的第一个工作程序,但代码有问题,有时,并非总是,在退出前输出“无效”,我用这个词告诉用户输入无效数字.有人能帮我理解为什么会这样以及我代码中的逻辑吗,因为过了一段时间,连我自己都对自己写的东西感到困惑。非常感谢,谢谢。

/*
 * Tic Tac Toe Game
 *
 *
*/

#include <iostream>
#include <string>
#include <time.h>
#include <cstdlib>

using namespace std;

int main() {
    int tic[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
    int entered = 0;
    int myrandom;
    int cswitcher, uswitcher;
    int gameover = 0;
    srand(time(0));

    while(gameover != 1) {

    cswitcher = 0;
    uswitcher = 0;
    cout << tic[0][0] << tic[0][1] << tic[0][2] << endl;
    cout << tic[1][0] << tic[1][1] << tic[1][2] << endl;
    cout << tic[2][0] << tic[2][1] << tic[2][2] << endl;


    while (uswitcher != 1) {
            cout << "Pick your turn" << endl;
            cin >> entered;
            if (entered >= 1 || entered <= 9) {
                switch (entered) {
                case 1: if (tic[0][0] != 0) {tic[0][0] = 0; uswitcher = 1;} else {cout << "Invalid\n"; uswitcher = 0; continue;} break;
                case 2: if (tic[0][1] != 0) {tic[0][1] = 0; uswitcher = 1;} else {cout << "Invalid\n"; uswitcher = 0; continue;} break;
                case 3: if (tic[0][2] != 0) {tic[0][2] = 0; uswitcher = 1;} else {cout << "Invalid\n"; uswitcher = 0; continue;} break;
                case 4: if (tic[1][0] != 0) {tic[1][0] = 0; uswitcher = 1;} else {cout << "Invalid\n"; uswitcher = 0; continue;} break;
                case 5: if (tic[1][1] != 0) {tic[1][1] = 0; uswitcher = 1;} else {cout << "Invalid\n"; uswitcher = 0; continue;} break;
                case 6: if (tic[1][2] != 0) {tic[1][2] = 0; uswitcher = 1;} else {cout << "Invalid\n"; uswitcher = 0; continue;} break;
                case 7: if (tic[2][0] != 0) {tic[2][0] = 0; uswitcher = 1;} else {cout << "Invalid\n"; uswitcher = 0; continue;} break;
                case 8: if (tic[2][1] != 0) {tic[2][1] = 0; uswitcher = 1;} else {cout << "Invalid\n"; uswitcher = 0; continue;} break;
                case 9: if (tic[2][2] != 0) {tic[2][2] = 0; uswitcher = 1;} else {cout << "Invalid\n"; uswitcher = 0; continue;} break;
                }
            } else {continue;}
    }

    while (cswitcher != 1) {

    myrandom = rand()%9+1;
                switch (myrandom) {
                case 1: if (tic[0][0] != 0) {tic[0][0] = 0; cswitcher = 1;} else {cswitcher = 0; continue;} break;
                case 2: if (tic[0][1] != 0) {tic[0][1] = 0; cswitcher = 1;} else {cswitcher = 0; continue;} break;
                case 3: if (tic[0][2] != 0) {tic[0][2] = 0; cswitcher = 1;} else {cswitcher = 0; continue;} break;
                case 4: if (tic[1][0] != 0) {tic[1][0] = 0; cswitcher = 1;} else {cswitcher = 0; continue;} break;
                case 5: if (tic[1][1] != 0) {tic[1][1] = 0; cswitcher = 1;} else {cswitcher = 0; continue;} break;
                case 6: if (tic[1][2] != 0) {tic[1][2] = 0; cswitcher = 1;} else {cswitcher = 0; continue;} break;
                case 7: if (tic[2][0] != 0) {tic[2][0] = 0; cswitcher = 1;} else {cswitcher = 0; continue;} break;
                case 8: if (tic[2][1] != 0) {tic[2][1] = 0; cswitcher = 1;} else {cswitcher = 0; continue;} break;
                case 9: if (tic[2][2] != 0) {tic[2][2] = 0; cswitcher = 1;} else {cswitcher = 0; continue;} break;
    }
    }
    if (tic[0][0] + tic[0][1] + tic[0][2] == 0 || tic[1][0] + tic[1][1] + tic[1][2] == 0 ||
        tic[2][0] + tic[2][1] + tic[2][2] == 0 || tic[0][0] + tic[1][0] + tic[2][0] == 0 ||
        tic[0][1] + tic[1][1] + tic[2][1] == 0 || tic[0][2] + tic[1][2] + tic[2][2] == 0 ||
        tic[0][0] + tic[1][1] + tic[2][2] == 0 || tic[2][0] + tic[1][1] + tic[0][2] == 0) {gameover = 1; break;}

    }
    return 0;
}

最佳答案

你的错误是由于这一行:

if (entered >= 1 || entered <= 9)

您需要使用&& 而不是||

关于c++ - 我的 Tic Tac Toe 游戏代码中的一个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23524985/

相关文章:

mysql - 井字游戏字段列表 MySQL 中的未知列 'i'

python - TIC TAC TOE 仅接受整数

c++ - LNK2019 QObject 未解析的外部符号

c++ - Win32 API 中 PathAppend 和 PathCombine 的区别

c++ - 编译成功后找不到exe

c++ - 即使路径为空白,如何使用 _popen 列出目录?

java - 由按钮组成的面板网格

c# - Tic Tac Toe - 检测赢、输或平局

algorithm - Minimax 和 tic tac toe - 我的算法正确吗?

c++ - 有没有优化两个BigNums的乘法的好方法?