首页 > 其他 > 详细

三子棋(简单版本)

时间:2020-02-17 21:38:48      阅读:60      评论:0      收藏:0      [点我收藏+]

 写博客主要是对于自己的学习情况有一个总结和梳理,前期先把自己以前写过的代码进行回顾,做成博客

  1 #define _CRT_SECURE_NO_WARNINGS  //vs环境下对于scanf函数的声明
  2 #include <stdlib.h>
  3 #include <stdio.h>
  4 #include <string.h>
  5 #define ROW 3
  6 #define COL 3
  7 char g_broad[ROW][COL];
  8 void init()   //创建一个新的棋盘
  9 {
 10     srand((unsigned int)time(0));
 11     for (int row = 0; row < ROW; row++)
 12     {
 13         for (int col = 0; col < COL; col++)
 14         {
 15             g_broad[row][col] = \0;
 16         }
 17     }
 18 }
 19 void print() //对棋盘进行打印
 20 {
 21     int row = 0;
 22     for (; row < ROW; row++)
 23     {
 24         printf("| %c | %c | %c |\n", g_broad[row][0], g_broad[row][1], g_broad[row][2]);
 25         printf("|---|---|---|\n");
 26     }
 27 }
 28 void playermove()  //让玩家进行落子
 29 {
 30     printf("轮到玩家落子\n");
 31     while (1)
 32     {
 33         printf("请输入一个坐标\n");
 34         int row, col;
 35         scanf("%d %d", &row, &col);
 36         if (g_broad[row][col] == \0)
 37         {
 38             if (row >= 0 && row < ROW&&col >= 0 && col < COL)
 39             {
 40                 g_broad[row][col] = x;
 41                 break;
 42             }
 43             else
 44             {
 45                 printf("输入的坐标非法,请重新输入\n");
 46                 continue;
 47             }
 48         }
 49         else
 50         {
 51             printf("所输入的位置已经有棋子,请重新输入\n");
 52             continue;
 53         }
 54         
 55     }
 56 }
 57 void computermove()  //电脑落子使用rand函数随机落子,暴力简单
 58 {
 59     printf("轮到电脑落子\n");
 60     while (1)
 61     {
 62         int row = 0, col = 0;
 63         row = rand() % 3;
 64         col = rand() % 3;
 65         if (g_broad[row][col] == \0)
 66         {
 67             g_broad[row][col] = o;
 68             break;
 69         }
 70         else continue;
 71     }
 72 }
 73 //检查胜利的函数
 74 char checkwinner()
 75 {
 76     //检查行是否三字
 77     for (int row = 0; row < ROW; row++)
 78     {
 79         if (g_broad[row][0] == g_broad[row][1] && g_broad[row][0] == g_broad[row][2]
 80             && g_broad[row][0] != \0)
 81         {
 82             return g_broad[row][0];
 83         }
 84     }
 85     //检查列是否三字
 86     for (int col = 0; col < COL; col++)
 87     {
 88         if (g_broad[0][col] == g_broad[1][col] && g_broad[0][col] == g_broad[2][col]
 89             && g_broad[0][col]!=\0)
 90         {
 91             return g_broad[0][col];
 92         }
 93     }
 94     //检查对角线是否三字
 95     if (g_broad[0][0] == g_broad[1][1] && g_broad[0][0] == g_broad[2][2]
 96         && g_broad[0][0] != \0)
 97     {
 98         return g_broad[0][0];
 99     }
100     if (g_broad[0][2] == g_broad[1][1] && g_broad[0][2] == g_broad[2][0]
101         && g_broad[0][2] != \0)
102     {
103         return g_broad[0][2];
104     }
105     //判断和棋
106     int fow = 1;
107     for (int row = 0; row < ROW; row++)
108     {
109         for (int col = 0; col < COL; col++)
110         {
111             if (g_broad[row][col] == \0)
112             {
113                 fow = 0;
114             }
115         }
116     }
117     if (fow == 1)
118     {
119         return p;
120     }
121     return \0;
122     
123 }
124 int main()
125 {
126     //先写几个主要函数
127     //初始化的函数,打印棋盘的的函数,
128     //玩家落子的函数,电脑落子的函数,
129     //判断胜利的函数
130     //规定玩家的落子为x,电脑的落子为o,和棋为p,棋盘中先是‘\0‘
131     init();
132     char winner;
133     print();
134     while (1)
135     {
136         playermove();
137         print();
138         winner = checkwinner();
139         if (winner == x)
140         {
141             printf("玩家胜利\n");
142             break;
143         }
144                                 if (winner == p)
145         {
146             printf("和棋\n");
147             break;
148         }
149         computermove();
150         print();
151         winner = checkwinner();
152         if (winner == o)
153         {
154             printf("电脑胜利\n");
155             break;
156         }
157         if (winner == p)
158         {
159             printf("和棋\n");
160             break;
161         }
162 
163     }
164     system("pause");
165     return 0;
166 }
167 
168         
169     

新棋盘建立后的样子

技术分享图片

 

 进行随机落子后的情况

技术分享图片

 

 之后就是进行落子,判断是否胜利,这种重复性的工作就不在传照片了

三子棋(简单版本)

原文:https://www.cnblogs.com/programchen/p/12323553.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!