第一步:写一个接口(GoBangDataConfig)

对于棋盘来说,棋盘的起始点,棋子以及网格的大小,有几行有几列,这些都是固定的,那么接下来我们在写界面类的时候就可以让类去继承这个接口。

public interface GoBangDataConfig {//五子棋基本属性//棋盘/***  棋盘起始点坐标*/static final int X = 50;static final int Y = 50;/*** 棋子以及网格大小*/static final int SIZE = 50;/*** 行列值*/static final int C = 10;static final int R = 10;
}

第二步:画棋盘UI

a、简单写一个界面,继承JFrame,去使用它的一些组件(标题,尺寸大小,关闭进程,可视化)

b、重写JFrame的paint(Graphics g)方法,在其中画出棋盘。

import java.awt.Graphics;import javax.swing.JFrame;public class GoBangUI extends JFrame implements GoBangDataConfig {public static void main(String[] args) {GoBangUI gui = new GoBangUI();gui.initGobangUI();}public void initGobangUI() {setTitle("AI Gobang");setSize(900,700);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setVisible(true);//鼠标下棋监听器GoBangListeners gl = new GoBangListeners();addMouseListener(gl);//获取Graphics gGraphics g = getGraphics();//传入监听器中gl.g = g;}//重写paint方法  刷新界面的时候  出来棋盘//自动调用public void paint(Graphics g) {super.paint(g);for (int i = 0;i<=C;i++) {g.drawLine(X, Y+i*SIZE, C*SIZE+X, Y+i*SIZE);g.drawLine(X+i*SIZE, Y, X+i*SIZE, R*SIZE+Y);}}
}

ps.如果不在paint里面把棋盘画好的话,那么运行的开始你是看不到棋盘的,再就是如果你窗口最小化再打开的话,棋盘是会不见的,所以就决定了在paint方法里面画出这个棋盘,并且里面还有一部分就是画棋子。

第三步:实现鼠标监听器,当按下鼠标时,画一个棋子,确定其位置,并且实现3D棋子的效果。

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;public class GoBangListeners implements MouseListener,GoBangDataConfig{Graphics g;int flag = 0;public void mouseClicked(MouseEvent e) {}/*** Invoked when a mouse button has been pressed on a component.*/public void mousePressed(MouseEvent e) {int x = e.getX();int y = e.getY();//限定下棋的范围if(x>(SIZE*C+X)||y>(SIZE*R+Y)) {return;}//计算坐标值   行列值 int chessC = (x-X+SIZE/2)/SIZE;//间距一致--int 整数 取出浮点数部分int chessR = (y-Y+SIZE/2)/SIZE;//轮流下棋 坐标值int chessX = chessC*SIZE+X;int chessY = chessR*SIZE+Y;if(flag == 0) {draw3DChess(chessX-SIZE/2, chessY-SIZE/2, SIZE, "黑棋");flag++;}else if(flag == 1) {draw3DChess(chessX-SIZE/2, chessY-SIZE/2, SIZE, "白棋");flag = 0;}/*** 3D棋子*/}/*** Invoked when a mouse button has been released on a component.*/public void mouseReleased(MouseEvent e) {}/*** Invoked when the mouse enters a component.*/public void mouseEntered(MouseEvent e) {}/*** Invoked when the mouse exits a component.*/public void mouseExited(MouseEvent e) {}

我们要实现棋子下在直线与直线的焦点上,而不是随意的任何地方,所以首先我们要计算行列值,就是你点击的坐标最靠近几行几列,我们从棋盘的起始点开始算

我们先来计算列值,就要用到x坐标,起始点的x坐标为50,当我们去点击x坐标为165时它的列值就要是2,点击x坐标为185时它的列值就要是3,只需要加上格子的一半再除以格子的SIZE就好了

int chessC = (x-X+SIZE/2)/SIZE,行值以此类推。

有了行列值,再去计算坐标值。

接下来,我们完成3D棋子的方法:draw3DChess

五子棋的3D只是多个棋子叠加起来,由大而变小

public void draw3DChess(int x,int y,int SIZE,String chessType) {for(int i = 0;i<SIZE;i++) {if(chessType.equals("黑棋")) {Color color = new Color(i*5,i*5,i*5);g.setColor(color);}else if(chessType.equals("白棋")) {Color color = new Color(155+i*2,155+i*2,155+i*2);g.setColor(color);        }g.fillOval(x+i/2, y+i/2, SIZE-i, SIZE-i);}}

这里用到RGB三原色,三原色的数值范围0-255,黑色:(0,0,0)白色(255,255,255)

红色(255,0,0)绿色(0,255,0)蓝色(0,0,255)

所以要画黑棋,数值就越小,且3色数值要相等,白色也是同理。

好了,后续我们会完成棋子的保存,还有悔棋重绘棋子以及判断输赢,或者更多的扩展功能。

Java制作五子棋 V1.0相关推荐

  1. 程序安装包制作工具 v1.0官方版

    2019独角兽企业重金招聘Python工程师标准>>> 名称:程序安装包制作工具 v1.0官方版 版本:1.0更新日期:2016-06-27 大小:2.9MB软件语言:简体中文 软件 ...

  2. 我的世界1 11java,Editing Java版Alpha v1.0.11

    Anti-spam check. Do not fill this in!{{version nav |title=Alpha v1.0.11 |edition=java |image=Alpha v ...

  3. Java自动化测试系列[v1.0.0][TestNG测试开发环境配置]

    基于之前写的一篇文章Java自动化测试系列[v1.0.0][Maven开发环境]的基础上,阐述如何配置单元测试框架TestNG的测试开发环境 创建Maven项目 启动IDEA,点击Create New ...

  4. Java编码规范V1.0

     Java编码规范V1.0 1 代码总体原则 1. 清晰第一 清晰性是易于维护.易于重构的程序必需具备的特征.代码首先 是给人读的,其次才给机器用来执行. 目前软件维护期成本占整个生命周期成本的 40 ...

  5. java 开源sns_JEESNS V1.0发布,JAVA 开源 SNS 社交系统

    JEESNS V1.0 发布了,本次更新内容: 增加后台管理员授权与取消功能 增加私信模块 解决在微博页面,左侧微博点赞过后,左侧展示列表小手会变黑,但是右侧热门出小手依然是白色 修复后台添加栏目.文 ...

  6. 【一笔画完】通关路径算法的Java代码实现V1.0

    文章目录 前言 一.算法分析 二.算法设计 三.算法实现 四.演示(OneStrokeV1.0) 五.有待改进 1.不符合算法的有穷性,可能无法得到通关的路径 2.空间和时间复杂度高,IDEA的资源开 ...

  7. java制作五子棋的论文,基于java的五子棋的设计与实现.docx

    摘要:随着社会的不断发展,我们的科技也不断的进步,现在我们的计算机也与我们的生活息息相关,这个时候 Internet能够让我们快速的知道自己想了解的知识.根据计算机的发展过程我们发现如今计算机应用的现 ...

  8. 【SDK编程】LRC歌词制作工具V1.0

    今天晚上下载了几个英语听力拷贝到了MP3上听,可是只听看不到原文真是蛋疼,所以想把听力原文做成lrc文件,这样MP3就能显示歌词了.本来想上网上下载个,突然一想这程序也不难,就动手自己写了个,晒下.. ...

  9. U盘启动制作Ventoy v1.0.87

    软件介绍 Ventoy,新一代多系统启动U盘解决方案.国产开源U盘启动制作工具,支持Legacy BIOS和UEFI模式,理论上几乎支持任何ISO镜像文件,支持加载多个不同类型的ISO文件启动,无需反 ...

最新文章

  1. eclipse java代码某一行需要修改注释_看看这些Java代码开发规范吧!你好,我好,大家好!...
  2. 达梦数据库修改字段长度_DM7 达梦数据库 序列 和 自增列 说明
  3. 玩转springboot:默认静态资源和自定义静态资源实战
  4. 基于.NET CORE微服务框架 -谈谈Cache中间件和缓存降级
  5. 为什么线程池里的方法会执行两次_面试官问你java都有哪些线程池,自己是否自定义过线程池...
  6. 残疾科学家_数据科学与残疾:通过创新加强护理
  7. 火狐浏览器所有的快捷键
  8. 论文浅尝 | BERT:Pre-training of Deep Bidirectional Transformers
  9. 重建索引一般需要多久_游泳小白学游泳,一般需要多久才能学会?猜猜看
  10. C++技术在哪些领域中最为适用?
  11. Android6.0 dump h264/h265编码裸流(二)
  12. MFC中给对话框重绘边框
  13. ImageRanger 全萤幕检视操作说明
  14. 关于vc6++编译DDK驱动出现的问题fatal error C1083: Cannot open include file: 'specstrings.h': No such file or dir
  15. excalidraw 使用中文手写体
  16. appium环境搭建python_appium环境搭建python
  17. 为什么微信显示这个android设备,微信显示安卓手机型号在哪设置
  18. 中空介孔载银二氧化硅聚苯乙烯微球/核壳聚苯乙烯/介孔二氧化硅微球/环氧树脂复合材料的制备
  19. Codeforces Contest 1138 problem B Circus —— 死亡1700,暴力
  20. Arduino UNO AT24C32进行字符串数据读写

热门文章

  1. 由DRM引起的ORA-00481错误
  2. 服务器如何释放虚拟内存,服务器如何释放虚拟内存
  3. tiktok也会像Facebook一样封号吗?哪些行为会封号?
  4. Flash在线编程构件的使用
  5. 【STM32学习 自制STM32游戏机】
  6. Java程序员两年校招笔记总结分析——菜鸡求职
  7. 吕文翰 php,自己动手写一个 iOS 网络请求库(三)——降低耦合
  8. 视频教程-HoloLens与ARcore第三视角开发-其他
  9. 中国版的Google被阉割掉多少?
  10. NR5G基础概念扫盲