Java制作五子棋 V1.0
第一步:写一个接口(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相关推荐
- 程序安装包制作工具 v1.0官方版
2019独角兽企业重金招聘Python工程师标准>>> 名称:程序安装包制作工具 v1.0官方版 版本:1.0更新日期:2016-06-27 大小:2.9MB软件语言:简体中文 软件 ...
- 我的世界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 ...
- Java自动化测试系列[v1.0.0][TestNG测试开发环境配置]
基于之前写的一篇文章Java自动化测试系列[v1.0.0][Maven开发环境]的基础上,阐述如何配置单元测试框架TestNG的测试开发环境 创建Maven项目 启动IDEA,点击Create New ...
- Java编码规范V1.0
Java编码规范V1.0 1 代码总体原则 1. 清晰第一 清晰性是易于维护.易于重构的程序必需具备的特征.代码首先 是给人读的,其次才给机器用来执行. 目前软件维护期成本占整个生命周期成本的 40 ...
- java 开源sns_JEESNS V1.0发布,JAVA 开源 SNS 社交系统
JEESNS V1.0 发布了,本次更新内容: 增加后台管理员授权与取消功能 增加私信模块 解决在微博页面,左侧微博点赞过后,左侧展示列表小手会变黑,但是右侧热门出小手依然是白色 修复后台添加栏目.文 ...
- 【一笔画完】通关路径算法的Java代码实现V1.0
文章目录 前言 一.算法分析 二.算法设计 三.算法实现 四.演示(OneStrokeV1.0) 五.有待改进 1.不符合算法的有穷性,可能无法得到通关的路径 2.空间和时间复杂度高,IDEA的资源开 ...
- java制作五子棋的论文,基于java的五子棋的设计与实现.docx
摘要:随着社会的不断发展,我们的科技也不断的进步,现在我们的计算机也与我们的生活息息相关,这个时候 Internet能够让我们快速的知道自己想了解的知识.根据计算机的发展过程我们发现如今计算机应用的现 ...
- 【SDK编程】LRC歌词制作工具V1.0
今天晚上下载了几个英语听力拷贝到了MP3上听,可是只听看不到原文真是蛋疼,所以想把听力原文做成lrc文件,这样MP3就能显示歌词了.本来想上网上下载个,突然一想这程序也不难,就动手自己写了个,晒下.. ...
- U盘启动制作Ventoy v1.0.87
软件介绍 Ventoy,新一代多系统启动U盘解决方案.国产开源U盘启动制作工具,支持Legacy BIOS和UEFI模式,理论上几乎支持任何ISO镜像文件,支持加载多个不同类型的ISO文件启动,无需反 ...
最新文章
- eclipse java代码某一行需要修改注释_看看这些Java代码开发规范吧!你好,我好,大家好!...
- 达梦数据库修改字段长度_DM7 达梦数据库 序列 和 自增列 说明
- 玩转springboot:默认静态资源和自定义静态资源实战
- 基于.NET CORE微服务框架 -谈谈Cache中间件和缓存降级
- 为什么线程池里的方法会执行两次_面试官问你java都有哪些线程池,自己是否自定义过线程池...
- 残疾科学家_数据科学与残疾:通过创新加强护理
- 火狐浏览器所有的快捷键
- 论文浅尝 | BERT:Pre-training of Deep Bidirectional Transformers
- 重建索引一般需要多久_游泳小白学游泳,一般需要多久才能学会?猜猜看
- C++技术在哪些领域中最为适用?
- Android6.0 dump h264/h265编码裸流(二)
- MFC中给对话框重绘边框
- ImageRanger 全萤幕检视操作说明
- 关于vc6++编译DDK驱动出现的问题fatal error C1083: Cannot open include file: 'specstrings.h': No such file or dir
- excalidraw 使用中文手写体
- appium环境搭建python_appium环境搭建python
- 为什么微信显示这个android设备,微信显示安卓手机型号在哪设置
- 中空介孔载银二氧化硅聚苯乙烯微球/核壳聚苯乙烯/介孔二氧化硅微球/环氧树脂复合材料的制备
- Codeforces Contest 1138 problem B Circus —— 死亡1700,暴力
- Arduino UNO AT24C32进行字符串数据读写