Java—面对对象课程设计(五子棋)
一、项目简介
- 功能描述:所做项目为五子棋对战,其中包括人机对战以及联机对战。功能有悔棋以及重开。借鉴自"人机五子棋"并增加了不少功能。
- 参考git地址:https://gitee.com/kaguya0/chess-game
- 本人负责任务:人机AI,重开功能,游戏界面优化,游戏音效,标记棋子
二、功能架构图
三、个人任务简介
1.完成的任务与功能
序号 | 完成功能和任务 | 描述 |
---|---|---|
1 | 添加音效 | 启动程序播放BGM,落子带有音效。 |
2 | 人机AI | 人机通过五元组评分算法寻找最优落子点 |
3 | 重开功能 | 初始化双方棋盘以及棋子 |
4 | 标记棋子功能 | 落子后,在棋子中心做上红点标记。 |
5 | 界面优化 | 增加棋盘背景,修改棋子样式。修改鼠标光标样式。 |
2.git提交记录截图:
四、本人负责功能详解
1.游戏添加音效
- Java能播放的音乐的格式wav格式音乐。对于播放mp3音乐,我不信邪的尝试了一天,结果也只能妥协,最终也是找到一个工具成功的将mp3转化为wav,这自然就能调用网络上大部分代码来播放音乐了。
- 音乐播放参考代码:
2.人机AI
- 人机判断落子的算法最常见的即为五元组评分表算法。对于一个15*15的棋盘,其对应有572个五元组,每个位置的得分通过其八方各五元组的评分相加,最终AI选取得分最高且没落子的位置。评分表参考如下:(其中“×”代表任意数。)
玩家落子个数 | AI落子个数 | 评分 |
---|
0|>0|0
0|0|7
×|1|35
×|2|500
×|3|15000
×|4|800000
1|×|15
2|×|400
3|×|1800
4|×|100000
- 得分计算:计算某位置的得分时,以该点为中心,向周围8个方向包括自己各取8个五元组,根据五元组内落子个数情况,每个五元组通过上方的评分表按顺序匹配评分,将8个五元组得分相加即为该点的评分。(参考博客:https://www.cnblogs.com/chaiwenjun000/p/5321115.html)
3.重开功能
- 游戏进行过程中,请求重开,只有对方玩家同意后,才会初始化双方的棋盘,完成重开。
4.标记棋子功能
- 用于警示玩家落子的位置,当落子后,获取落子的坐标,并在该坐标画红点,达到标记的效果。
5.游戏界面优化
- 这部分主要是为了让游戏更有五子棋的味道,而不是仅仅是由点线构成的游戏。
- 棋盘、棋子以及鼠标光标