社区
数据结构与算法
帖子详情
请教判断五子棋五子连线赢的高效率算法?
207
2003-04-21 10:11:47
15*15的棋盘网络版五子棋,求教判断赢的高效方法呢?
除了边界情况,每下一个子就判断一次,似乎就效率太低了。
请指教,谢谢!
...全文
418
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
五子
棋
---
五子
相连
判断
最近在做一个
五子
棋
游戏,发现其中的
五子
相连
判断
算法
非常的好,所以总结出来给大家。
算法
思路 我们大家都玩过
五子
棋
,棋子在4方向直线上有五个子,那么就表示玩家得胜。4方向分别是横向,纵向,斜向上和斜向...
Java
判断
五子
棋
五子
相连
#开始 最近在忙着做一个基于酷Q的QQ机器人,想到了做游戏,第一个想到的霸气点的游戏就是
五子
棋
啊 ` _>` 因为没有图形界面的原因 所有核心就是...#
判断
五子
代码 1 public static int dudgeWin(i...
基于博弈树的
五子
棋
AI
算法
及其 C++ 实现
基于博弈树的
五子
棋
AI
算法
及其 C++ 实现摘要一
五子
棋
的游戏规则二
五子
棋
对弈的
算法
描述2.1 博弈树搜索
算法
2.2 α ─ β 剪枝2.3 估价函数 摘要
五子
棋
是一个风靡全国的棋类...
基于C的α-β剪枝
算法
实现的AI
五子
棋
游戏
Minimax
算法
又名极小化极大
算法
,是一种找出失败的最大可能性中的最小值的
算法
。 Minimax
算法
常用于棋类等由两方较量的游戏和程序,这类程序由两个游戏者轮流,每次执行一个步骤。 为了执行Minimax
算法
,我们可以...
基于QT的网络
五子
棋
游戏程序的设计与实现
系统采用当今广为流行的
五子
棋
游戏为模版,利用C++的第三方GUI设计工具Qt为程序设计界面,并结合软件工程的思想开发一款基于网络的
五子
棋
游戏对弈软件。本软件采用P2P的模式,利用一个服务端来辅助各个客户端之间的...
数据结构与算法
33,010
社区成员
35,327
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章