线程游戏1.0
一.项目总览类名作用UI创建界面添加监听器GameListener声明对象键盘监听设置攻击与移动GameThread声明对象游戏主线程负责所有单位的移动和绘制Bullet设置子弹对象Archer设置玩家对象Spear1设置敌对对象TimeThread设置子弹自动发射AdverThread设置敌对对象出现逻辑二.UI类publicclassUI{publicvoidshowUI(){JFramejfnewJFrame();jf.setSize(800,800);jf.setTitle(游戏界面);jf.setLocationRelativeTo(null);jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.getContentPane().setBackground(Color.WHITE);***//实际承载游戏画面的界面***JPanelgamepanelnewJPanel();gamepanel.setBackground(Color.WHITE);jf.add(gamepanel,BorderLayout.CENTER);jf.setVisible(true);***//获取画板对象上的画笔对象g******Graphicsggamepanel.getGraphics();******//将g传入GameListener构造***GameListenergameListenernewGameListener(g);jf.addMouseListener(gameListener);jf.addKeyListener(gameListener);//让gamepanel获取焦点对象gamepanel.requestFocus();jf.requestFocus();}三.BulletArcherSpear1类属性一致方法不同1.以Archer为例publicclassArcher{publicGraphicsg;publicintx,y,size;publicintspeedx,speedy;publicImageIconimg;publicArcher(Graphicsg,intx,inty){this.gg;this.xx;this.yy;this.size30;this.imgnewImageIcon(C:\\Users\\admin\\IdeaProjects\\Pro26\\src\\弓手.png);}publicvoiddraw(){g.drawImage(img.getImage(),x,y,null);move();//传入speedxspeedy}//移动逻辑publicvoidmove(){xspeedx;yspeedy;}}2.Bullet绘制逻辑publicvoiddrawbullet(Graphicsg){speedx1;xspeedx;g.drawImage(img.getImage(),x,y,null);}}3.敌对对象移动逻辑publicvoiddrawspear1(Graphicsg){speedx0;x-speedx;g.drawImage(img.getImage(),x--,y,null);}}四.GameLIstener类1.声明各类对象创建数组privateGraphicsg;publicArrayListBulletarrayListnewArrayList();publicArcherar;publicSpear1sp1;publicBulletbullet;publicGameListenergameListener;publicArrayListSpear1spear1snewArrayList();privatebooleanarstartfalse;//判断运行状态publicGameThreadgameThread;2.构造方法***//创建GameListener对象时必须传入一个Graphics画笔对象*** public GameListener(Graphics g) { //把外部传入的画笔保存到监听器内部之后在鼠标和键盘事件里就可以使用这个画笔绘制 //this代表private Graphics g this.g g; }3.键盘监听操控玩家移动和攻击publicvoidkeyPressed(KeyEvente){intkeyCodee.getKeyCode();switch(keyCode){caseKeyEvent.VK_J:System.out.println(攻击-----);//创建子弹对象设置位置让子弹出现在玩家前面bulletnewBullet(ar.x10,ar.y40);arrayList.add(bullet);break;//通过设置速度操控方向caseKeyEvent.VK_W:System.out.println(向前移动);ar.speedy-5;break;caseKeyEvent.VK_A:System.out.println(向左移动);ar.speedx-5;break;caseKeyEvent.VK_S:System.out.println(向后移动);ar.speedy5;break;caseKeyEvent.VK_D:System.out.println(向右移动);ar.speedx5;break;caseKeyEvent.VK_SPACE:System.out.println(生成单位*****);//判断是否运行若已运行则不在运行if(!arstart){//正式创建Archer对象arnewArcher(g,10,150);//创建线程对象必须传入参数调用方法GameThreadgtnewGameThread(g,ar,sp1,arrayList,spear1s,gameListener);AdverThreadatnewAdverThread(sp1,spear1s);//强制转换因为AdverThread中无start方法newThread(at).start();this.gameThreadgt;gt.start();arstarttrue;}break;caseKeyEvent.VK_Q:System.out.println(使用技能);TimeThreadttnewTimeThread(arrayList,ar);newThread(tt).start();break;caseKeyEvent.VK_R:if(gameThread!null){gameThread.paused!gameThread.paused;System.out.println(gameThread.paused?已暂停:已继续);stop();}default://其他按键不处理break;}}OverridepublicvoidkeyReleased(KeyEvente){intkeyCodee.getKeyCode();switch(keyCode){//停止逻辑防止自动前行caseKeyEvent.VK_W:System.out.println(向前移动);ar.speedy0;break;caseKeyEvent.VK_A:System.out.println(向左移动);ar.speedx0;break;caseKeyEvent.VK_S:System.out.println(向后移动);ar.speedy0;break;caseKeyEvent.VK_D:System.out.println(向右移动);ar.speedx0;break;default://其他按键不处理break;}}五.GameThread类1.声明变量publicclassGameThreadextendsThread{//成员变量只声明暂时是空引用publicGraphicsg;publicArcherar;publicSpear1sp1;publicArrayListBulletarrayList;publicArrayListSpear1spear1s;publicGameListenergameListener;//构造方法publicGameThread(Graphicsg,Archerar,Spear1sp1,ArrayListBulletarrayList,ArrayListSpear1spear1s,GameListenergameListener){***//将已存在的对象全部传入线程只传递引用地址实现数据共享***this.gg;this.arar;this.sp1sp1;this.arrayListarrayList;this.spear1sspear1s;this.gameListenergameListener;}2.run方法操控各单位的绘制publicvolatilebooleanpausedfalse;publicvoidrun(){System.out.println(Thread.currentThread().getName():线程启动...);//无限循环while(true){try{Thread.sleep(20);}catch(InterruptedExceptionex){thrownewRuntimeException(ex);}if(paused)continue;//遍历数组绘制对象for(inti0;iarrayList.size();i){BulletbulletarrayList.get(i);bullet.drawbullet(g);}for(inti0;ispear1s.size();i){Spear1spear1spear1s.get(i);spear1.drawspear1(g);}//重绘画面但会引起闪烁g.setColor(Color.WHITE);g.fillRect(0,0,1000,1000);//调用玩家绘制逻辑并实现移动ar.draw();}}}六.TimeThread1.声明变量publiclongtime;publicArcherar;publicArrayListBulletarrayList;publicTimeThread(ArrayListBulletarrayList,Archerar){this.arrayListarrayList;this.arar;this.time5;}2.run方法publicvoidrun(){while(true){try{Thread.sleep(time);}catch(InterruptedExceptione){thrownewRuntimeException(e);}//不断创建bullet对象以此实现自动发射BulletbulletnewBullet(ar.x10,ar.y40);//插入数组arrayList.add(bullet);}}}七.AdverThread1.声明变量publicclassAdverThreadimplementsRunnable{publiclongtime;publicSpear1sp1;publicArrayListSpear1spear1s;publicAdverThread(Spear1sp1,ArrayListSpear1spear1s){this.sp1sp1;this.spear1sspear1s;this.time3000;}2.run方法publicvoidrun(){***//随机数必须设置在循环外否则对象无法随机出现***RandomranewRandom(600);***//设置随机次数而非范围***intx650while(true){try{//控制出现频率此时为3秒出现一次Thread.sleep(time);}catch(InterruptedExceptione){thrownewRuntimeException(e);}intyra.nextInt(600)60;Spear1spnewSpear1(x,y);spear1s.add(sp);System.out.println(x:xy:y);}}}八.扩展1.继承与接口继承是我是一个单继承接口是我能做多实现2.标志位控制Flag Control用一个 boolean 变量作为开关控制线程循环是否执行业务逻辑本次暂停功能就是由此实现、caseKeyEvent.VK_R://判断gameThread运行状态if(gameThread!null){gameThread.paused!gameThread.paused;System.out.println(gameThread.paused?已暂停:已继续);stop();}publicvolatilebooleanpausedfalse;// 标志位while(true){if(paused)continue;// 标志位为 true 时跳过// 业务逻辑...}

相关新闻

【工程实践·升级版】四人联席研发团队2.0:从SIL项目到华为OD备考的动静结合实战

【工程实践·升级版】四人联席研发团队2.0:从SIL项目到华为OD备考的动静结合实战

一、前言两个月前,我写了一篇文章《我组建了一个“四人联席”研发团队:一个真人与三位AI的SIL项目实战》,讲述了我如何利用三位AI角色(SIL专家、项目经理、Python导师)在48小时内从零搭建ADAS仿真框架的经历。那是一次…

2026/8/1 5:36:53 阅读更多 →
企业会计档案三维安全防护体系设计与实践

企业会计档案三维安全防护体系设计与实践

1. 会计档案安全防护体系概述会计档案作为企业核心数据资产,其安全性直接关系到财务合规与商业机密保护。传统档案管理往往存在"重存储轻防护"的弊端,而现代安全体系需要构建"权限分级加密存储操作追溯"的三维防御机制。这套方案在我…

2026/8/1 5:36:53 阅读更多 →
G-Helper完整实战指南:5个技巧彻底释放华硕笔记本性能

G-Helper完整实战指南:5个技巧彻底释放华硕笔记本性能

G-Helper完整实战指南:5个技巧彻底释放华硕笔记本性能 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Ex…

2026/8/1 5:36:53 阅读更多 →

最新新闻

如何3步掌握N_m3u8DL-RE:跨平台流媒体下载终极方案

如何3步掌握N_m3u8DL-RE:跨平台流媒体下载终极方案

如何3步掌握N_m3u8DL-RE:跨平台流媒体下载终极方案 【免费下载链接】N_m3u8DL-RE Cross-Platform, modern and powerful stream downloader for MPD/M3U8/ISM. English/简体中文/繁體中文. 项目地址: https://gitcode.com/GitHub_Trending/nm3/N_m3u8DL-RE …

2026/8/1 6:16:05 阅读更多 →
三月七小助手:星穹铁道自动化助手终极指南,解放双手专注游戏乐趣

三月七小助手:星穹铁道自动化助手终极指南,解放双手专注游戏乐趣

三月七小助手:星穹铁道自动化助手终极指南,解放双手专注游戏乐趣 【免费下载链接】March7thAssistant 崩坏:星穹铁道全自动 三月七小助手 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant 还在为《崩坏:星…

2026/8/1 6:16:05 阅读更多 →
ADB命令实战:解锁安卓隐藏彩蛋与系统调试进阶指南

ADB命令实战:解锁安卓隐藏彩蛋与系统调试进阶指南

1. 从“彩蛋”到“搞机”:一场关于安卓的深度对话如果你自诩为一名“搞机人”,却对安卓系统里那些隐藏的、充满趣味的“彩蛋”一无所知,那你的搞机生涯可能还停留在“知其然”的初级阶段。搞机,从来不只是刷机、Root、改系统那么简…

2026/8/1 6:16:05 阅读更多 →
5分钟掌握Umi-OCR:免费离线文字识别的终极完整指南

5分钟掌握Umi-OCR:免费离线文字识别的终极完整指南

5分钟掌握Umi-OCR:免费离线文字识别的终极完整指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库…

2026/8/1 6:16:05 阅读更多 →
【AI远程办公效率跃迁指南】:20年IT架构师亲测的7大智能工具链与3个避坑红线

【AI远程办公效率跃迁指南】:20年IT架构师亲测的7大智能工具链与3个避坑红线

更多请点击: https://intelliparadigm.com 第一章:AI远程办公效率跃迁的认知重构 传统远程办公的效能瓶颈,往往并非源于工具缺失,而是根植于对“协作”与“自主”的认知错位——我们习惯将异步沟通等同于延迟响应,把自…

2026/8/1 6:15:05 阅读更多 →
AI水彩风格迁移失败率高达68%?2024最新评估框架揭示3个被低估的色彩空间陷阱(附可复现Benchmark数据集)

AI水彩风格迁移失败率高达68%?2024最新评估框架揭示3个被低估的色彩空间陷阱(附可复现Benchmark数据集)

更多请点击: https://kaifayun.com 第一章:AI生成水彩画效果 将普通照片转化为富有表现力的水彩画风格,已成为AI图像生成领域中兼具艺术性与实用性的典型应用。现代扩散模型(如Stable Diffusion)结合LoRA微调与Contro…

2026/8/1 6:15:05 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/8/1 5:19:34 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →