这个五子棋程序没有用到最大值最小中的剪枝算法,只是简单的实现了电脑能根据当前棋盘找到最有利的一个位置 然后在此位置下子。 现在算是实现人工智能的一个小的开始吧。关于下棋规则并没有按标准的五子棋规则而是只要在任意一个方向有五颗棋子就算赢。简单的说就是没有禁手规则。写这个程序确实也锻炼了自己不少,就是说写一个什么程序或者工程我觉得不是拿到就开始写代码了。而是先把整体框架先想好 再去写代码我发现这样子做反而更高效,如果一开始就写代码你会发现写到中途写不下去了,这个没有想好,那个功能欠佳。。。等等一系列的问题
这个五子棋可以当做一个初始模板,因为许许多多的功能可以往里面添加 比如:记忆功能,选择不同的算法难度,悔棋。。。等等其他待加入的功能。
打了半天的字了,手软了 下面贴上我的代码。
#include"global.h"
#include"game.h"
#include"modal.h"
int AnChessStatus[15][15];
void initStatus()
{
int i;
int j;
for(i=0;i
{
for(j=0;j
{
AnChessStatus[i][j]=STATUS_BLANK;
}
}
}
int getStatus(const Point spPoint)
{
return AnChessStatus[spPoint.row][spPoint.col];
}
void setStatus(const Point spPoint)
{
AnChessStatus[spPoint.row][spPoint.col]=spPoint.status;
}
int judge(Point spPoint)
{
int count=0;
spPoint.status=AnChessStatus[spPoint.row][spPoint.col];
//横向
count=judgeHorizontal(spPoint);
if(count>=5)
{
return JUDGE_WIN;
}
//竖向
count=judgeVertical(spPoint);
if(count>=5)
{
return JUDGE_WIN;
}
//向上对角线
count=judgeHyperphoria(spPoint);
if(count>=5)
{
return JUDGE_WIN;
}
//向下对角线
count=judgeHypophoria(spPoint);
if(count>=5)
{
return JUDGE_WIN;
}
if(judgeDraw()==TRUE)
{
return JUDGE_DRAW;
}
return JUDGE_PLAY;
}
//横向
int judgeHorizontal(const Point spPoint)
{
int i;
int j;
int counter=1;
int standard=spPoint.status;
j=spPoint.col-1;
i=spPoint.row;
while(j>=0)
{
if(AnChessStatus[i][j--]==standard)
{
counter++;
}
else
{
break;
}
}
j=spPoint.col+1;
while(j
{
if(AnChessStatus[i][j++]==standard)
{
counter++;
}
else
{
break;
}
}
return counter;
}
//竖向
int judgeVertical(const Point spPoint)
{
int i;
int j;
int counter=1;
int standard=spPoint.status;
j=spPoint.col;
i=spPoint.row-1;
while(i>=0)
{
if(AnChessStatus[i--][j]==standard)
{
counter++;
}
else
{
break;
}
}
i=spPoint.row+1;
while(i
{
if(AnChessStatus[i++][j]==standard)
{
counter++;
}
else
{
break;
}
}
return counter;
}
//向上对角线
int judgeHyperphoria(const Point spPoint)
{
int i;
int j;
int counter=1;
int standard=spPoint.status;
j=spPoint.col-1;
i=spPoint.row+1;
while(i>=0&&j>=0)
{
if(AnChessStatus[i++][j--]==standard)
{
counter++;
}
else
{
break;
}
}
i=spPoint.row-1;
j=spPoint.col+1;
while(i
{
if(AnChessStatus[i--][j++]==standard)
{
counter++;
}
else
{
break;
}
}
return counter;
}
//向下对角线
int judgeHypophoria(const Point spPoint)
{
int i;
int j;
int counter=1;
int standard=spPoint.status;
j=spPoint.col-1;
i=spPoint.row-1;
while(i>=0&&j>=0)
{
if(AnChessStatus[i--][j--]==standard)
{
counter++;
}
else
{
break;
}
}
i=spPoint.row+1;
j=spPoint.col+1;
while(i
{
if(AnChessStatus[i++][j++]==standard)
{
counter++;
}
else
{
break;
}
}
return counter;
}
int judgeDraw()
{
int i;
int j;
for(i=0;i
{
for(j=0;j
{
if(AnChessStatus[i][j]==STATUS_BLANK)
{
return FALSE;
}
}
}
return TRUE;
}
目前为止很多大学生跟着学校进度学习C语言大概半年左右,基础学习只学到了指针,学得非常浅。说实话,起初对C语言的印象———只是一个学习计算机语言的敲门砖,对具体C语言如何应用等,非常迷茫。直到大一下半学期的高级语言设计课程之后,试过dos运行的图形化界面的完整小程序,才发现C语言的魅力。
如果你想了解C++,想学习C++请关注微信公众号:游戏开发教程
推荐关注我的微信公众号“游戏开发教程”里面我写了很多学习建议和学习方法、学习规划,还有清晰的系统学习路线图,希望可以帮助大家。
领取专属 10元无门槛券
私享最新 技术干货