news 2026/7/30 4:55:07

线程游戏1

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
线程游戏1

在完成这个游戏之前,我们先了解一下线程
什么是线程?他和进程之间有什么区别?
所谓进程是当你打开一个软件时,操作系统会分配的一个独立处理车间,拥有自己的内存资源;
线程就是进程里面独立执行的一条任务流水线,多条线程可以同时进行

接下来我们开始设计这个程序

step 1
先定义GameUI类创建一个窗体用来显示整个游戏页面

public class GameUI { public void initUI(){ JFrame jf = new JFrame("游戏界面"); jf.setSize(800,800); jf.setLocationRelativeTo(null); jf.setDefaultCloseOperation(3); jf.getContentPane().setBackground(Color.WHITE); //]给窗体对象的内容层set颜色 jf.setVisible(true); } public static void main(String[] args) { GameUI ui = new GameUI(); ui.initUI(); } }

step 2
我们要实现点击鼠标在鼠标的位置发射子弹 所以需要添加鼠标监听器

public class GameListener extends MouseAdapter { //用extends MouseAdapter 替换 implements MouseListener 可以不用重写所有的方法,只用写需要的方法 public Graphics g; public void mouseClicked(MouseEvent e) { }//方法重写 }

在GameUI类中给jf窗体对象添加鼠标监听器

GameListener listener = new GameListener(g); jf.addMouseListener(listener);

继续在GameUI类新建画笔对象,然后再实现接口类中写一个构造方法

Graphics g = jf.getGraphics();
public GameListener(Graphics g){ this.g = g; }

step 3
重写mouseClicked方法体,并创建GameThread类实现线程的构建

public void mouseClicked(MouseEvent e) { System.out.println("点击!!!"); int x = e.getX();//监听到鼠标的x值 int y = e.getY();//监听到鼠标的y值 }
public class GameThread extends Thread{ public Graphics g; public int x,y; }

在GameListener类中new一个GameThread类的对象,通过对象调用线程方法

GameThread gt = new GameThread(g,x,y); gt.start();

并注意 这里的GameThread构造方法需要自己写

public GameThread(Graphics g,int x,int y){ this.g = g; this.x = x; this.y = y; }

step 4
最后一步就是写一个绘制不停运动的子弹的方法了
但注意这里的方法需要重写到Thread类里面的run方法里

public void run(){ while(true){ try { Thread.sleep(1); } catch (InterruptedException ex) { throw new RuntimeException(ex); } g.setColor(Color.WHITE); g.fillOval(x, y--, 30, 30); g.setColor(Color.RED); g.fillOval(x, y, 30, 30); }

1)因为绘制一个不停运动的子弹 所以需要用到while(true)死循环;
2)运用Thread的sleep方法,可以让程序睡眠一会再执行,执行时间在()里面,单位是毫秒,并且要处理状态异常,需要用try catch包装;
3)最后是我们的主要方法体,不停的绘制一个白色圆形和黑色圆形,让白色圆形覆盖掉先前生成的黑色圆形

这样一个可以用鼠标操控发射子弹的建议模型就写好了

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/30 4:51:23

Python字典核心原理与实战:从哈希表到高频应用场景解析

1. 项目概述:从“头歌”实训看Python字典的实战价值最近在辅导一些同学完成湖南大学“头歌”平台的Python实训作业,发现“实验9:字典”这个关卡,成了不少新手从理解语法到实际应用的一道分水岭。很多人学Python,列表、…

作者头像 李华
网站建设 2026/7/30 4:39:47

02_在多个RockyLinux10虚拟机上安装k8s集群

文章目录1 先在主机上安装 VirtaulBox 并创建一个 RockyLinux10 的虚拟机2 虚拟机 rockylinux10-1 上的准备——第一部分2.1 设置 /etc/hosts2.2 设置 hotstname 主机名2.3 关闭防火墙2.4 关闭 selinux2.5 关闭 swap2.6 VirtualBox 生成个快照 rockylinux10-init3 虚拟机 rocky…

作者头像 李华
网站建设 2026/7/30 4:36:56

STM32 HAL库CAN通信:轮询发送与中断接收的实战配置指南

1. 项目背景与核心需求解析最近在做一个基于STM32的工业数据采集节点,需要和上位机以及几个传感器模块通过CAN总线进行数据交换。场景很简单,就是我的主控STM32需要周期性地向上位机发送采集到的数据包,同时又要能随时响应其他节点发来的控制…

作者头像 李华
网站建设 2026/7/30 4:36:41

机器学习特征工程实战:从原理到风电预测案例

1. 特征工程的核心价值与工作流程在机器学习项目中,数据科学家们常把80%的时间花在数据准备和特征工程上。这就像厨师做菜前的食材处理阶段——再好的厨艺,如果食材没处理好,最终菜品也会大打折扣。特征工程正是将原始数据转化为机器学习模型…

作者头像 李华
网站建设 2026/7/30 4:32:00

Proteus仿真51单片机驱动16x16 LED点阵:从74HC595到动态扫描全解析

1. 从零到一:为什么要在Proteus里折腾16x16点阵?如果你玩过51单片机,大概率是从点亮一个LED开始的。然后,你可能会用8个LED做个流水灯,或者用数码管显示个数字。但当你看到商场里那些滚动播放广告的大屏幕,…

作者头像 李华