当前位置: 首页 > news >正文

开发五子棋小游戏1.0——了解Java中的继承、绘图与鼠标监听器的使用

目录

1. 初识项目开发

语言

技术技能

2.继承

3.五子棋的初步开发


1. 初识项目开发

语言

游戏:

  • 矩阵游戏:五子棋、围棋、象棋、连连看、俄罗斯方块、扫雷

界面开发:创建窗体设置属性、创建组件对象添加到窗体上

监听器:创建监听器类实现监听器接口,重写监听器方法,创建对象与组件绑定

数组:[] 初始化、下标、长度

判断与循环:if-else、for、while

类与对象:属性、方法、创建对象、调用属性以及方法

  • 鼠标、键盘控制游戏(自己独立完成一些任务):植物大战僵尸、雷霆战机

技术技能

画图

  • Graphics 图形、GPU-显卡-5060
  • 绘制直线、矩形、圆形、设置颜色、设置字体、绘制图片

窗体对象在可视化之后也可以获取一个 Graphics 对象,用于在窗体上绘制图形。

Graphics g = jf.getGraphics();

鼠标监听器

接口:MouseListener

功能:监听窗体,当鼠标在窗体上按下、松开、点击等操作后会被识别,用来获取坐标。

public class GoBangListener implements MouseListener { @Override public void mouseClicked(MouseEvent e) { }// 鼠标单击(按下+释放,且没有拖动) @Override public void mousePressed(MouseEvent e) { }// 鼠标按下(任意按键按下瞬间) @Override public void mouseReleased(MouseEvent e) { }// 鼠标释放(松开按键) @Override public void mouseEntered(MouseEvent e) { }//鼠标光标进入组件区域 @Override public void mouseExited(MouseEvent e) { }//鼠标光标离开组件区域 }

2.继承

在编写五子棋的代码时,我们会遇到以下问题

绘制好的图形在窗体上,一旦窗体改变尺寸/最大化/最小化/移出屏幕外,绘制的图形就会消失

而出现这个问题的原因是:

窗体以上情况发生时,会调用GPU重新绘制窗体自己本身

基于此,我们可以通过继承的学习来解决这个问题~

  • 继承是面向对象三大特性之一(封装、继承、多态)
  • 作用:复用已有类的代码,建立类与类之间的父子关系
  • 类与类之间的关系:

子类 继承 父类:

public class 子类名 extends 父类名{ }

1.子类中可以继承父类所有的属性以及方法

2.子类可以改造父类的方法 通过重写方法的形式

3.五子棋的初步开发

package xzn0721; import javax.swing.*; import java.awt.*; import java.awt.image.ImageObserver; import java.text.AttributedCharacterIterator; public class GoBangUI { public void showUI(){ myFrame jf = new myFrame(); jf.setSize(600,700); jf.setLocationRelativeTo(null);//居中显示 jf.setDefaultCloseOperation(3); jf.setVisible(true); //将鼠标监听器绑定到窗体上,实现点击鼠标就能画圆 GoBangListener gbl = new GoBangListener(jf); jf.addMouseListener(gbl); } static void main() { GoBangUI gbUI = new GoBangUI(); gbUI.showUI(); } }
package xzn0721; import javax.swing.*; import java.awt.*; public class myFrame extends JFrame { @Override public void paint(Graphics g) { super.paint(g); g.setColor(Color.orange); g.fillRect(0,0,500,500); //划线 g.setColor(Color.black); for(int i=1;i<16;i++) { g.drawLine(50, 20 + i * 30, 470, 20 + i * 30);//(x1,y1)是线段的起点坐标,(x2,y2)是线段的终点坐标 g.drawLine(20 + i * 30, 50, 20 + i * 30, 470); } //画棋盘上的点 g.setColor(Color.black); g.fillOval(137,137,6,6);//(x,y)是圆形外接正方形的左上角顶点,width、height分别是正方形的宽与高 g.fillOval(377,377,6,6); g.fillOval(377,137,6,6); g.fillOval(137,377,6,6); g.fillOval(257,257,6,6); } }
​package xzn0721; import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class GoBangListener implements MouseListener { JFrame jf; int clickCount;//记录点击次数,初始值为0 //构造方法将窗体地址传给鼠标监听器的成员变量 public GoBangListener(JFrame jf){ this.jf = jf; } @Override public void mouseClicked(MouseEvent e) { clickCount++; int x=e.getX();//获取鼠标点击的坐标 int y=e.getY(); //使用窗体的作图工具(简称画笔) Graphics g1 = jf.getGraphics(); if (clickCount % 2 == 0) { g1.setColor(Color.white); } else { g1.setColor(Color.black); } g1.fillOval(x-15,y-15,30,30); } @Override public void mousePressed(MouseEvent e) { } @Override public void mouseReleased(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } }

运行结果

提示:

不能把监听器 “绑定到圆上”。 Swing 原生没有图形碰撞监听,圆只是画出来的像素,不是组件;鼠标监听器只能绑定组件。

该程序的缺陷:

1、在窗体上随意落子,未将棋子限定在交点坐标

2、可重复落子

下篇博客,我来改进这些问题~

http://www.jsqmd.com/news/1266135/

相关文章:

  • 毕设别死磕烂大街系统!IT技术交流平台贴合专业,答辩自带优势!
  • 注意力机制到底在“注意”什么?——神经科学×数学直觉×工程落地三重视角解析
  • 长安古韵系列推荐? - 中媒介
  • 消耗型婚姻向滋养型关系转化的暂停修复模型:信号识别与路径分析
  • C语言-文件操作1
  • C++银行账户管理系统:面向对象设计与文件持久化实战
  • 今年秋招,大厂招人逻辑变了
  • 加油站整体评价好推荐哪家? - 中媒介
  • 产后脱发做头疗能改善吗? - 中媒介
  • CC3220 LaunchPad功耗测量与RF连接配置实战指南
  • AI智能助手如何提升毕业论文写作效率
  • 核心客群满意度高的食养品牌 - 中媒介
  • 告别模糊视频:Video2X如何用AI技术让老旧视频重获新生
  • C++跨平台线程安全定时器:从设计原理到工程实现
  • 搭建域控服务器并创建组织和用户
  • 工业设备智能故障诊断:WMSST-MCNN-BiGRU-Attention模型解析
  • 电动车电池哪家售后好? - 中媒介
  • 三类指针完整解析:元素指针、行指针、数组指针步进规则
  • 薄膜生产中央控制系统解决方案 - 中媒介
  • 菏泽信奥赛CSP-J/S规划指南|四年级起步、五年级切入、初中参赛的时间线拆解
  • Lu,生理实验系统虚实结合型 生理学实验系统 生理学实验系统软件
  • AI视频生成技术:从Sora到Seedance的工程实践启示
  • 大语言模型本地代码执行器:金融与医疗场景的AI深度集成方案
  • 宠物乐园哪家推荐? - 中媒介
  • 76-全量微调vs-LoRA-vs-QLoRA-三种微调方式对比与选型
  • 【RAG】自主RAG案例讲解 - 基于GPT-4o和向量数据库
  • 从寓言到AI:NLP与机器学习中的关系解析
  • CentOS 7离线安装GCC 9.3.0全攻略
  • 粮油企业应急储备能力怎么评估? - 中媒介
  • A59P专业版:SPI动态寄存器控制与双麦波束自适应切换的语音增强架构