三子棋游戏的准备
对游戏功能的分工
- test.c //测试游戏的逻辑
- game.c //游戏代码的实现
- game.h //游戏代码的声明(函数声明,符号定义)
测试游戏的逻辑test.c
主函数 main()
int main()
{
srand((unsigned int)time(NULL));//设置随机数的生成起点
int input = 0;
do
{
menu();//打印菜单
printf("请输入:");
scanf("%d", &input);//输入
switch (input)
{
case 1:
//printf("三子棋\n");
game();
break;
case 0:
printf("退出游戏!\n");
break;
default:
printf("选择错误,请重新选择\n");
break;
}
} while (input);
return 0;
}
这里的srand()是后面电脑下棋函数需要用到的,关于这个函数的使用可以参考rand()
至于为什么一开始就写srand(),是因为我们只需要生成一次随机数的起点,以供电脑下棋就行了,
这样就避免了我们可能把srand()放在包含rand()函数的的前面,让这个随机数不再随机的问题。
menu()
void menu()
{
printf("**************************\n");
printf("**** 1.play ****\n");
printf("**** 0.exit ****\n");
printf("**************************\n");
}
思考
玩家玩游戏的时候是不是要先给游戏的菜单?
游戏的逻辑game()
void game()
{
char ret = 0;
char board[ROW][COL] = {
0 };
//初始化棋盘的函数
InitBoard(board, ROW, COL);
//打印棋盘的函数
DisplayBoard(board, ROW, COL);
//下棋的函数
while (1)
{
//玩家下棋的函数
PlayerMove(board, ROW, COL);
//判断输赢的函数
ret = IsWin(board,ROW,COL);
if (ret != 'C')
break;
//打印棋盘
DisplayBoard(board, ROW, COL);
//电脑下棋的函数
ComputerMove(board, ROW, COL);
//判断输赢的函数
ret = IsWin(board, ROW, COL);
if (ret != 'C')
break;
//打印棋盘
DisplayBoard(board, ROW, COL);
}
if (ret == '*')
printf("玩家赢\n");
else if (ret == '#')
printf("电脑赢\n");
else
printf("平局\n");
DisplayBoard(board, ROW, COL);
}
思考
玩家和电脑下完棋之后是不是要打印棋盘让我们知道下在哪里了?
玩家和电脑下棋之后是不是要判断输赢?
三子棋游戏是不是有 玩家赢 电脑赢 平局 继续 四种情况?
无论哪种情况发生了是不是都要打印棋盘知道最后的结果?
test.c的全部代码
#define _CRT_SECURE_NO_WARNINGS
//利用数组实现三子棋
//test.c //测试游戏的逻辑
//game.c //游戏代码的实现
//game.h //游戏代码的声明(函数声明,符号定义)
#include "game.h"
void menu()
{
printf("**************************\n");
printf("**** 1.play ****\n");
printf("**** 0.exit ****\n");
printf("**************************\n");
}
void game()
{
char ret = 0;
char board[ROW][COL] = {
0 };
//初始化棋盘的函数
InitBoard(board, ROW, COL);
//打印棋盘的函数
DisplayBoard(board, ROW, COL);
//下棋的函数
while (1)
{
//玩家下棋的函数
PlayerMove(board, ROW, COL);
//判断输赢的函数
ret = IsWin(board,ROW,COL);
if (ret != 'C')
break;
//打印棋盘
DisplayBoard(board, ROW, COL);
//电脑下棋的函数
ComputerMove(board, ROW, COL);
//判断输赢的函数
ret = IsWin(board, ROW, COL);
if (ret != 'C')
break;
//打印棋盘
DisplayBoard(board, ROW, COL);
}
if (ret == '*')
printf("玩家赢\n");
else if (ret == '#')
printf(