【0931】 2023-10-19 15:06 采纳率: 86.4%
浏览 12
已结题

这个c语言程序怎么写

用c语言编写一个程序,实现一个简单的井字棋游戏,让两个玩家轮流下棋并判断游戏是否结束。
这个程序需要实现一个井字棋游戏的逻辑,并提供用户输入进行游戏操作。游戏开始时,显示一个3x3的棋盘,玩家1使用 "X" 表示,玩家2使用 "O" 表示。两个玩家轮流输入坐标,代表在棋盘上下子的位置。程序需要进行合法性检查,即确保所选位置没有被占据,而且位置在合法范围内。每次有玩家下棋后,程序需要判断是否游戏结束,即某一方胜利或平局。如果游戏结束,程序应该输出对应的结果。(如果输入的位置不是合法位置,则输出不是合法位置,请重新输入!,如果所选位置被占据,则输出该位置已被占据,请重新输入!)

示例输出:
井字棋游戏开始!
玩家1为 "X",玩家2为 "O"
当前棋盘状态:

    • X
  • X O
    X - O
    玩家1,请输入位置(格式:行 列):3 1(回车)
    玩家2,请输入位置(格式:行 列):3 3(回车)
    玩家1,请输入位置(格式:行 列):2 2(回车)
    玩家2,请输入位置(格式:行 列):2 3(回车)
    玩家1,请输入位置(格式:行 列):1 3(回车)
    玩家1胜利!
    (注:当玩家1输入完毕后,则输出:玩家2,请输入位置(格式:行 列):)
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-19 18:58
    关注

    【以下回答由 GPT 生成】

    #include <stdio.h>
    
    // 定义棋盘大小
    #define SIZE 3
    
    // 初始化棋盘
    void initBoard(char board[][SIZE]) {
        for (int i = 0; i < SIZE; i++) {
            for (int j = 0; j < SIZE; j++) {
                board[i][j] = '-';
            }
        }
    }
    
    // 打印棋盘
    void printBoard(char board[][SIZE]) {
        for (int i = 0; i < SIZE; i++) {
            for (int j = 0; j < SIZE; j++) {
                printf("%c ", board[i][j]);
            }
            printf("\n");
        }
        printf("\n");
    }
    
    // 判断游戏是否结束
    int checkGameOver(char board[][SIZE]) {
        // 检查横向是否有连线
        for (int i = 0; i < SIZE; i++) {
            if (board[i][0] != '-' && board[i][0] == board[i][1] && board[i][1] == board[i][2]) {
                return 1;
            }
        }
        // 检查纵向是否有连线
        for (int j = 0; j < SIZE; j++) {
            if (board[0][j] != '-' && board[0][j] == board[1][j] && board[1][j] == board[2][j]) {
                return 1;
            }
        }
        // 检查对角线是否有连线
        if (board[0][0] != '-' && board[0][0] == board[1][1] && board[1][1] == board[2][2]) {
            return 1;
        }
        if (board[0][2] != '-' && board[0][2] == board[1][1] && board[1][1] == board[2][0]) {
            return 1;
        }
        // 检查是否平局
        int count = 0;
        for (int i = 0; i < SIZE; i++) {
            for (int j = 0; j < SIZE; j++) {
                if (board[i][j] != '-') {
                    count++;
                }
            }
        }
        if (count == SIZE * SIZE) {
            return 2;
        }
        return 0;
    }
    
    int main() {
        char board[SIZE][SIZE];
        initBoard(board);
    
        printf("井字棋游戏开始!\n");
        printf("玩家1为 \"X\",玩家2为 \"O\"\n");
    
        int player = 1;
        int row, column;
        int gameOver = 0;
        while (!gameOver) {
            printf("当前棋盘状态:\n");
            printBoard(board);
    
            printf("玩家%d,请输入位置(格式:行 列):", player);
            scanf("%d %d", &row, &column);
    
            // 检查所选位置的合法性
            if (row < 1 || row > SIZE || column < 1 || column > SIZE) {
                printf("不是合法位置,请重新输入\n");
                continue;
            }
    
            row--;
            column--;
    
            // 检查所选位置是否已被占据
            if (board[row][column] != '-') {
                printf("该位置已被占据,请重新输入\n");
                continue;
            }
    
            // 下棋
            if (player == 1) {
                board[row][column] = 'X';
                player = 2;
            } else {
                board[row][column] = 'O';
                player = 1;
            }
    
            // 检查游戏是否结束
            gameOver = checkGameOver(board);
        }
    
        printf("游戏结束!\n");
        printf("当前棋盘状态:\n");
        printBoard(board);
    
        if (gameOver == 1) {
            printf("玩家%d胜利!\n", player);
        } else {
            printf("平局!\n");
        }
    
        return 0;
    }
    


    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月27日
  • 已采纳回答 10月19日
  • 创建了问题 10月19日

悬赏问题

  • ¥15 Fluent,液体进入旋转区域体积分数不连续
  • ¥15 课上突考,本人大脑过载,求51单片机能手
  • ¥15 java linux下将docx文件转pdf
  • ¥15 maven无法下载依赖包
  • ¥15 关于pycharm, Callable[[str],bool]作为方法参数使用时, lambda 类型不提示问题
  • ¥15 layui数据重载无效
  • ¥15 寻找了解qq家园纵横四海的程序猿。
  • ¥15 optisystem
  • ¥15 VB.NET画图时的撤销编程
  • ¥15 C# webservice 参数特殊字符处理