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

如何用C++实现用户自定义行列数的井字棋棋盘打印?

动态井字棋棋盘实现方案(C++)

嘿,别担心,我来帮你搞定这个根据用户输入行列数创建井字棋棋盘的问题!我会给你完整的代码示例和详细解释,确保你能轻松实现需求。

核心思路

要实现动态大小的棋盘,关键在于:

  • 先获取并验证用户输入的行列数(必须是正整数)
  • 分两部分打印每一行:格子行(用于放置X/O)和分隔线(区分不同行,最后一行不需要)
  • 用循环来适配任意行列数,避免硬编码

基础版:空白棋盘打印

这个版本先实现最基础的空白棋盘,你可以直接运行看到效果:

#include <iostream>
using namespace std;

int main() {
    int rows, cols;
    
    // 获取用户输入并做合法性检查
    cout << "请输入棋盘的行数: ";
    cin >> rows;
    cout << "请输入棋盘的列数: ";
    cin >> cols;
    
    if (rows <= 0 || cols <= 0) {
        cout << "⚠️ 行数和列数必须是正整数!" << endl;
        return 1;
    }
    
    // 循环打印每一行
    for (int i = 0; i < rows; ++i) {
        // 打印格子行:每个格子占3个字符宽度
        for (int j = 0; j < cols; ++j) {
            cout << "   ";
            if (j != cols - 1) { // 最后一列后不打印分隔符
                cout << "|";
            }
        }
        cout << endl;
        
        // 打印分隔线:最后一行不需要分隔线
        if (i != rows - 1) {
            for (int j = 0; j < cols; ++j) {
                cout << "---";
                if (j != cols - 1) {
                    cout << "+";
                }
            }
            cout << endl;
        }
    }
    
    return 0;
}

进阶版:带棋子的动态棋盘

如果后续需要支持落子功能,可以用二维数组存储棋盘状态,打印时根据数组内容输出X/O或空格:

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

int main() {
    int rows, cols;
    
    cout << "请输入棋盘的行数: ";
    cin >> rows;
    cout << "请输入棋盘的列数: ";
    cin >> cols;
    
    if (rows <= 0 || cols <= 0) {
        cout << "⚠️ 行数和列数必须是正整数!" << endl;
        return 1;
    }
    
    // 初始化棋盘:用vector创建二维数组,默认填充空格
    vector<vector<char>> board(rows, vector<char>(cols, ' '));
    
    // 示例:手动设置几个棋子位置(实际开发中可替换为用户输入)
    board[0][0] = 'X';
    board[1][1] = 'O';
    board[rows-1][cols-1] = 'X';
    
    // 打印带棋子的棋盘
    for (int i = 0; i < rows; ++i) {
        for (int j = 0; j < cols; ++j) {
            cout << " " << board[i][j] << " "; // 每个棋子前后加空格,保持对齐
            if (j != cols - 1) {
                cout << "|";
            }
        }
        cout << endl;
        
        if (i != rows - 1) {
            for (int j = 0; j < cols; ++j) {
                cout << "---";
                if (j != cols - 1) {
                    cout << "+";
                }
            }
            cout << endl;
        }
    }
    
    return 0;
}

代码解释

  • 输入验证:避免用户输入非正整数导致程序异常
  • 格子行打印:每个格子占3个字符宽度(方便后续放置棋子时对齐),用|分隔不同列
  • 分隔线打印:用---表示横线,+连接不同列的分隔线,确保棋盘结构清晰
  • 进阶版的二维数组:用vector实现动态大小的棋盘,方便后续修改棋子状态

如果还有其他问题,比如如何处理用户落子输入、胜负逻辑判断之类的,随时提出来就行!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:37:18