社区
语言基础/算法/系统设计
帖子详情
中国象棋如何判断将死
喝口水
2009-11-08 12:15:05
现来无事,做了个中国象棋游戏,大部分工作已经完成,现在到了如何判断把对方将死这一步了,没有头绪,欢迎给点指导
...全文
1192
35
打赏
收藏
中国象棋如何判断将死
现来无事,做了个中国象棋游戏,大部分工作已经完成,现在到了如何判断把对方将死这一步了,没有头绪,欢迎给点指导
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
35 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
喝口水
2009-11-13
打赏
举报
回复
谢谢诸位,将死的算法搞定了,结贴
zjh3269
2009-11-12
打赏
举报
回复
牛人, mark
delphizoom
2009-11-11
打赏
举报
回复
将死的情况:
A,对方将军,你的帅不能动(动了以后也受将军),且你不能吃也不能挡对方的子。
注意:需要加上,走子时造成对自己将军的情况则不允许。
xiaoxiao_8
2009-11-11
打赏
举报
回复
如果要考虑人机对战,就要考虑每个子是否被攻击、是否能被对方吃掉,将只是其中的一个而已,
当这个子是将,就是被将。是车,就是捉车……
dqlihb
2009-11-11
打赏
举报
回复
或者部分执行
dqlihb
2009-11-11
打赏
举报
回复
[Quote=引用 15 楼 hys_427 的回复:]
这个我初步的想法是这样的:
1.当对方将时判断是否将死
2.判断将死的标准,首先是看是否有子能把将的棋子吃掉,如果能吃掉,则说明将不死了,否则往下判断
3.如果不能吃掉,则判断是否能够挡住将,即在将子和老将之间填一个子,当然这要判断马的情况,因为马是走日字的
4.如果不能挡或者挡住了,还有其它子将,则说明老将必须走了
5.判断老将要走的位置上是否有其它子在等着吃,如果有则不能走
6.如果所有路口都不能走了,说明被将死了
不知我的说法有啥不足的地方,欢迎补充
[/Quote]
如果有移动棋子的情况,上面的6条需要在移动子后,再执行1次才可以的
hemiya
2009-11-09
打赏
举报
回复
本人超级佩服做棋牌类游戏并有人机对战功能的游戏软件,特别是棋类需要考虑的太复杂了.
个人思路:
1,判断老将上下左右移动一步(己方不能移动,敌方能移动),是不是能躲开本次"将".
2,如果能躲开移动到下一步时是不是还被"将",是不是能躲开本次"将".光杆司令或者己方其它棋子不能移动直接死棋.
3,如果还被"将",就要考虑能不能垫子(别马脚也算),或者吃掉对方,能躲开本次"将".
4,死棋!
循环将:
我记得国家象棋比赛是由这方面的规则的,循环将一定步数算输,应该能搜索到.
huoxin8226
2009-11-09
打赏
举报
回复
我觉得直接判断下一步比较方便,把将在对方供给范围内的结果设置一个很大的或者很小的值。
然后进行遍历,如果发现无论下一步怎么走,结果都是大值,那么必然被将死。
iceagebirdxq
2009-11-09
打赏
举报
回复
学习
yct0605
2009-11-09
打赏
举报
回复
学习了
wxsan
2009-11-09
打赏
举报
回复
有意思
喝口水
2009-11-09
打赏
举报
回复
[Quote=引用 17 楼 huoxin8226 的回复:]
我觉得直接判断下一步比较方便,把将在对方供给范围内的结果设置一个很大的或者很小的值。
然后进行遍历,如果发现无论下一步怎么走,结果都是大值,那么必然被将死。
[/Quote]
啥意思?说清楚点
喝口水
2009-11-09
打赏
举报
回复
[Quote=引用 24 楼 mwy654321 的回复:]
引用 15 楼 hys_427 的回复:
这个我初步的想法是这样的:
1.当对方将时判断是否将死
2.判断将死的标准,首先是看是否有子能把将的棋子吃掉,如果能吃掉,则说明将不死了,否则往下判断
3.如果不能吃掉,则判断是否能够挡住将,即在将子和老将之间填一个子,当然这要判断马的情况,因为马是走日字的
4.如果不能挡或者挡住了,还有其它子将,则说明老将必须走了
5.判断老将要走的位置上是否有其它子在等着吃,如果有则不能走
6.如果所有路口都不能走了,说明被将死了
不知我的说法有啥不足的地方,欢迎补充
你的第一步就搞错了!
你说在“当对方将时判断是否将死”,这是不妥的。不能在对方将时才判断。比如:我主动把“帅”送给对方吃,你岂不是判断不出来?而主动送“帅”给对方的走法也是不允许的!
另外,其实你的问题很简单,没有必要那么复杂。你用的啥控件?没想到还有控件!学习下哈!
[/Quote]
我是做了"不能送将"判断的,所以不会出现主动把"帅"送给对方吃的情况
我的初步想法是,只要不能迎将,即为将死
ok1411
2009-11-09
打赏
举报
回复
仅仅判断是否已经将死了应该还是简单的;
1、当前是否有 棋子 能吃到 将;
2、遍历所有可动的棋子,遍历每个棋子能走的步子,看走出后是否可以取消当前的被将状态。
如果任何棋子走后都不能解除被将状态,就是将死了
benke520
2009-11-09
打赏
举报
回复
学习
winstonbonaparte
2009-11-09
打赏
举报
回复
强,虽然会下象棋,不过从来没有考虑过用代码实现
无条件为你
2009-11-09
打赏
举报
回复
我要向楼主 挑战 象棋,我自认为水平不是一般!不知道楼主有没有兴趣!楼主是哪里的朋友?
无条件为你
2009-11-09
打赏
举报
回复
[Quote=引用 15 楼 hys_427 的回复:]
这个我初步的想法是这样的:
1.当对方将时判断是否将死
2.判断将死的标准,首先是看是否有子能把将的棋子吃掉,如果能吃掉,则说明将不死了,否则往下判断
3.如果不能吃掉,则判断是否能够挡住将,即在将子和老将之间填一个子,当然这要判断马的情况,因为马是走日字的
4.如果不能挡或者挡住了,还有其它子将,则说明老将必须走了
5.判断老将要走的位置上是否有其它子在等着吃,如果有则不能走
6.如果所有路口都不能走了,说明被将死了
不知我的说法有啥不足的地方,欢迎补充
[/Quote]
你的第一步就搞错了!
你说在“当对方将时判断是否将死”,这是不妥的。不能在对方将时才判断。比如:我主动把“帅”送给对方吃,你岂不是判断不出来?而主动送“帅”给对方的走法也是不允许的!
另外,其实你的问题很简单,没有必要那么复杂。你用的啥控件?没想到还有控件!学习下哈!
mjp1234airen4385
2009-11-09
打赏
举报
回复
象棋水平贼臭。
不会。
zeroieme
2009-11-08
打赏
举报
回复
首先被将了,广度一层搜索所有走法,不能应将的,GAME OVER
加载更多回复(15)
中国象棋
(局域网对战)
基于opengl的
中国象棋
游戏,局域网2人对战的。对等结构。
Java
中国象棋
小弟写的Java版
中国象棋
,不足之处还请多多赐教!
中国象棋
算法详解(独家收藏)
中国象棋
算法独家收藏,人机对战,通过各种渠道很难总结出来的。。。希望对大家有所帮助。
android
中国象棋
源码
android
中国象棋
游戏源码,游戏代码图片资源齐全,仅供学习使用~
python简单实现-
中国象棋
用pygame简单实现的一个
中国象棋
代码
语言基础/算法/系统设计
16,748
社区成员
33,247
社区内容
发帖
与我相关
我的任务
语言基础/算法/系统设计
Delphi 语言基础/算法/系统设计
复制链接
扫一扫
分享
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章