");printf("玩家赢\n");printf("电脑赢\n");//判断坐标是否被占用。printf("玩家走:>\n");printf("电脑走:>\n");">
当前位置:   article > 正文

三子棋(C游戏)

三子棋(C游戏)

文章目录

    • 三子棋的描述
    • 思路
    • 关键代码
    • 运行代码

三子棋的描述 

三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏分为双方对战,双方依次在9宫格棋盘上摆放棋子,率先将自己的三个棋子走成一条线就视为胜利,而对方就算输了,但是三子棋在很多时候会出现和棋的局面。

思路

用C语言实现三子棋并不是很好看,如果要实现图片上就需要前端代码才可以。

1、我们必须要使用do{}while()实现游戏是否开始。

    int input = 0;

    do
    {
        menu();
        printf("请选择:>");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            printf("游戏开始\n");
            game();
            break;

        case 0:
            printf("退出游戏\n");
            break;

        default:
            printf("输入错误,请重新输入");
            break;

        }

    } while (input);
    return 0;


2、实现棋盘初始化

    int i = 0;
    int j = 0;
    int k = 2;
    for (i = 0; i < row; i++)
    {
        for (j = 0; j < col; j++)
        {
            printf(" %c ", board[i][j]);
            if (k>j)
                printf("|");
        }
        printf("\n");
        if (i < row - 1)
        {
            int j = 0;
            for (j = 0; j < col; j++)
            {
                printf("---");
                if (k>j)
                    printf("|");
            }
            printf("\n");

        }

    }


3、实现3*3的空格

    int i = 0;
    int j = 0;

    for (i = 0; i < row; i++)
    {
        for (j = 0; j < col; j++)
        {
            board[i][j] = ' ';
        }

    }


4、你下棋的坐标,然后检验你下的是否连线。

    int x = 0;
    int y = 0;
    printf("玩家走:>\n");

    while (1)
    {
        printf("请输入坐标:");
        scanf("%d,%d", &x, &y);
        //判断坐标的合法性
        if (x >= 1 && x <= row && y >= 1 && y <= col)
        {
            //判断坐标是否被占用
            if (board[x - 1][y - 1] == ' ')
            {
                board[x - 1][y - 1] = '*';
                break;
            }
            else
            {
                printf("坐标被占用,请重新输入:\n");
            }
        }
        else
        {
            printf("坐标非法,请重新输入:\n");
        }
    }

        ret = InWin(board, ROW, COL);
        if (ret != 'C')

    if (ret == '*')
    {
        printf("玩家赢\n");
    }


5、电脑下棋的坐标,然后检验你下的是否连线。

    printf("电脑走:>\n");
    while (1)
    {
        int x = rand() % row;
        int y = rand() % col;
        //判断坐标是否被占用
        if (board[x][y] == ' ')
        {
            board[x][y] = '#';
            break;
        }

    }

if (ret != 'C')

    else if (ret == '#')
    {
        printf("电脑赢\n");
    }


6、剩余的则是平局

7、实现检验连线的是'*'、'#'和'Q'(关键代码)

    //判断三行
    int i = 0;
    for (i = 0; i < row; i++)
    {
        if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')
        {
            return board[i][0];
            break;
        }
    }
    //判断三列
    int j = 0;
    for (j = 0; j < col; j++)
    {
        if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[0][j] != ' ')
        {
            return board[0][j];
            break;
        }
    }
    //判断对角线
    if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ')
    {
        return board[0][0];
    }
    if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != ' ')
    {
        return board[0][2];
    }
    //如果棋盘满了返回1,没满返回0
    int ret = IsFull(board, row, col);
    if (ret == 1)
    {
        return 'Q';
    }
    //继续
    return 'C';


运行代码

一、游戏函数声明(game.h)

  1. #pragma once
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<time.h>
  5. #define ROW 3//竖
  6. #define COL 3//横
  7. //函数声明
  8. //初始化棋盘的函数
  9. void IsitBoard(char board[ROW][COL], int row, int col);
  10. //打印棋盘的函数
  11. void DisplayBoard(char board[ROW][COL], int row, int col);
  12. //玩家下棋的函数
  13. void PlayerMove(char board[ROW][COL], int row, int col);
  14. //电脑下棋的函数
  15. void ComputerMove(char board[ROW][COL], int row, int col);
  16. //判断游戏状态的函数
  17. char InWin(char board[ROW][COL], int row, int col);

