You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++实现终极井字棋3x3网格显示问题求助

修复终极井字棋3x3网格显示问题

你当前的displayBoards方法会逐个完整渲染每个小棋盘,导致所有小棋盘纵向堆叠成单列。要实现3x3网格布局,需要按行批次渲染:先渲染所有小棋盘的同一行内容,再处理分隔线,这样横向的小棋盘就能对齐排列。

修改方案

1. 给TicTacToe类添加辅助方法

新增方法用于获取小棋盘指定行的渲染内容,方便后续拼接横向布局:

// 在TicTacToe类的public段添加声明
string getBoardLine(int lineIndex);

实现该方法:

string TicTacToe::getBoardLine(int lineIndex) {
    if (lineIndex == 0) {
        return "   1    2    3";
    }
    int boardRow = lineIndex - 1;
    if (boardRow < 0 || boardRow >= BOARDSIZE) return "";

    stringstream ss;
    ss << boardRow + 1;
    for (int j = 0; j < BOARDSIZE; j++) {
        char playerSymbol = ' ';
        if (board[boardRow][j] == 1)
            playerSymbol = 'X';
        else if (board[boardRow][j] == -1)
            playerSymbol = 'O';
        ss << setw(3) << playerSymbol;
        if (j != BOARDSIZE - 1)
            ss << " |";
    }
    return ss.str();
}

同时可以更新原displayBoard方法保持逻辑统一:

void TicTacToe::displayBoard() {
    cout << getBoardLine(0) << endl << endl;
    for (int i = 0; i < BOARDSIZE; i++) {
        cout << getBoardLine(i+1) << endl;
        if (i != BOARDSIZE - 1)
            cout << " ____|____|____" << endl << "     |    |    " << endl;
    }
    cout << endl;
}

2. 重构NBTicTacToe::displayBoards方法

按大棋盘的行组拼接所有小棋盘的对应行内容,实现横向3x3布局:

void NBTicTacToe::displayBoards() {
    const string SMALL_BOARD_SEP = " | ";
    const string BIG_ROW_SEP = "===============================";

    // 遍历大棋盘的每一行(共3组)
    for (int bigRow = 0; bigRow < BOARDSIZE; bigRow++) {
        // 渲染当前大行所有小棋盘的标题行
        for (int bigCol = 0; bigCol < BOARDSIZE; bigCol++) {
            cout << boards[bigRow][bigCol].getBoardLine(0);
            if (bigCol != BOARDSIZE - 1)
                cout << SMALL_BOARD_SEP;
        }
        cout << endl << endl;

        // 渲染当前大行所有小棋盘的3行内容及内部分隔线
        for (int smallRow = 1; smallRow <= BOARDSIZE; smallRow++) {
            // 拼接当前行的所有小棋盘内容
            for (int bigCol = 0; bigCol < BOARDSIZE; bigCol++) {
                cout << boards[bigRow][bigCol].getBoardLine(smallRow);
                if (bigCol != BOARDSIZE - 1)
                    cout << SMALL_BOARD_SEP;
            }
            cout << endl;

            // 渲染小棋盘内部的分隔线(非最后一行时)
            if (smallRow != BOARDSIZE) {
                for (int bigCol = 0; bigCol < BOARDSIZE; bigCol++) {
                    cout << " ____|____|____";
                    if (bigCol != BOARDSIZE - 1)
                        cout << SMALL_BOARD_SEP;
                }
                cout << endl;
                for (int bigCol = 0; bigCol < BOARDSIZE; bigCol++) {
                    cout << "     |    |    ";
                    if (bigCol != BOARDSIZE - 1)
                        cout << SMALL_BOARD_SEP;
                }
                cout << endl;
            }
        }
        cout << endl;

        // 渲染大棋盘行之间的分隔线(非最后一行时)
        if (bigRow != BOARDSIZE - 1) {
            cout << BIG_ROW_SEP << endl << endl;
        }
    }
}

效果说明

修改后,9个小棋盘会以3x3网格形式横向排列:每行包含3个小棋盘,小棋盘之间用|分隔,大棋盘行之间用粗分隔线区分,完全符合你期望的布局样式。

内容的提问来源于stack exchange,提问作者Andrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:09:54