一、功能介绍:
可以根据自己的需要选择游戏模式,是人人对战(没有实现网络版)还是人机对战,并且在需要的时候可以自行转换,可以撤销以前下过了棋。以及清空棋盘。
五子棋的效果图
黑棋获胜后效果图如下
二、主要技术分析
五子棋的设计时所用到的知识点其实与前面的画图板基本上是一样的,但是在算法上却要比画图板的要求高很多,以下我想就悔棋、重绘以及人机算法这一块做点分析。
(1)悔棋步骤主要采用的是int型队列来保存每个棋子所在位置的横纵坐标。
(2)在整个五子棋的设计当中,重绘在我的映像中十分的深刻,棋盘需要重绘,棋子需要重绘,背景图片需要重绘、每次悔棋之后整个界面需要重绘,连人机算法中都有重绘的问题(不知道是什么原因,但是当机器落子的时候必须重绘一次棋盘,否则会出现错误),因此,我们可以看出重绘的重要性了。
下面就是那段代码,请大家注意第三行,我为它哭泣了一个下午
graf.drawImage(WhiteChessImg.getImage(),x2-4,y2-6,null);
//白棋落子后,重绘一次窗体
cf.repaint();
//将标记数组的位置赋值
chessArr[pot[0]][pot[1]] = Config.CHESS_WHITE;
(3)人机对战的算法是另一个让我十分头疼的问题,主要找不到合适的突破口,不过最后我将判断输赢的算法做了一点修改,就用到人机对战上来了,程度虽然比较浅,但是还是能完成一些基本的堵棋功能。这个算法并不是采用全盘遍历的思想,而是以每个人下的棋子为原点来进行几个方向的搜索。其优点在于算法所花费的时间较少,但是正是因为如此,它比较难完成一些有深度的判断。
以横排检查为例来说明人机算法
/**
* 检查横排的情况
* @param num 当连得棋子数大于num时,机器人进行堵截
* @param x 传入当前人下的棋子的横坐标
* @param y 传入当前人下的棋子的纵坐标
* @return 返回机器人下子的位置值
*/
public int[] checkRow(int num , int x , int y){
//初始一个数组,值保存的是负数
int[] pot = {-1,-1};
//设置一个计数器
int count = 0;
int countLeft = 0;
int countRight = 0;
//往右边判断
for(int i = x+1 ; i <chessArr.length ; ++i){
if(chessArr[i][y] == chessArr[x][y])
countRight++;
else
break;
}
//往左边判断
for(int i = x ; i >= 0 ; i--){
if(chessArr[i][y] == chessArr[x][y])
countLeft++;
else
break;
}
//总的连子数等于左边与右边相加的和
count = countLeft+countRight;
//当总的连子数等于设定的数,那么找到要堵的位置
if(count == num){
if((x+countRight+1)<chessArr.length&&chessArr[x+countRight+1][y]==0){
//将一排黑棋右边的空位置返回
pot[0] = x+countRight+1;
pot[1] = y;
return pot;
}
else if((x-countLeft)>=0&&chessArr[x-countLeft][y]==0){
//将这牌黑棋左边的空位置返回
pot[0] = x-countLeft;
pot[1] = y;
return pot;
}
}else{
//如果这牌黑棋在横向被堵住了,那么返回初始值;
pot[0] = -1;
pot[1] = -1;
return pot;
}
return pot;
}
三、总结与希望
这个五子棋在很多地方还存在着问题:首先是人机对战上玩家只能选择黑子并且机器只具备堵棋的功能,其次,由于人机算法是自己设计的,很不成熟,在一些地方会存在小的漏洞。并且由于在网络方面没有修行,因此无法完成网络上的人人对弈。由于五子棋涉及到java中的许多基本知识点、简单的数据结构以及算法问题,那么我还会对这个小项目进行修改,以逐步完善它,并且希望在这个过程中巩固自己的基础知识,加强自己的算法设计能力以及用来学习以后的网络知识(当然,还有PS的能力,好多这上头的问题还是请同学帮解决的)。
五子棋的设计具有一定的挑战性,在设计中,遇到了很多需要解决的问题,比如说窗体的BorderLayout布局方式,组件字体的设置,背景颜色与前景颜色的区别,这些虽然没有讲到过,但是应该学会通过自己的能力去解决。还有就是必须加强算法的能力。总得来说我认识到,要学会将学过的东西作为工具去学习还不知道的知识,这样才能进步。同时也希望各位朋友能够多多指教,大家便可以共同学习,共同进步嘛,代码发在附件里面,有兴趣的朋友可以看一下,然后提些建议,方便以后改进。
- 大小: 99.1 KB
- 大小: 94.3 KB
分享到:
相关推荐
在IT行业中,尤其是在材料科学和工程计算领域,三维Hashin失效准则和Chang-Chang退化准则具有重要的应用。这两个理论是评估材料结构在多向加载条件下的稳定性及预测其失效模式的关键工具。 首先,三维Hashin失效...
据三维Hashin失效准则和Chang-Chang退化准则According to the three-dimensional Hashin failure criterion and the Chang-Chang degradation criterion
《Chemistry 10th Edition Raymond Chang》是由Raymond Chang编写的化学教材,已经出版到第10版,被广泛认为是化学学科的一本重要著作。Raymond Chang博士是该书的作者,他出生于香港,并在香港和上海长大。他先后在...
用于深度学习和神经网络训练的五连子(五子棋)棋局数据。 共1000个数据文件,每个数据文件对应着一局对弈。 每个数据文件按行记录着从第一步落子到最后一步落子的信息,第一行是第一步落子,第二行是第二步落子,...
com.wlanplus.chang.apk
根据提供的文件信息,我们得知文章《Chang et al., 2021.pdf》的主要研究内容集中在中国南天山地区晚中新世(10.0~6.0百万年)的快速隆升以及这一现象对塔里木盆地干旱化时间的影响。此外,文章讨论了天山地区在...
电脑卡拉OK系统是一种将音乐与歌词同步显示在电脑屏幕上的娱乐方式,让人们可以在家中享受类似于KTV的体验。本文将详细介绍电脑卡拉OK系统的组成、工作原理以及如何搭建和使用。 一、电脑卡拉OK系统的组成部分 ...
welearn shi chang
《ABAQUS UMAT应用:Duncan-Chang模型解析》 在有限元分析软件ABAQUS中,用户...通过深入理解并正确应用这个模型,我们可以更准确地预测和分析土壤和岩石在工程实践中的行为,从而提高结构设计的安全性和可靠性。
《华中科技大学计算机组成原理头歌实验教学平台存储系统设计》是针对计算机硬件核心部分——存储系统的深入学习和实践项目。这个实验平台涵盖了从基础的汉字库存储芯片扩展到复杂的2路组相联缓存(Cache)设计,旨在...
标题 "duncan-1_Duncan-Changumat_duncan-chang_" 暗示我们关注的是一个与Duncan-Chang材料模型相关的项目。这个模型通常在有限元分析软件Abaqus中使用,特别是通过用户自定义材料子程序(UMAT)来实现。Duncan-Chang...
在游戏设计中,神经网络用于预测每一步棋的最佳落子位置,通过分析棋盘当前的状态,计算出每个可能的下一步对局势的影响,从而选择最佳的一步。这个过程涉及到大量的矩阵运算和反向传播算法,以不断优化模型的参数,...
北京大学张恭庆院士所著的《Chang Kung-Ching Methods in Nonlinear Analysis》是Springer出版社的一本关于非线性分析方法的专业书籍。该书属于Springer Monographs in Mathematics系列,反映了在非线性问题研究中...
【邓肯-张模型】是1970年由Duncan和Chang提出的非线性次弹性模型,属于变模量模型。该模型假设应力-应变关系为双曲线形状,因此也被称为双曲线模型。在该模型中,切线杨氏模量tE和泊松比tv不是常数,而是随应力水平...
java入门猜数字,开始时输入随机数字,系统自动判定大小,输入过大过小,都有明确提示,快来和我一起开发吧
从提供的文件信息中,无法直接提取出具体的技术知识点,因为文件标题“chang SDV name.pdf”没有明确指向特定的技术领域,且文件描述中的“change”也不够具体,未能提供相关背景或内容说明。而标签“aba”同样不...
在这个过程中,“chang”算法,也即经典的Zhang算法,扮演了关键角色。MagLab是一种实现此算法的开源平台,它提供了方便的工具和接口,帮助研究人员和开发者进行相机参数的标定。 Zhang算法,由张正友教授提出,是...