问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求Java五子棋斜方向的判断思路

发布网友 发布时间:2023-07-09 10:54

我来回答

2个回答

热心网友 时间:2023-10-12 06:58

界面思路:
用按钮数组模拟棋盘。

改变按钮的背景图片标志这个棋盘的格子上是黑棋、白棋、空。同时使用一个二维数组记录棋盘棋子的分布,比如qipan[0][0]=1标示第1行第一列的棋子是黑棋子,乙烯类推。

循环检测是否某行、某列、某斜线上是否已经有五个颜色相同的棋子。

简单的算法就是判断某行、某列、某斜线的妻子数目那个最多。通过2个for循环遍历棋盘。

复杂的算法,你看看下面的参考资料,不过下面这段材料如果看不懂的话,用简单的算法实现了五子棋也是很好的了,^_^

五子棋算法(AI)

任何一种棋类游戏其关键是对当前棋局是否有正确的评分,评分越准确则电脑的AI越高。五子棋游戏也是如此,但在打分之前,我们先扫描
整个棋盘,把每个空位从八个方向上的棋型填入数组gStyle(2, 15, 15, 8, 2),其中第一个下标为1时表示黑棋,为2时表示白棋,第二和第三
个下标表示(x,y),第四个下标表示8个方向,最后一个下标为1时表示棋子数,为2时表示空格数,如:

gStyle(1,2,2,1,1)=3表示与坐标(2,2)在第1个方向上相邻的黑棋棋子数为3
gstyle(1,2,2,1,2)=4表示与坐标(2,2)在第1个方向上的最近的空格数为4
在定义方向时,也应该注意一定的技巧,表示两个相反的方向的数应该差4,在程序中我是这样定义的:
Const DIR_UP = 1
Const DIR_UPRIGHT = 2
Const DIR_RIGHT = 3
Const DIR_RIGHTDOWN = 4
Const DIR_DOWN = 5
Const DIR_DOWNLEFT = 6
Const DIR_LEFT = 7
Const DIR_LEFTUP = 8
这样我们前四个方向可以通过加四得到另一个方向的值。如果你还是不太明白,请看下面的图:
---------
---------
---oo----
-ox*xx---
---------
---------
图中的*点从标为(4,4),(打*的位置是空位),则:
gStyle(2,4,4,1,1)=1在(4,4)点相邻的上方白棋数为1
gStyle(2,4,4,1,2)=2在(4,4)点的上方距上方白棋最近的空格数为2
gStyle(1,4,4,3,1)=2在(4,4)点相邻的右方黑棋数为2
gStyle(1,4,4,3,2)=1在(4,4)点的右方距右方黑棋最近的空格数为3
...

一旦把所有空点的棋型值填完,我们很容易地得出黑棋水平方向上点(4,4)的价值,由一个冲1(我把有界的棋称为冲)和活2(两边无界的
棋称为活)组成的。对于而白棋在垂直方向上点(4,4)的价值是一个活1,而在/方向也是活1所以,只要我们把该点的对于黑棋和白棋的价值算出
来,然后我们就取棋盘上各个空点的这两个值的和的最大一点作为下棋的点。然而,对各种棋型应该取什么值呢?我们可以先作如下假设:
Fn 表示先手n个棋子的活棋型,如:F4表示先手活四
Fn'表示先手n个棋子的冲棋型,如:F4'表示先手冲四
Ln 表示后手n个棋子的活棋型,如:L3表示后手活三
Ln'表示后手n个棋子的冲棋型,如:L3'表示后手冲三
.
.
.
根据在一行中的棋型分析,得到如下关系:
L1'<=F1'<L2'<=F2'<=L1<F1<L2<F2<L3'<=F3'<L4'<F4'=F4
从这个关系包含了进攻和防守的关系(当然,这个关系是由我定的,你可以自己定义这些关系)。对这些关系再进一步细化,如在一个可下
棋的点,其四个方向上都有活三,也比不上一个冲四,所以我们可以又得到4*F3<L4'这个关系,同样,我们还可以得到其它的关系,如:4*F2<L3、4*L3<F3...,这些的关系由于你的定法和我的定法制可能不一样,这样计算机的AI也就不一样,最后我们把分值最小的L1'值定为1,则我们就得
到了下面各种棋型的分值,由C语言表示为:
F[2][5]=,};
L[2][5]=,};
F数组表示先手,第一个下标为0时表示冲型,第二个下标表示棋子数,则F2'对应F[0][2]L数组表示后手,第一个下标为0时表示冲型,第二
个下标表示棋子数,则L2对应F[1][2]Ok,棋型的分值关系确定好了以后,我们把每一个可下点的四个方向的棋型值相加(包括先手和后手的分
值),最后选择一个最大值,并把这一点作为计算机要下的点就OK了:)。

