一、棋盘的绘制

使用JFrame容器制作五子棋的窗体

创建一个类——UI,如下:

public 

使用JPanel和Graphics画出大小为15X15的棋盘

再创建一个新的类——Chessboard,继承JPanel:

public 

实现点击鼠标落子的功能

在UI类中添加以下代码:

public 

再在Chessboard类中添加drawPieces、move、getCellSize方法,如下:

public 

然后创建一个新的类——Pieces,如下:

/***


二、判断胜负

实现五子棋胜负判断的思路是:

  1. 判断胜负就看哪个颜色的棋子首先达到五子相连。若黑棋先达到五子相连,则黑棋胜,否则,白棋胜;
  2. 也就是下在每个棋子时都要判断它的八个方向的棋子相连个数,如果判断某一方向与其相邻点的颜色相同,将循环计数;
  3. 还需要注意边界点的范围,在循环的时候应注意设置边界条件;
  4. 可以建一个类,在类中写判断输赢的方法;

在Chessboard类中添加如下代码:

public 

但是,落子的位置是有限制的,具体来说就是:

  1. 落子的位置不能有其它棋子;
  2. 不能超过棋盘的边界;

所以要在UI类中的play()方法里添加一个落子合法性的判定:

private 

而对应Chessboard类中新增的isLegal方法setLocation方法以及checkWinner方法就是:

/**


三、简易的AI算法

思路:

五元组:棋盘中横竖斜四个方向的所有相邻五个可连成一条线的格子 五元组的表示:用某格子的横纵坐标以及+1/-1来表示相邻四个格子的坐标,从而计算五元组坐标

  • 五子棋棋盘大小是15X15,横竖斜四个方向共有572个五元组,给每个五元组一个评分
  • 这个五元组将为它的每个位置贡献的分数就是这个五元组自身的得分
  • 对整个棋盘来说,每个位置的得分就是该位置所在的横竖斜四个方向所有五元组的得分之和
  • 然后从所有空位置中选得分最高的位置即为机器落子的位置

首先,添加机器落子的代码,完善UI类中play方法:

private 

其次,还需要一个评估函数(评分表),来对整个棋局中有效位置进行评价,但评分表很难确定,没有所谓最好的,只能根据经验和测试来选择,我选择的评分表如下:

  • 既有人类落子,又有机器落子,判分为0;
  • 全部为空,没有落子,判分为7;
  • 机器落1子,判分为35
  • 机器落2子,判分为800
  • 机器落3子,判分为15000
  • 机器落4子,评分为800000
  • 人类落1子,评分为15
  • 人类落2子,评分为400
  • 人类落3子,评分为1800
  • 人类落4子,评分为100000

然后,在Chessboard类中添加tupleScore方法

private 

最后,在Chessboard类中添加searchLocation方法

/**


效果图:

(完)

java五子棋_Java初级项目——从零开始制作一个简易五子棋游戏相关推荐

  1. 五子棋java判断平局_2020-10-03 Java初级项目——从零开始制作一个简易五子棋游戏...

    一.棋盘的绘制 使用JFrame容器制作五子棋的窗体 创建一个类--UI,如下: public class UI { private JFrame frame = new JFrame(); publ ...

  2. 【Unity好插件之PlayMaker系列一上半部分】如何只用一个插件和一个脚本完成制作一个简易的游戏

    学习目标: 对于PlayMaker,笔者在很早期学习中就有意识到这个插件被大伙一整乱吹,当时我觉得做个游戏肯定需要海量的脚本这PlayMaker一看就不可靠,但最近得知我贼喜欢的游戏<空洞骑士& ...

  3. 从零开始实现一个简易的Java MVC框架(九)--优化MVC代码

    前言 在从零开始实现一个简易的Java MVC框架(七)--实现MVC中实现了doodle框架的MVC的功能,不过最后指出代码的逻辑不是很好,在这一章节就将这一部分代码进行优化. 优化的目标是1.去除 ...

  4. 从零开始实现一个简易的Java MVC框架(六)--加强AOP功能

    前言 在前面从零开始实现一个简易的Java MVC框架(四)--实现AOP和从零开始实现一个简易的Java MVC框架(五)--引入aspectj实现AOP切点这两节文章中已经实现了AOP功能并且引用 ...

  5. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

  6. 【源码+教程】Java桌球游戏_Java初级项目_Java练手项目_Java项目实战_Java游戏开发

    今天分享的Java开源游戏项目是桌球游戏,初学者也可以用来练习喔~课程详细讲解了一个桌球游戏的编写思路和流程,即使你刚学Java没多久,也可以跟随该教程视频完成属于你自己的桌球游戏!同时,还可以加深和 ...

  7. 【源码+图片素材】Java开发经典游戏飞翔的小鸟_Java游戏项目Flappy Bird像素鸟游戏_Java小游戏_Java初级项目_Java课程设计项目

    开发环境: jdk1.8 开发工具: IDEA JavaEE基础: 变量.数据类型.判断语句.循环结构.数组.集合.简单窗口创建.图形图片绘制.双缓存技术.事件-键盘事件.物体的碰撞检测.File [ ...

  8. 使用Java制作一个简易的远控终端

    使用Java制作一个简易的远控终端 远控终端的本质 1.服务端(攻击者)传输消息 ----> socket连接 ----> 客户端(被攻击者)接收消息 2.客户端执行消息内容(即执行服务端 ...

  9. 用java的robot类以及Gui 制作一个游戏(阴阳师)脚本

    ** 用java的robot类以及Gui 制作一个游戏(阴阳师)脚本 **   由于阴阳师这个游戏肝度太大,就决定写一个脚本来模拟玩家的重复性操作.所以我就决定用java中的robot类中的一些方法来 ...

最新文章

  1. 2022-2028年中国高等职业教育产业投资分析及前景预测报告
  2. 矢量图面层和线层相交得到相交后的线层文件(gis相交)
  3. yii2model 基本模型类
  4. Java: 数据类型
  5. powershell共享服务器写文件,Windows PowerShell:共享您的脚本 - 轻松实现
  6. 汇编原理实验 --查找子字符串的位置
  7. IBM X系列服务器IMM日志采集
  8. 地址总线与内存大小的关系(待续…)
  9. Python的win32serviceutil之疑似BUG
  10. windows下 , py运用了 进程池, 将py打包成exe,出现错误的 解决思路之一
  11. python从excel中读取数据
  12. 实现前后端数据交互方法汇总
  13. iphone储存空间系统怎么清理_iPhone 储存空间里的“系统”项占用过多怎么办?...
  14. Scp远程批量执行命令
  15. web前端效率提升之禁用缓存-遁地龙卷风
  16. Latex笔记:IEEE Access模板 图片排版问题汇总
  17. Intel NUC的win10系统安装教程
  18. 电脑重装系统详细教程(以安装win10为例)
  19. read和write阻塞和非阻塞方面的理解
  20. 智媒链全球社区见面会 中国·北京(首场)

热门文章

  1. 如何在JavaScript中使用apply(?),call(?)和bind(➰)方法
  2. 全球最大的市场在_我如何扩展全球最大的音乐工作室市场
  3. 创建react应用程序_如何使您的React应用程序具有完整的功能,完全的React性并能够处理所有这些疯狂的事情……...
  4. springMVC操作mongoDB增删改查
  5. Oracle优化之SQL
  6. 最全总结!聊聊 Python 发送邮件的几种方式
  7. Python编程 | 新手必会的 9 个 Python 技巧
  8. HTML/CSS常用标签属性及样式
  9. Python高级——用多线程实现UDP聊天器
  10. JavaScript进阶部分笔记