基于C语言实现三子棋游戏的代码怎么写

这篇“基于C语言实现三子棋游戏的代码怎么写”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“基于C语言实现三

这篇“基于C语言实现三子棋游戏的代码怎么写”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“基于C语言实现三子棋游戏的代码怎么写”文章吧。

1.创建文件 

test.c (游戏的测试逻辑)game.c(游戏的实现逻辑)gane.h(游戏实现函数的声明)

game.c 和game.h属于游戏实现 test.c属于游戏测试

test.c 源文件(源文件添加)——game.c 源文件(源文件添加)——game.h(头文件添加)

三个文件 

2.首先在test.c文件写一个主函数,主函数里面有一个测试函数,测试函数里面写菜单、进入游戏、退出游戏

代码展示:

  1. void menu()
  2. {
  3.     printf("***************************\\n");
  4.     printf("********  1.play   ********\\n");
  5.     printf("********  0.exit   ********\\n");
  6.     printf("***************************\\n");
  7. }
  8.  
  9. void test()
  10. {
  11.     int input = 0;
  12.     do
  13.     {
  14.         menu();
  15.         printf("请选择:->");
  16.         scanf("%d", &input);
  17.         switch (input)
  18.         {
  19.         case 1:
  20.             printf("三子棋\\n");
  21.             break;
  22.         case 0:
  23.             printf("退出游戏\\n");
  24.             break;
  25.         default:
  26.             printf("选择错误\\n");
  27.             break;
  28.         }
  29.     } while (input);
  30. }
  31.  
  32. #include <stdio.h>
  33. int main()
  34. {
  35.     test();
  36.     return 0;
  37. }

注意:

(1)一般用do while (游戏可能会玩很多次,最少一次)

(2)先打印一个菜单

(3)switch语句,要记得break,要记得default

接下来 把printf("三子棋\\n")  改成 game(); 然后开始写游戏部分。 

3.三子棋代码

思路:(\\n 不要忘记写)

(1)棋盘用数组

(2)假设玩家走用' * ',电脑走用' # ',所以用字符类型的数组(3*3的)

row 中文意思是行 column 中文意思是列   init 英文最初的简写

引用自己写的文件 把#include < >改成 #include " "

(3)棋盘初始化

函数的声明在头文件里

(4)打印棋盘 (打印数据、分割行),把数据行和分割行看做一大部分,最后一部分没有分割行而已。

(5)玩家下棋,打印棋盘,电脑下棋,打印棋盘。

(6)每下一步棋后,会有四种结果 玩家赢,电脑赢,平局,继续玩 。所以要进行判断。

玩家赢 &lsquo;*&rsquo;,电脑赢&lsquo;#&rsquo;,平局&lsquo;Q&rsquo;,继续 &lsquo;C&rsquo;

game.h 部分代码展示

  1. #pragma once
  2. #include <stdio.h>
  3. #include <time.h>
  4. #include <stdlib.h>
  5.  
  6. #define ROW 3
  7. #define COL 3
  8.  
  9. //初始化棋盘
  10. void Initboard(char board[ROW][COL], int row, int col);//define 定义的ROW,COL是常量,而这里的row,col都是变量,所以不能替代
  11. void Displayboard(char board[ROW][COL], int row, int col);//打印棋盘
  12. void player_move(char board[ROW][COL], int row, int col);//玩家下棋
  13. void computer_move(char board[ROW][COL], int row, int col);//电脑下棋
  14.  
  15. char is_win(char board[ROW][COL], int row, int col);//判断输赢以及平局和继续玩