热心网友 时间:2023-10-12 06:59

想来你也不是想写成正式和商业的软件吧?那么穷举就行了。
建立判断的函数
对两个斜方向:
对每个可能的开始点
判断剩下4个点是否和开始点同色
如果相同,return一个表示胜利的值
如果运行到了这里,表示整个棋盘上都没有胜利条件,所以return一个表示还没有胜利的值
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
intel 英特尔 酷睿 i5-9400F CPU 2.9GHz 6核6线程-详细介绍 vivo手机越用网络越慢 怎么检测 二手苹果电脑交易注意买二手苹果笔记本电脑应注意什么 比如我买一个二手笔记本卖家笔记本预装正版win10的话把他账号注销登录我... 二手苹果笔记本怎么更改账户 军婚假期有多少天 金立e6mini开机出现el 甘肃基层卫生主要内容 甘肃基层医疗卫生系统怎么撤销处方 天津市选调生通过面试了不去会怎么样 小青每天7:45到学校,小青最晚什么时候从家里出发才能准时到达?路上等车需要5分钟 小青从家走到学校的时间由原来的10分针减少到8分钟。小青步行的速度求提高了百分之几? 小青从家走到学校的时间有原来的10分钟减少8分钟。小青步行的速度提高了百分之几? 小青从家到学校的时间由原来的20分钟减少到10分钟,小青步行的速度提高了百分之几? 小青,早上8.00到校,11时50分放学,他们在学校多少小时多少分,他们在学校多少小时多少分? 关于社会基层治理一体化调研课题有哪些? 小青每天七点三十五从家出发,走三十分钟到学校,小青到达学校口的时间是是? 小青每天7:35从家出发走30分钟到学校小青到达学校的时间是? 小青到学校用了1小时每小时走50米从家到学校有多少米 小青早上七点二十五离家八点到达学校夏天路上走了多少分 小青从家走到学校的时间由原来的10分钟减少到8分钟小青步行的速度提高了百分之几? 高三写人作文800字10篇 宠物狗做B超的费用需要多少钱? 高二写人作文800字范文5篇 高二写人作文800字五篇 直浇道注塑模具需要拉料杆嘛 注塑厂需要用到些什么模具配件 高二写人作文800字【五篇】 怎样调注塑机四根杆平行 中央财经大学在北京认可度大吗,主要是管理类(企业管理) 有关java AI编写得问题 周浦到人民广场要多久 怎么 乘车 啊求 知道 上海周浦坐什么车到人民广场 我想问一下451路从周浦到人民广场方向的首班车在周浦是几点阿? 周浦繁荣路到政立路1588号怎么走 人民广场坐几路车到周浦 深圳人力资源管理师培训哪个好 作为亲姐妹,我姐姐经常想利用我,我不鸟她。她让我妈指挥我,利用道德绑架我,再加上我妈妈心偏她? 有什么爆笑的国语喜剧电影 扮演(狄仁杰中的李元芳)张子健与张乐(饰演大侦探中的少杰)两人是什么关系 都市巅峰高手古武神技有哪几个 请问这是哪部电影?只知道1957年的 1957年拍摄的讲述拉祜族故事的电影叫什么名字? 莎瓦迪卡,莎瓦迪卡,莎娃迪卡卡卡,那歌叫什么? 山西大学2022分数线 山西大学美术生录取分数线2022 歌词最后一句:有机会捡到宝。粤语歌,好像是王菀之唱的,但是我找不到,希望哪位大神知道告诉我,谢谢 连襟是什么意思? 最新版迅雷里怎么设置MP4 格式的电影如题 谢谢了 用迅雷下载了以后怎样弄到MP4里去?