本文主要详细介绍了用C语言实现三子棋游戏。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。
本文分享用C语言实现三棋游戏的具体代码,供大家参考。具体内容如下
注意:实现游戏需要三个文件。
1、test.c:放置主功能(main())和菜单功能(menu())和游戏功能(game())。
2、game.c:在游戏中放置相应操作的函数(),如PlayerMove(棋盘)、ComputerMove(棋盘)、每次移动后打印当前棋盘内容的函数(DisplayBoard(棋盘))等。因为这些函数有许多内容,所以它们是在头文件中单独实现的。
3、game.h:把函数的声明放在game.c和需要用到的库函数的头文件(stdio.h,stdlib.h,time.h)中,在test.c和game.c中引用就好(#include' game.h ')。
test.c
1.主函数(main())
游戏的一般执行过程
int main()
{
//设置随机数生成的起点,作为下一台计算机的坐标。
srand((无符号int)time(NULL));
int input=0;
做
{
menu();//菜单功能
Printf('请选择:');
scanf('%d ',输入);
开关(输入)
{
案例1:
game();
打破;
案例0:
Printf('退出游戏\ n ');
打破;
默认值:
Printf('选择错误,请重新选择\ n ');
打破;
}
} while(输入);
返回0;
}
2.菜单功能(menu())
玩家选择玩游戏或者退出。
无效菜单()
{
printf(' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ');
printf(' * * * 1 . play 0 . exit * * * \ n ');
printf(' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ');
}
3.游戏功能(game())
三棋游戏的操作步骤,以及其中涉及的功能将在game.c中解释
无效游戏()
{
//作为标记最终判断结果的标志
int ret=0;
//设置数组存储棋盘信息。
char board[3][3]={ 0 };
//用所有空格初始化棋盘。
InitBoard(板);
//打印棋盘
显示板(board);
//下棋
//下棋的过程
while (1)
{
//玩家的下一步棋
PlayerMove(板);
显示板(board);
ret=IsWin(板);
//如果ret=='c ',继续下棋。剩下的就是玩家赢了或者电脑赢了或者平局了,那就别下棋了,跳出while循环吧。
if ('c '!=ret)
打破;
//计算机的下一步
ComputerMove(板);
显示板(board);
ret=IsWin(板);
if ('c '!=ret)
打破;
}
//下完棋,判断谁赢了。
if ('*'==ret)
Printf('玩家获胜\ n ');
else if ('#'==ret)
Printf('计算机赢\ n ');
else if('e'==ret)
printf(' tie \ n ');
}
game.c
Ps:里面指向P数组的指针,实际实参是board,是棋盘第一行数组的地址。
1.InitBoard(初始化板的内容)
//用所有空格初始化棋盘。
void InitBoard(char (*p)[3])
{
int I=0;
for(I=0;i3;我)
{
int j=0;
for(j=0;j 3;j)
{
p[I][j]=“”;
}
}
}
2.显示板(显示板的内容)
开始的棋盘是这样的。
void显示板(char (*p)[3])
{
int I=0;
//打印棋盘的每一行
for(I=0;i3;我)
{
//打印棋子和竖杆
printf(' %c | %c | %c \n ',p[i][0],p[i][1],p[I][2]);
//分隔线只打印两行。
如果(I ^ 2)
printf('-|-|-\ n ');
}
}
3.玩家移动(玩家的下一步)
玩家的孩子用*表示,要注意两点:1。孩子是否在棋盘坐标中;2.坐标是否被移动。
//玩家的下一步棋(*)
void PlayerMove(char (*p)[3])
{
int x=0;
int y=0;
Printf('玩家去:\ n ');
while (1)
{
Printf('请输入要下载的坐标(用空格隔开):');
scanf('%d%d ',x,y);
//确定坐标是否正确。
如果(x=1 x=3 y=1 y=3)
{
//如果下方坐标正确,则判断坐标是否已经降低。
if (p[x-1][y-1]==' ')
{
p[x-1][y-1]=' * ';
打破;
}
其他
{
Printf('此位置已移动\ n ');
}
}
其他
{
Printf('坐标输入错误\ n ');
}
}
}
4.计算机移动(下位机)
计算机下的子用#表示,限制rand函数得到的子坐标必须在棋盘中。只考虑坐标有没有被移动。
//计算机(#)
void ComputerMove(char (*p)[3])
{
int x=0;
int y=0;
Printf('电脑去:\ n ');
//下一个子坐标已经有效,只需判断坐标是否被移动。
while (1)
{
//让X和Y随机产生一个0到2之间的数作为下一台电脑的坐标。
int x=rand()% 3;
int y=rand()% 3;
//确定是否已经放下。
if('==p[x][y])
{
p[x][y]=' # ';
打破;
}
}
}
5.IsWin(判断输赢)和IsFull(判断棋盘是否已填好)
每下一步棋有四种情况,玩家赢,电脑赢,和棋,继续,IsWin判断:
判断谁赢:棋盘的三排、三列或两条对角线是同一种棋子。无论谁赢,都将归还他放下的棋子的符号(*或#)。
如果没有赢,只剩下两种情况:和棋(棋盘已满)和继续(棋盘未满)。是否继续下棋由ISFULL决定。
//确定棋盘是否已满。
//全向下返回1
//未满,返回0
int IsFull(char(*p)[3])
{
int I=0;
int j=0;
for(I=0;i3;我)
{
for(j=0;j 3;j)
{
if (p[i][j]==' ')
返回0;
}
}
返回1;
}
//判断你是赢还是输
//玩家获胜并返回' * '
//计算机获胜并返回“#”
//平局返回“E”
//继续返回到‘C’
char IsWin(char(*p)[3])
{
int I=0;
//三条水平线
for(I=0;i3;我)
{
if(p[I][0]==p[I][1]p[I][1]==p[I][2]p[I][0]!=' ')
return p[I][0];
}
//垂直三列
for(I=0;i3;我)
{
if(p[0][I]==p[1][I]p[1][I]==p[2][I]p[0][I]!=' ')
return p[0][I];
}
//两条对角线
if(p[0][0]==p[1][1]p[1][1]==p[2][2]p[0][0]!=' ')
返回p[0][0];
if(p[0][2]==p[1][1]p[1][1]==p[2][0]p[0][2]!=' ')
返回p[0][2];
//判断是平局还是继续(电脑和玩家都没赢。此时棋盘满了就打成平手,没满就继续)
if (IsFull(p))
返回“e”;
其他
返回“c”;
}
游戏. h
包括要使用的C语言的函数和库函数的声明。
# includestdio.h
#includestdlib.h
#includetime.h
void init board(char(* p)[3]);
void display board(char(* p)[3]);
void player move(char(* p)[3]);
void computer move(char(* p)[3]);
char is win(char(* p)[3]);
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。