这是个五子棋人机对弈的核心代码,看不懂啊,求解释

a2417241867 2012-05-17 05:55:34
大神先帮我看下下面的代码是不是用的http://www.mscto.com/vcpp/2009021434894.html里的算法?貌似是。

主要帮我看懂计算机如何思考的就行了,目前我能看懂的是nsew分别代表北南东西,五子棋的四个方向,关键是看不懂作者
//se-defend或者//nw-attack的注释是什么意思。

先谢谢大神了!
CPoint CTryDoc::ComputerThink2()
{
CPoint point;
int max1=0,max2=0,max_x,max_y;
int sco1_nesw[15][15];
int sco1_ns[15][15];
int sco1_nwse[15][15];
int sco1_we[15][15];
int sco2_nesw[15][15];
int sco2_ns[15][15];
int sco2_nwse[15][15];
int sco2_we[15][15];
int i,j,m,n,k1,k2;
for(i=0;i<15;i++)
for(j=0;j<15;j++)
{
sco1_nesw[i][j]=0;
sco1_ns[i][j]=0;
sco1_nwse[i][j]=0;
sco1_we[i][j]=0;
sco2_nesw[i][j]=0;
sco2_ns[i][j]=0;
sco2_nwse[i][j]=0;
sco2_we[i][j]=0;
sco_nesw[i][j]=0;
sco_ns[i][j]=0;
sco_nwse[i][j]=0;
sco_we[i][j]=0;
sco[i][j]=0;
direction1[i][j]=0;
direction2[i][j]=0;
direction[i][j]=0;
}
for(i=0;i<15;i++)
for(j=0;j<15;j++)
{
///////////////////////////////////////////nwse////////////////////////////////////
isadded=FALSE;
if(condition[i][j]==EMPTY) //se-defend
{
for(m=i+1,n=j+1,k1=0;m<=i+5&&m<15&&n<15&&condition[m][n]==PEOPLE;m++,n++,k1++)
{
sco1_nwse[i][j]+=5;
direction1[i][j]++;
}
while(m<15&&n<15&&condition[m][n]==EMPTY)
{
if(isadded==FALSE)
{
sco1_nwse[i][j]+=2;
isadded=TRUE;
}
k1++;
m++;
n++;
}
}
isadded=FALSE;
if(condition[i][j]==EMPTY) //nw-defend
{
for(m=i-1,n=j-1,k2=0;m>=i-5&&m>=0&&n>=0&&condition[m][n]==PEOPLE;m--,n--,k2++)
{

sco1_nwse[i][j]+=5;
direction1[i][j]++;
}
while(m>=0&&n>=0&&condition[m][n]==EMPTY)
{
if(isadded=FALSE)
{
sco1_nwse[i][j]+=2;
isadded=TRUE;
}
k2++;
m--;
n--;
}
}
if(k1+k2<4) sco1_nwse[i][j]=0;


isadded=FALSE;
if(condition[i][j]==EMPTY) //se-attack
{
for(m=i+1,n=j+1,k1=0;m<=i+5&&m<15&&n<15&&condition[m][n]==COMPUTER;m++,n++,k1++)
{
sco2_nwse[i][j]+=5;
direction2[i][j]++;
}
while(m<15&&n<15&&condition[m][n]==EMPTY)
{
if(isadded==FALSE)
{
sco2_nwse[i][j]+=2;
isadded=TRUE;
}
k1++;
m++;
n++;
}

}
...全文
399 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanyuanwaifdl 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
一般不看别人的代码,如果可以,你可以参考我博客里面五子棋
[/Quote]饿
a2417241867 2012-05-20
  • 打赏
  • 举报
回复
谢谢前面的几位指教,上面代码已经看懂了,我现在没时间仔细研究五子棋了,所以不再多接触了。谢谢你们指教。
DeDeWo 2012-05-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

我下载看了,前辈人机对弈的核心代码就是分为各种棋型对吧?貌似不能考虑1步以后的棋局吧?引用 2 楼 的回复:
一般不看别人的代码,如果可以,你可以参考我博客里面五子棋
[/Quote]

可以考虑的,我放在csdn资源里面的五子棋综合考虑了可以算是2+步吧,我后面又写了个递归搜索的,可以考虑很多步,但是里面的估值函数就得重新设计了,并且要模拟玩家的话效果不是很好,当然看你怎么设计了,如果你需要,可以邮箱联系我 darksword@vip.qq.com
hnu_0720 2012-05-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

人机博弈程序入门可看此书..《PC 游戏编程(人机博弈)》

博弈程序的构架基本就是:搜索算法+估值算法+走法生成算法
[/Quote]
五子棋,之前写过 极大极小收索法啊!
一般来说首先进行估值,然后按照极大极小搜索。
某大一菜鸟 2012-05-17
  • 打赏
  • 举报
回复
人机博弈程序入门可看此书..《PC 游戏编程(人机博弈)》

博弈程序的构架基本就是:搜索算法+估值算法+走法生成算法
某大一菜鸟 2012-05-17
  • 打赏
  • 举报
回复
人机程序入门可看此书..《PC 游戏编程(人机博弈)》

博弈程序的构架基本就是:搜索算法+估值算法+走法生成算法
a2417241867 2012-05-17
  • 打赏
  • 举报
回复
没人回复啊,哎
a2417241867 2012-05-17
  • 打赏
  • 举报
回复
还有几个vc++的问题想跟前辈请教,能加你qq吗?[Quote=引用 2 楼 的回复:]
一般不看别人的代码,如果可以,你可以参考我博客里面五子棋
[/Quote]
a2417241867 2012-05-17
  • 打赏
  • 举报
回复
我下载看了,前辈人机对弈的核心代码就是分为各种棋型对吧?貌似不能考虑1步以后的棋局吧?[Quote=引用 2 楼 的回复:]
一般不看别人的代码,如果可以,你可以参考我博客里面五子棋
[/Quote]
DeDeWo 2012-05-17
  • 打赏
  • 举报
回复
一般不看别人的代码,如果可以,你可以参考我博客里面五子棋
a2417241867 2012-05-17
  • 打赏
  • 举报
回复
应该不是很难吧?

33,006

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