c语言写一个五子棋小游戏

 

部分效果图:

 

  1. 总体设计

 

这里我将叙述一个大概的设计过程。

玩家一使用的棋子是’*’ 玩家二以及电脑使用的棋子是’#’。这两个字符只是方便做相关操作。

实际显示时,我将玩家一显示为白棋子,玩家二显示为黑棋子。而不是直接把’*’和’#’显示给用户。

棋盘用的是二维数组。

一盘游戏几乎所有操作都是在这个二维数组上面实现。主要功能有:游戏背景音乐,实时棋盘的更新,棋子的移动,判断胜负,胜负播报音乐,电脑实现智能化落子。

本程序分为两大部分,一部分是人机对战,另一部分是人人对战。人人对战就不说了。人机对战让电脑实现了一定的智能化,主要算法是Ai()函数。

以下是各个功能函数的简要概述。

int isWin();//判定胜负

void Ai6();//电脑随机放子

void Ai5();//阻止玩家冲三

void Ai4();//电脑实现冲四

void Ai3();//阻止玩家冲四

void Ai2();//让电脑实现冲五

void Ai1();//阻止玩家冲五

void load();//初始界面

void printS();//打印棋盘

void newgame();//游戏主体

void gamer();//双人对战

void movedown(int *x,int *y,int ret);//向上

void moveup(int *x,int *y,int ret);//向下

void moveright(int *x,int *y,int ret);//向右

void moveleft(int *x,int *y,int ret);//向左

void move();//人机模式移动

void move1();//双人对战 玩家一

void move2(); //双人对战 玩家二

void end(int flag);//结束界面

2. 算法设计

 

主要算法函数:电脑智能下棋。

使用了函数嵌套,

优先级:

Ai1()        ->Ai2()         ->Ai3()        ->Ai4()        ->Ai5()        ->Ai6()

阻止玩家冲五->让电脑实现冲五->阻止玩家冲四->电脑实现冲四->阻止玩家冲三->随机放子

函数说明:

阻止玩家冲五:通过遍历棋盘(用两个for循环),得到玩家的棋子位置,判断它的棋子里面是否有连四的情况出现,如果有就进行防守。其它防守函数同理。电脑实现冲五则是通过遍历棋盘上自己的棋子,如果有连四的情况,那么就补上最后一个棋子完成胜局。其它进攻函数同理。

怎样实现优先级?通过函数嵌套,把Ai1()(阻止玩家冲五)作为第一个返回函数,如果能找到相应的位置(成功防守)那么就返回该位置,否则继续进行下一个判断也就是Ai2()(让自己实现冲五),以此类推。

 

void Ai6();//电脑随机放子

void Ai5();//阻止玩家冲三

void Ai4();//电脑实现冲四

void Ai3();//阻止玩家冲四

void Ai2();//让电脑实现冲五

void Ai1();//阻止玩家冲五

void Ai1()//阻止玩家冲五

 

以下是Ai1()的示例:

void Ai1()

{

int i,j;

/*遍历棋盘,找出玩家的棋子是否有连四的情况,四种连四情况都得查找,即

横/纵/左上斜/右下斜*/

for(i=1;i<20;i++)

for(j=1;j<20;j++)

{

if(game[i][j]=='*'&&game[i][j+1]=='*'&&game[i][j+2]=='*'&&game[i][j+3]=='*')//横向

{

if(game[i][j-1]=='.'){

game[i][j-1]='#';return; //如果找到该位置那么把棋子放好之后直接return

}

if(game[i][j+4]=='.'){

game[i][j+4]='#';return;

}

}

if(game[i][j]==game[i+1][j]&&game[i+1][j]==game[i+2][j]&&game[i+2][j]==game[i+3][j]&&game[i+3][j]=='*')//纵向

{

if(game[i-1][j]=='.'){

game[i-1][j]='#';return;

}

if(game[i+4][j]=='.'){

game[i+4][j]='#';return;

}

}

if(game[i][j]==game[i+1][j+1]&&game[i+1][j+1]==game[i+2][j+2]&&game[i+2][j+2]==game[i+3][j+3]&&game[i+3][j+3]=='*') //斜向1

{

if(game[i
评论 67
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值