C++ 井字棋游戏 - 判断后手获胜

井字棋,英文名叫 Tic-Tac-Toe,是一种在 3*3 格子上进行的连珠游戏,和五子棋类似,由于棋盘一般不画边框,格线排成井字故得名。游戏需要的工具仅为纸和笔,然后由分别代表 O 和 X 的两个游戏者轮流在格子里留下标记(一般来说先手者为 X),任意三个标记形成一条直线,则为获胜。(来自百度百科)

请你判断后手者是否存在任意三个标记形成一条直线?

输入格式:

23
第一行输入一个整数 t(1<=t<=1000)代表 t 组输入。接下来每组输入一个井字棋游戏局面。

输出格式:

若后手者存在任意三个标记形成一条直线输出'yes',否则输出'no'。

输入样例:

2
OOO
XXX
OOO
OOO
XXO
OXX

输出样例:

yes
yes

代码实现

#include <iostream>
#include <vector>
using namespace std;

// 判断是否存在任意三个标记形成一条直线
bool checkLine(vector<string>& board, char player) {
    // 检查横向
    for (int i = 0; i < 3; i++) {
        if (board[i][0] == player && board[i][1] == player && board[i][2] == player) {
            return true;
        }
    }
    // 检查纵向
    for (int i = 0; i < 3; i++) {
        if (board[0][i] == player && board[1][i] == player && board[2][i] == player) {
            return true;
        }
    }
    // 检查对角线
    if (board[0][0] == player && board[1][1] == player && board[2][2] == player) {
        return true;
    }
    if (board[0][2] == player && board[1][1] == player && board[2][0] == player) {
        return true;
    }
    return false;
}

int main() {
    int t;
    cin >> t;
    while (t--) {
        vector<string> board(3);
        for (int i = 0; i < 3; i++) {
            cin >> board[i];
        }
        // 判断后手者是否存在任意三个标记形成一条直线
        bool existLine = checkLine(board, 'X');
        if (existLine) {
            cout << "yes" << endl;
        } else {
            cout << "no" << endl;
        }
    }
    return 0;
}

代码解释

这个解决方案首先读取输入的 t,表示有 t 组输入。然后依次读取每组输入的井字棋局面,将其存储在一个字符串向量中。接下来通过调用 checkLine 函数判断后手者是否存在任意三个标记形成一条直线。如果存在,则输出 'yes',否则输出 'no'。

checkLine 函数首先检查横向和纵向是否存在三个相同的标记,然后检查两条对角线是否存在三个相同的标记。如果存在,则返回 true,否则返回 false。

总结

本代码示例展示了如何使用 C++ 代码判断井字棋游戏中后手玩家是否获胜。您可以根据需要修改代码,以实现其他功能,例如判断先手玩家是否获胜、判断游戏是否结束等。

C++ 井字棋游戏 - 判断后手获胜

原文地址: https://www.cveoy.top/t/topic/qrSl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录