# 五子棋
## 一、项目简介
### 背景描述:
五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏,是世界智力运动会竞技项目之一,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成 5 子连线者获胜。
许多国家的人对五子棋都有不同的爱称,例如,韩国人把五子棋称为“情侣 棋”,暗示情人之间下五子棋有利于增加情感的交流;欧洲人称其为“绅士棋”, 代表下五子棋的君子风度胜似绅士;日本人则称其为“中老年棋”,说明五子棋 适合中老年人的生理特点和思维方式。
### 系统描述 :
本系统按照五子棋的比赛规则,添加包括了开始对弈、结束对弈、悔棋、储存棋局进度和读取棋局进度等在内的功能。除了能够进行常规对弈外,本系统还提供了开启/关闭禁手规则的设置选项,更具灵活性。
本项目旨在通过设计五子棋对弈系统,使学生更加系统地掌握 Java 语言知识,了解语言的语法结构,理解类和对象的概念,准确使用各种数据类型,对面向对象中的继承和多态的概念理解、使用,在程序中提高代码的重用性,使设计的程序结构清晰、易于维护。
## 二、任务分析
五子棋系统总体可以分为两个部分:构图(或者视图)和规则。
其中,构图包括整体布局、棋盘绘制和棋子绘制等其他小部分。规则则需要判断棋子的坐标情况,判断棋子坐标集合中是否有满足五子棋“五子连线”的胜利条件的子集合等。
![](https://www.writebug.com/myres/static/uploads/2021/10/31/efcb6d46b71a363d9c023072836b657a.writebug)
图 1 系统功能分解图
构图和规则应该是紧密结合的。构图是对外,将结果呈现给用户;而规则对内,是系统内部的判断。在程序执行时,用户的操作转换成图像,即绘图,然后程序对棋局进行分析,判断是否满足程序的规则部分,判断结果影响程序执行的路径。
在主体功能完整的基础上,我们再添加其他细节,例如背景音乐、落子声效等。同时美化程序,添加菜单和背景图片等优化用户体验。
经过分析,我们认为本系统的重点在于如何根据用户操作准确绘图以及如何根据绘图
![](https://www.writebug.com/myres/static/uploads/2021/10/31/5b63a95c5cb31eec3c7232c43ffff4be.writebug)图 2 程序执行过程简化图
结果分析对弈输赢,本次实践重点也将围绕这两部分展开。
## 三、系统设计
绘图:
Checkerboard 类:
完成了棋盘和棋子的绘制。其中棋盘直接利用公式绘制。
棋子的绘制是根据 Gframe 中的静态二维数组 *piece*[i][j],思路是将棋盘看做是一个二维坐标轴,i 和 j 组成坐标,数组中存放的值决定了是否绘制棋子,绘制黑棋子或者白棋子。
piece[i][j]:int 类型的静态二维数组。如果存放的值为 0,则没有棋子,如果存放结果为 1 则代表黑棋,如果存放结果为 2 则代表白棋。
代码实现(以黑棋为例):
```
if(Gframe.piece[i][j]==1) {
int tx=size*j+20;
int ty=size*i+20;
g.setColor(Color.black);
g.fillOval(tx-size/2, ty-size/2, size, size);
}
```
Gframe 类:
游戏开始的窗口框架,包括选项按钮、信息文本框等。
Gframe 接口了鼠标监听器 MouseListener。在鼠标点击时,记录鼠标点击的坐标,如果坐标在规定范围内,判断该位置是否有棋子,没有棋子则添加棋子,并将坐标、坐标数组标记等一系列信息添加到相关集合内,最后判断是否达成胜利条件。
关于棋手交替问题,这里利用了一个相关数据 operable。
Operable:int 类型,用来记录是是否下棋并完成黑白棋手下棋交替。点击开始按钮,operable 设置为 1,即黑棋手为先手,鼠标点击事件完成后改为 2 同时将数值传给 piece 数组,即交换为白棋手,同样完成后改为 1,依次交替。当点击结束时,设置为 0,再次点击棋盘将不再下棋。
代码实现(以黑棋获胜为例):
```
if(operable == 1) {
piece[pi][pj]=1; //记录坐标的棋子信息
list.add(new Point(pi, pj));//存入堆栈,便于悔棋
repaint();
operable++;//交替棋手
if(winOrNot(pi, pj, 1)) {//判断黑棋手是否获胜,后文会阐述具体实现
feedback.append("黑子获胜!\n");
banbox.setEnabled(true);
bgmClip.stop();
winClip.setFramePosition(0);
winClip.loop(0);
feedback.setCaretPosition(feedback.getText().length());
operable = 0;//胜利后记录为0,棋盘不可操作
}
}
```
StartFrame 类:
游戏菜单窗口框架,包括开始游戏、游戏设置、游戏信息和退出游戏。
SettingFrame 类:
设置菜单窗口框架,包括关闭音效、关闭 BGM 和开关禁手规则的选项。
规则:
Gframe 类:
WinOrNot 方法:判断是否胜利。情况分为四种情况。分别为列判断、行判断、左斜线判断、右斜线判断。判断需要利用 piece 二维数组。
这里以列判断为例,当下棋时,记录下棋(参考棋子)位置的坐标,然后根据 y 轴坐标依次访问存放上四格和下四格位置信息的 piece 数组。首先判断是否出界,如果出界则访问到边界为止。判断条件根据 piece 中存储的数据,例如,如果参考棋子为黑棋,则统计 piece 数值为 1 的个数。访问结束后,判断数值符合条件的个数,如果统计个数等于大于 6 个(因为要访问两次参考棋子,所以加上一次重复访问,同时要注意,如果开启禁手规则,这里的判断条件要改变),则证明五颗棋子相连,满足胜利条件。
其他情况同理。
代码实现(以列判断为例):
```
int count = 0;//棋子统计
//列判定
int imin=x-5,imax=x+5;
//出界情况,则访问到边界为止
if(imin<0) imin=-1;
if(imax>14) imax=15;
for(int i=x;i>imin;i--) {
if(piece[i][y]==key)count++;
else break;
}
for(int i=x;i<imax;i++) {
if(piece[i][y]==key)count++;
else break;
}
if(count>5)return true;
```
banOrNot 方法:规定了禁手规则。
关于禁手——> 禁手:对局中禁止使用而被判负的行棋手段。连珠中只有黑棋有禁手,有三三禁手、四四禁手、长连禁手、混合禁手等。这是国际连珠比赛基本规则之四。
其中长连禁手只是改变了判断黑棋个数时比较的对象(≥6 改为不得等于 5),较为简单,这里不再阐述。
这里以四四禁手为例。四四禁手规定黑方一子落下,不能同时形成两个或两个以上的四。首先我们要判断是否形成两个及以上的活四(四棋相连)。这里利用一个 int 整型数 four 来统计。在判断无出界问题的前提下,首先依次访问参考棋子的行、列、左斜线和右斜线八个方向。如果在一个方向的统计过程中四连中断则跳过该方向统计。在统计一个方向的过程中如果成功访问到第四个位置的棋子,说明没用中断即棋子四连,four+1。最后统计 four 的值,如果 four 的值超过 1,说明该棋子落下超过了一个四连,需要禁手。
代码实现(单一方向为例):
```
for(int i=1;i<5;i++) {
if(y-i<0)break;
if(piece[x][y-i]!=1)break;
if(i==4&&y-5>=0&&piece[x][y-5]==0)four++;
}
```
其次我们要判断是否形成两个及以上的冲四(四个棋子中间缺棋)。这里我们同时
用到了 int 整型数 count 和 int 整型数 four。在判断无出界问题的前提下,首先依次访问参考棋子的行、列、左斜线和右斜线总计八个方向。每次统计完一条线后如果 count 次数等于 4 则 four+1,然后 count 清零
神仙别闹
- 粉丝: 4145
- 资源: 7485
最新资源
- VmwareHardenedLoader.zip
- Labview通过FINS tcp协议与欧姆龙PLC通讯,支持CIO区,W区,D区,布尔量,整数,浮点数,字符串读写操作,软件无加密
- 英特尔2021-2024年网络连接性和IPU路线图
- Intouch2020R2SP1与西门子1500PLC通讯配置手册
- 电池组散热分析 ansys 流体 fluent
- 陀螺仪选型陀螺仪陀螺仪选型型陀螺仪选型
- 快速排序算法Python实现:详解分治法原理与高效排序步骤
- STM32F401,使用ST-link时候,不能识别,显示ST-LINK USB communication error
- Avue.js是基于现有的element-plus库进行的二次封装,简化一些繁琐的操作,核心理念为数据驱动视图,主要的组件库针对table表格和form表单场景,同时衍生出更多企业常用的组件,达到高复
- COMSOL 准 BIC控制石墨烯临界耦合光吸收 COMSOL 光学仿真,石墨烯,光吸收,费米能级可调下图是仿真文件截图,所见即所得
- Intel-633246-eASIC-PB-006-N5X-Product-Brief .pdf
- 家庭用具检测21-YOLO(v5至v11)、COCO、Paligemma、TFRecord、VOC数据集合集.rar
- 51单片机仿真摇号抽奖机源程序12864液晶显示仿真+程序
- Pear Admin 是 一 款 开 箱 即 用 的 前 端 开 发 模 板,提供便捷快速的开发方式,延续 Admin 的设计规范
- ECSHOP模板堂最新2017仿E宠物模板 整合ECTouch微分销商城
- 完结26章Java主流分布式解决方案多场景设计与实战
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