二、游戏实现

  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. #include"game.h"
  3. void IsitBoard(char board[ROW][COL], int row, int col)
  4. {
  5. int i = 0;
  6. int j = 0;
  7. for (i = 0; i < row; i++)
  8. {
  9. for (j = 0; j < col; j++)
  10. {
  11. board[i][j] = ' ';
  12. }
  13. }
  14. }
  15. void DisplayBoard(char board[ROW][COL], int row, int col)
  16. {
  17. int i = 0;
  18. int j = 0;
  19. int k = 2;
  20. for (i = 0; i < row; i++)
  21. {
  22. for (j = 0; j < col; j++)
  23. {
  24. printf(" %c ", board[i][j]);
  25. if (k>j)
  26. printf("|");
  27. }
  28. printf("\n");
  29. if (i < row - 1)
  30. {
  31. int j = 0;
  32. for (j = 0; j < col; j++)
  33. {
  34. printf("---");
  35. if (k>j)
  36. printf("|");
  37. }
  38. printf("\n");
  39. }
  40. }
  41. }
  42. void PlayerMove(char board[ROW][COL], int row, int col)
  43. {
  44. int x = 0;
  45. int y = 0;
  46. printf("玩家走:>\n");
  47. while (1)
  48. {
  49. printf("请输入坐标:");
  50. scanf("%d,%d", &x, &y);
  51. //判断坐标的合法性
  52. if (x >= 1 && x <= row && y >= 1 && y <= col)
  53. {
  54. //判断坐标是否被占用
  55. if (board[x - 1][y - 1] == ' ')
  56. {
  57. board[x - 1][y - 1] = '*';
  58. break;
  59. }
  60. else
  61. {
  62. printf("坐标被占用,请重新输入:\n");
  63. }
  64. }
  65. else
  66. {
  67. printf("坐标非法,请重新输入:\n");
  68. }
  69. }
  70. }
  71. void ComputerMove(char board[ROW][COL], int row, int col)
  72. {
  73. printf("电脑走:>\n");
  74. while (1)
  75. {
  76. int x = rand() % row;
  77. int y = rand() % col;
  78. //判断坐标是否被占用
  79. if (board[x][y] == ' ')
  80. {
  81. board[x][y] = '#';
  82. break;
  83. }
  84. }
  85. }
  86. int IsFull(char board[ROW][COL], int row, int col)
  87. {
  88. int i = 0;
  89. int j = 0;
  90. for (i = 0; i <= row; i++)
  91. {
  92. for (j = 0; j <= col; j++)
  93. {
  94. if (board[i][j] == ' ')
  95. return 0;//棋盘没满
  96. }
  97. }
  98. return 1;//棋盘满了
  99. }
  100. char InWin(char board[ROW][COL], int row, int col)
  101. {
  102. //判断三行
  103. int i = 0;
  104. for (i = 0; i < row; i++)
  105. {
  106. if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')
  107. {
  108. return board[i][0];
  109. break;
  110. }
  111. }
  112. //判断三列
  113. int j = 0;
  114. for (j = 0; j < col; j++)
  115. {
  116. if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[0][j] != ' ')
  117. {
  118. return board[0][j];
  119. break;
  120. }
  121. }
  122. //判断对角线
  123. if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ')
  124. {
  125. return board[0][0];
  126. }
  127. if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != ' ')
  128. {
  129. return board[0][2];
  130. }
  131. //如果棋盘满了返回1,没满返回0
  132. int ret = IsFull(board, row, col);
  133. if (ret == 1)
  134. {
  135. return 'Q';
  136. }
  137. //继续
  138. return 'C';
  139. }

三、主代码

  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. #include "game.h"
  3. void menu()
  4. {
  5. printf("**************************\n");
  6. printf("******* 三子棋游戏 *******\n");
  7. printf("******* 1.play *******\n");
  8. printf("******* 0.exit *******\n");
  9. printf("**************************\n");
  10. }
  11. void game()
  12. {
  13. //存储数据
  14. char board[ROW][COL];
  15. //初始化棋盘
  16. IsitBoard(board, ROW, COL);
  17. //打印棋盘——本质是打印数组内容
  18. DisplayBoard(board, ROW, COL);
  19. //*代表玩家赢
  20. //#代表电脑赢
  21. //'Q'代表平局
  22. //'C'代表游戏继续
  23. char ret = 0;
  24. while (1)
  25. {
  26. //玩家下棋
  27. PlayerMove(board, ROW, COL);
  28. DisplayBoard(board, ROW, COL);
  29. //判断玩家是否赢得游戏
  30. ret = InWin(board, ROW, COL);
  31. if (ret != 'C')
  32. break;
  33. //电脑下棋
  34. ComputerMove(board, ROW, COL);
  35. DisplayBoard(board, ROW, COL);
  36. //判断电脑是否赢得游戏
  37. if (ret != 'C')
  38. break;
  39. }
  40. if (ret == '*')
  41. {
  42. printf("玩家赢\n");
  43. }
  44. else if (ret == '#')
  45. {
  46. printf("电脑赢\n");
  47. }
  48. else
  49. {
  50. printf("平局\n");
  51. }
  52. }
  53. int main()
  54. {
  55. int input = 0;
  56. srand((unsigned int)time(NULL));
  57. do
  58. {
  59. menu();
  60. printf("请选择:>");
  61. scanf("%d", &input);
  62. switch (input)
  63. {
  64. case 1:
  65. printf("游戏开始\n");
  66. game();
  67. break;
  68. case 0:
  69. printf("退出游戏\n");
  70. break;
  71. default:
  72. printf("输入错误,请重新输入");
  73. break;
  74. }
  75. } while (input);
  76. return 0;
  77. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/365849
推荐阅读
相关标签
  

闽ICP备14008679号