社区
数据结构与算法
帖子详情
请教判断五子棋五子连线赢的高效率算法?
207
2003-04-21 10:11:47
15*15的棋盘网络版五子棋,求教判断赢的高效方法呢?
除了边界情况,每下一个子就判断一次,似乎就效率太低了。
请指教,谢谢!
...全文
469
13
打赏
收藏
请教判断五子棋五子连线赢的高效率算法?
15*15的棋盘网络版五子棋,求教判断赢的高效方法呢? 除了边界情况,每下一个子就判断一次,似乎就效率太低了。 请指教,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cymwllbggyje
2003-04-25
打赏
举报
回复
我是这样做的,以刚刚下完的那一点为基点,逐一向4个方向寻找跟当前下的那一点同一颜色的如果超5就判断赢。
cylon
2003-04-25
打赏
举报
回复
应该怎么让电脑判断下在哪里呢?就是怎么给每个点评分比较好呢。我前几天在做这个,现在对这个算法不太清楚,做的很弱智
liuw992000
2003-04-23
打赏
举报
回复
gz
jiangchun_xn
2003-04-23
打赏
举报
回复
我大一时写过五子棋。。在
http://www.csdn.net/cnshare/soft/4/4662.shtm
不过现在想想是垃圾了
整体判断:判断只需要向四个方向a
.
.
b
从a到b判断后,从b再到a就是重复。。。
单位判断:大部分都是这种,有一个最显见的规则,棋局中出现连线5子胜只可能出现在最后一步中,这一步判断很好做。效率不会很底。。沿着有子的走,到空结束
选择方向(4个不可逆方向中一个)
沿方向走,
有子
i++;
否则
break;
沿反方向
有子
j++
否则
break;
j+i==5 则返回(true);
换方向(不要存在可逆方向,4个都判断了结束)
Riemann
2003-04-23
打赏
举报
回复
呵呵,dcyu复出了,欢迎欢迎。
BlueSky2008
2003-04-22
打赏
举报
回复
char map[22][22];
struct direction{
int x;
int y;
}d[4]={{0,1},{1,1},{1,0},{-1,1}};//四个方向
bool JudgeWin(int x,int y,char player){
int num; //记录一个方向上相同的子数
int cx,cy;
for(int i = 0; i<4; i++){
num = 1;
//求一个方向上相同的子数
cx = x + d[i].x;
cy = y + d[i].y;
while(map[cx][cy]==player){
num++;
cx += d[i].x;
cy += d[i].y;
}
//求反方向上相同的子数
cx = x - d[i].x;
cy = y - d[i].y;
while(map[cx][cy]==player){
num++;
cx -= d[i].x;
cy -= d[i].y;
}
if(num>=5)return 1;
}
return 0;
}
BlueSky2008
2003-04-22
打赏
举报
回复
正应该“每下一个子就判断一次”。应为赢棋只会发生在刚下的子处。只要做局部的判断就行了。
dcyu
2003-04-22
打赏
举报
回复
只在当前下子点的八个方向判断就行了,速度不会很慢的,大概就几十次运算。
偶把大一时写的五子棋的部分代码帖出来,咳,老古董了。
void JudgeWin()
{
int i;
for(i=0;i<4;i++)
{
JudgeWinLine(i,5);
if(win) break;
}
}
void JudgeWinLine(direction,num)
int direction,num;
{
int k;
int count=1;
int posx,posy;
switch(direction)
{
case 0:
posx=1;posy=0;
break;
case 1:
posx=0;posy=1;
break;
case 2:
posx=1;posy=1;
break;
case 3:
posx=1;posy=-1;
break;
}
for(k=1;k<=4;k++)
{
if(x+k*posx<0&&x+k*posx>=15&&y+k*posy<0&&y+k*posy>=15)
break;
if(chess[x+k*posx][y+k*posy]==chess[x][y])
count++;
else break;
}
for(k=-1;k>=-4;k--)
{
if(x+k*posx<0&&x+k*posx>=15&&y+k*posy<0&&y+k*posy>=15)
break;
if(chess[x+k*posx][y+k*posy]==chess[x][y])
count++;
else break;
}
if(count==5) win=TRUE;
}
zhaoao
2003-04-22
打赏
举报
回复
gz
ZhangYv
2003-04-21
打赏
举报
回复
还有这个帖子可以看看。
http://expert.csdn.net/Expert/topic/1510/1510841.xml?temp=.4815027
重庆大学出版的《PC游戏编程-人机博弈》不错,有兴趣可以买本看看。
zzwu
2003-04-21
打赏
举报
回复
[注]"每下一个子就判断一次"的否定命题就是"有些步不去判断".
zzwu
2003-04-21
打赏
举报
回复
"每下一个子就判断一次,似乎就效率太低了。"
某一步不判能行吗?
ZhangYv
2003-04-21
打赏
举报
回复
应该在估值核心那块来做这个问题吧。五子棋我没做过不清楚,你可以参考其他人这部分的做法。
http://www.easthot.net/topic.asp?TOPIC_ID=12&FORUM_ID=3&CAT_ID=2&Topic_Title=%CE%D2%BA%DC%BE%C3%D2%D4%C7%B0%D0%B4%B5%C4%CE%E5%D7%D3%C6%E5%B5%C4%D4%B4%B4%FA%C2%EB%2CVisual+C%2B%2B6%2E0%B5%C4%2E&Forum_Title=VC%2B%2B%2CVC%2Enet+%BF%AA%B7%A2%C2%DB%CC%B3
模拟连
五子
棋
游戏,
五子
棋
经典
算法
总结,模拟
五子
棋
游戏的开发涵盖了数据结构(如二维数组)、基础
算法
(如合法落子
判断
、Minimax和Alpha-Beta剪枝)、高级
算法
(如神经网络强化学习)以及用户界面设计等多个方面。通过这样的项目实践,开发者不仅能...
五子
棋
算法
五子
棋
算法
是一种在计算机科学领域中用于模拟和分析
五子
棋
游戏的策略和决策的
算法
。
五子
棋
,又称为连珠、盘上棋,是一种简单却具有深度的双人对弈游戏,目标是在棋盘上先形成五个连续的棋子(水平、垂直或对角线)来...
C# alpha-beta 剪枝
五子
棋
AI
算法
在
五子
棋
中,AI作为“最大化”方,会尝试寻找可以形成
五子
连线
的步子,而对手作为“最小化”方,会试图阻止AI的这种可能性。 然后,引入Alpha-Beta剪枝。在Minimax的基础上,我们为每层搜索添加两个值,Alpha代表...
j2me
五子
棋
搜索
算法
五子
棋
是一种两人对战的策略游戏,目标是先连成
五子
直线(横、竖或斜)的一方获胜。在这个背景下,我们将讨论如何设计和实现一个能在J2ME平台上运行的
五子
棋
人工智能。 首先,我们要理解J2ME(Java 2 Micro Edition...
一个基于labview的
五子
棋
算法
5. **游戏结束
判断
**:检测是否有
五子
连珠,若出现则宣告游戏结束。 【标签】"Labview GoBang"明确指出了该项目使用的工具和主题,Labview是编程环境,GoBang则是
五子
棋
的英文名称。 压缩包中的文件"FIR"可能是...
数据结构与算法
33,029
社区成员
35,337
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章