game.c代码展示

  1. #include "game.h"
  2.  
  3.  
  4. void Initboard(char board[ROW][COL], int row, int col)
  5. {
  6.     int i = 0;
  7.     int j = 0;
  8.     for (= 0; i < row; i++)
  9.     {
  10.         for (= 0; j < col; j++)
  11.         {
  12.             board[i][j] = ' ';
  13.         }
  14.     }
  15. }
  16.  
  17. void Displayboard(char board[ROW][COL], int row, int col)
  18. {
  19.     int i = 0;
  20.     int j = 0;
  21.     for (= 0; i < row; i++)
  22.     {
  23.         //打印数据
  24.         //printf(" %c | %c | %c \\n", board[i][0], board[i][1], board[i][2]);//固定的数字0,1,2 会把棋盘给固定住,所以不能这样写
  25.         for (= 0; j < col; j++)
  26.         {
  27.             printf(" %c ", board[i][j]);
  28.             if (< col - 1)
  29.                 printf("|");
  30.         }
  31.         printf("\\n");
  32.         //打印分割行
  33.         if (< row - 1)
  34.         {
  35.             for (= 0; j < col; j++)
  36.             {
  37.                 printf("---");
  38.                 if (< col - 1)
  39.                 {
  40.                     printf("|");
  41.                 }
  42.             }
  43.             printf("\\n");
  44.         }
  45.     }
  46.     
  47. }
  48.  
  49. int is_full(char board[ROW][COL], int row, int col)
  50. {
  51.     int i = 0;
  52.     int j = 0;
  53.     for (= 0; i < row; i++)
  54.     {
  55.         for (= 0; j < col; j++)
  56.         {
  57.             if (board[i][j] == ' ')
  58.             {
  59.                 return 0;
  60.             }
  61.         }
  62.     }
  63.     return 1;
  64. }
  65.  
  66. void player_move(char board[ROW][COL], int row, int col)
  67. {
  68.     int x = 0;
  69.     int y = 0;
  70.     printf("请输入坐标:->");
  71.     while (1)
  72.     {
  73.         scanf("%d %d", &x, &y);
  74.         //判断坐标是否在棋盘范围
  75.         if ((>= 1 && x <= row) && (>= 1 && y <= col))
  76.         {
  77.             if (board[- 1][- 1] == ' ')
  78.             {
  79.                 board[- 1][- 1] = '*';
  80.                 break;
  81.             }
  82.             else
  83.             {
  84.                 printf("该坐标被占用,请重新输入!\\n");
  85.             }
  86.         }
  87.         else
  88.         {
  89.             printf("坐标非法\\n");
  90.         }
  91.     }
  92. }
  93.  
  94. //电脑下棋
  95. void computer_move(char board[ROW][COL], int row, int col)
  96. {
  97.     int x = 0;
  98.     int y = 0;
  99.     printf("电脑下棋\\n");
  100.     while (1)
  101.     {
  102.         x = rand() % row;
  103.         y = rand() % col;
  104.         if (board[x][y] == ' ')
  105.         {
  106.             board[x][y] = '#';
  107.             break;
  108.         }
  109.     }
  110. }
  111. //判断每一步棋后是输赢,还是平局,还是继续玩
  112. char is_win(char board[ROW][COL], int row, int col)
  113. {
  114.     int i = 0;
  115.     for (= 0; i < row; i++)
  116.     {
  117.         if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')
  118.         {
  119.             return board[i][0];
  120.         }
  121.     }
  122.     for (= 0; i < col; i++)
  123.     {
  124.         if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ')
  125.         {
  126.             return board[0][i];
  127.         }
  128.     }
  129.     if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
  130.     {
  131.         return board[0][0];
  132.     }
  133.     if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
  134.     {
  135.         return board[1][1];
  136.     }
  137.     int a = is_full(board, row, col);
  138.     if (1 == a)
  139.     {
  140.         return 'Q';
  141.     }
  142.     return 'C';
  143. }

test.c 部分代码展示

  1. #include "game.h"
  2.  
  3. void menu()
  4. {
  5.     printf("***************************\\n");
  6.     printf("********  1.play   ********\\n");
  7.     printf("********  0.exit   ********\\n");
  8.     printf("***************************\\n");
  9. }
  10.  
  11. void game()
  12. {
  13.     char board[ROW][COL] = { 0 };
  14.     Initboard(board, ROW, COL);//棋盘初始化,内容为空格
  15.     Displayboard(board, ROW, COL);//打印棋盘
  16.     char ret = 0;
  17.     //下棋
  18.     while (1)
  19.     {
  20.         player_move(board, ROW, COL);
  21.         Displayboard(board, ROW, COL);
  22.         ret = is_win(board, ROW, COL);
  23.         if (ret != 'C')
  24.         {
  25.             break;
  26.         }
  27.         computer_move(board, ROW, COL);
  28.         Displayboard(board, ROW, COL);
  29.         ret = is_win(board, ROW, COL);
  30.         if (ret != 'C')
  31.         {
  32.             break;
  33.         }
  34.     }
  35.     if (ret == '*')
  36.     {
  37.         printf("恭喜你,取得胜利!\\n");
  38.     }
  39.     else if (ret == 'Q')
  40.     {
  41.         printf("平局\\n");
  42.     }
  43.     else
  44.     {
  45.         printf("你输了\\n");
  46.     }
  47. }
  48.  
  49. void test()
  50. {
  51.     int input = 0;
  52.     srand((unsigned int)time(NULL));
  53.     do
  54.     {
  55.         menu();
  56.         printf("请选择:->");
  57.         scanf("%d", &input);
  58.         switch (input)
  59.         {
  60.         case 1:
  61.             game();
  62.             break;
  63.         case 0:
  64.             printf("退出游戏\\n");
  65.             break;
  66.         default:
  67.             printf("选择错误\\n");
  68.             break;
  69.         }
  70.     } while (input);
  71. }
  72.  
  73.  
  74. int main()
  75. {
  76.     test();
  77.     return 0;
  78. }

基于C语言实现三子棋游戏的代码怎么写

以上就是关于“基于C语言实现三子棋游戏的代码怎么写”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注恰卡网行业资讯频道。

本站部分文章来自网络或用户投稿,如无特殊说明或标注,均为本站原创发布。涉及资源下载的,本站旨在共享仅供大家学习与参考,如您想商用请获取官网版权,如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
开发者

pytorch中Tensor.to(device)和model.to(device)的区别是什么

2022-7-23 1:06:00

开发者

Java中Json与List、Map、entity怎么互相转化

2022-7-23 1:06:06

搜索