介绍
使用C语言怎么编写一个三子棋小游戏?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
1。开始游戏0。退出游戏
int 菜单(){ printf (“- - - - - - - - - - - - - - - - - - - - - - - - - - - - \ n"); printf(“- - - - - - - - - - 1。开始游戏- - - - - - - - - - \ n"); printf(“- - - - - - - - - - 0。退出游戏- - - - - - - - - - \ n"); printf (“- - - - - - - - - - - - - - - - - - - - - - - - - - - - \ n"); int choice =, 0; printf(“请输入你的选择:“); scanf (“% d",,,选择); return 选择; }
2。创建棋盘
棋盘:使用3行3列的二维数组来表示,元素类型是char。
使用宏定义的原因:
1。推高代码可读性,后续代码中遇到3,方便理解含义。
2。提高扩展性,如果将来要修改棋盘尺寸,代码修改会很方便。
# define MAX_ROW 3 # define MAX_COL 3 char 棋盘[MAX_ROW] [MAX_COL],=, {, 0};
3。棋盘初始化
& # 39;& # 39;表示棋盘上的空白区域
void init (char 棋盘[MAX_ROW] [MAX_COL]) { 时间=for (int row 0;, row & lt;, MAX_ROW;,行+ +){ 时间=for (int col 0;, col & lt;, MAX_COL;,坳+ +){ 棋盘(行)(col),=, & # 39;, & # 39;; } } }
4。打印棋盘
(1)简陋方法:
void print_chessBoard (char 棋盘[MAX_ROW] [MAX_COL]) { 时间=for (int row 0;, row & lt; MAX_ROW;,行+ +){ 时间=for (int col 0;, col & lt;, MAX_COL;,坳+ +){ printf (“% c",棋盘(行)[坳]),; } printf (“\ n"); } }
结果:
注意:
这里不是棋盘没打印出来,而是我们使用& # 39;& # 39;表示空白区域,所以我们看到的棋盘是一片黑色。
这样看的不是很清楚,所以我们选用更加美观的方法打印。
(2)美观方法:
void print_chessBoard (char 棋盘[MAX_ROW] [MAX_COL]) { printf (“+ - - - + - - - + - - - + \ n"); 时间=for (int row 0;, row & lt; MAX_ROW;,行+ +),{ printf (“|, % c |, % c |, % c | \ n",,棋盘(行)[0], 棋盘(行)[1],棋盘(行)[2]); printf (“+ - - - + - - - + - - - + \ n"); } }
结果:
5。玩家落子
玩家输入行列坐标表示落子,使用& # 39;x # 39;表示玩家落子。
注意:
1。玩家落子需要在棋盘范围内。
2。玩家要在棋盘上空的地方落子。
3。如果输入的坐标不满足要重新输入。
void playerMove (char 棋盘[MAX_ROW] [MAX_COL]) { while (1) { int row =, 0; int col =, 0; printf(“请输入坐标(row 坳):“); scanf (“% d % d",,,,,,上校); if (row & lt;, 0, | |, row 祝辞=,MAX_ROW | |, col & lt;, 0, | |, col 祝辞=,MAX_COL) { printf(“您的坐标不在合法范围内,(0,2),请重新输入:\ n"); 继续; } if (棋盘(行)(col), !=, & # 39;, & # 39;) { printf(“您的坐标位置已经有子了! \ n"); 继续; } 棋盘(行)(col),=, & # 39; x # 39;; 打破; } }
6。电脑落子
电脑随机产生行列坐标,& # 39;o # 39;表示电脑落子。
注意:
1。要在主函数中使用<代码>将srand ((unsigned int)时间(0))代码>
将时间作为随机数种子,确保得到的行列坐标是真随机。
2。要在棋盘上空的地方下棋。
void computerMove (char 棋盘[MAX_ROW] [MAX_COL]) { while (1) { int row =, rand (), %, MAX_ROW; int col =, rand (), %, MAX_COL; if (棋盘(行)(col), !=, & # 39;, & # 39;), { 继续; } 棋盘(行)(col),=, & # 39; o # 39;; 打破; } }
7。判断胜负
此处约定返回结果的含义:
(1)的x # 39;表示玩家获胜
(2) ' o # 39;表示电脑获胜
(3) & # 39;& # 39;表示胜负未分