有关简单弹幕射击游戏的开发思路
简单弹幕射击游戏的开发弹幕射击游戏区别于其他的特点是其需要运用多线程的开发思路需要了解并灵活运用并发与并行线程和进程的相关知识一游戏界面的设计//创建窗口对象JframejfnewJFrame();jf.setTitle(游戏界面”);//标题jf.setSize(900,900);jf.setLocationRelativeTo(null);//窗口居中显示//点关闭按钮是时程序终止运行jf.setDefaultCloseOperation(3);JPaneljpnewJPanel();//创建面板jp.setBackground(Color.WHITE);jf.add(jp,BorderLayout.CENTER);jf.setVisible(true);Graphicsgjp.getGraphics();//获取面板的绘图对象GameListenerlistenernewGamelistener();jf.addKeyListener(listener);//添加键盘监听器//将键盘焦点设置到面板上jp.requestFocus();特别注意设置焦点的原因是键盘事件只有焦点组件才能接收而JPanel可以获取焦点但是不会自动获取二事件监听器2.1GameListener类实现键盘监听器额接口,并重写其抽象方法publicclassGameListnenerimplementsKeyListener{publicvoidkeyTyped(KeyEvente){}publicvoidkeyPressed(KeyEvente){}publicvoidkeyReleased(KeyEvente){}}2.2具体的功能实现publicvoidkeyPressed(KeyEvente){intkeye.getKeyCode();switch(key){caseKeyEvent.VK_SPACE:System.out.println(空格被按下);rolenewRole(350,600);GameThreadthreadnewGameThread(g,role,arrayList,this);thread.start();break;caseKeyEvent.VK_J:System.out.println(发射子弹);BulletbulletnewBullet(role.xrole.size/2,role.y);arrayList.add(bullet);break;caseKeyEvent.VK_W:System.out.println(向上移动);role.speedY-5;break;caseKeyEvent.VK_S:System.out.println(向下移动);role.speedY5;break;caseKeyEvent.VK_A:System.out.println(向左移动);role.speedX-5;break;caseKeyEvent.VK_D:System.out.println(向右移动);role.speedX5;break;caseKeyEvent.VK_B:System.out.println(切换开火方式);b!b;}}publicvoidkeyTyped(KeyEvente){}publicvoidkeyReleased(KeyEvente){intkeye.getKeyCode();switch(key){caseKeyEvent.VK_W:System.out.println(向上移动结束);role.speedY0;caseKeyEvent.VK_S:System.out.println(向下移动结束);role.speedY0;caseKeyEvent.VK_A:System.out.println(向左移动结束);role.speedX0;caseKeyEvent.VK_D:System.out.println(向右移动结束);role.speedX0;}}特别注意1.使用switch case结构来处理不同按键功能2.使用速度值控制方向正负值代表方向3.松键是速度归零实现停止三游戏主线程GameThreadpublicvoidrun(){System.out.println(Thread.currentThread().getName()线程已启动);while(true){try{Thread.sleep(10);}catch(InterruptedExceptione){thrownewRuntimeException(e);}if(listener.btrue){count;if(count3){BulletbulletnewBullet(role.xrole.size/2,role.y);arrayList.add(bullet);count0;}}role.drawRole(g);for(inti0;iarrayList.size();i){BulletbulletarrayList.get(i);bullet.drawBullet(g);bullet.move();}}}特别注意1.使用while(true)无限循环保证游戏正常运行2.Thread.sleep控制速度3.自动开火时计数器控制开火速度四定时任务线程TimeThreadpubliclongtime200;publicRolerole;publicArrayListBulletbullets;publicbooleanrunningtrue;publicTimeThread(ArrayListBulletbullets,Rolerole){this.bulletsbullets;this.rolerole;}publicvoidrun(){while(running){try{Thread.sleep(time);}catch(InterruptedExceptione){thrownewRuntimeException(e);}BulletbulletnewBullet(role.xrole.size/2,role.y);bullets.add(bullet);}}publicvoidstopBullet(){runningfalse;}五角色类RolepublicvoiddrawRole(Graphicsg){g.setColor(Color.WHITE);g.fillRect(x,y,size,size);// 更新位置move();// 黑色实体g.setColor(Color.BLACK);g.fillRect(x,y,size,size);}六子弹类Bullet)publicvoiddrawBullet(Graphicsg){// 红色子弹主体g.setColor(Color.RED);g.fillRect(x,y,size,size);// 白色子弹用来消除轨迹g.setColor(Color.WHITE);g.fillRect(x,yspeed,size,size);}七敌机类EnemyPlane// 存放所有敌机的列表ArrayListEnemylistnewArrayList();// 计数器控制多久生成一个敌机intcount0;classEnemy{intx(int)(Math.random()*800);inty-40;intsize40;intspeed2;intoldXx;// 记录旧位置初始等于当前位置intoldYy;// 向下移动voidmove(){oldXx;oldYy;yyspeed;}// 画出自己voiddraw(Graphicsg){g.setColor(Color.WHITE);g.fillRect(oldX,oldY,size,size);//消除敌机尾迹g.setColor(Color.RED);g.fillRect(x,y,size,size);}// 判断是否超出屏幕底部booleanisOut(){if(y800){returntrue;}else{returnfalse;}}}//更新所有敌机voidupdate(){// 每60帧生成一个敌机countcount1;if(count60){count0;EnemyenewEnemy();list.add(e);}// 让所有敌机移动超出屏幕的删掉// 倒着数从最后一个到第一个intilist.size()-1;// 最后一个的位置while(i0){Enemyelist.get(i);// 取出第i个敌机e.move();// 让它往下走if(e.isOut()){// 如果超出屏幕了list.remove(i);// 删掉它}ii-1;// 看前一个}}// 画出所有敌机 voiddraw(Graphicsg){// 用普通循环从第一个到最后一个inti0;while(ilist.size()){Enemyelist.get(i);// 取出第i个敌机e.draw(g);// 让它画出自己ii1;// 看下一个}}

相关新闻

Office 永久激活指南:ohook 用 3 步钩子方案免费解锁 Microsoft 365 完整功能

Office 永久激活指南:ohook 用 3 步钩子方案免费解锁 Microsoft 365 完整功能

Office 永久激活指南:ohook 用 3 步钩子方案免费解锁 Microsoft 365 完整功能 【免费下载链接】ohook An universal Office "activation" hook with main focus of enabling full functionality of subscription editions 项目地址: https://gitcode.co…

2026/10/7 18:08:00 阅读更多 →
AI舞蹈教学系统技术解析:从姿态估计到动作对比的工程实践

AI舞蹈教学系统技术解析:从姿态估计到动作对比的工程实践

这次我们来看一个名为“张艺兴现场教学咆哮?啊不!History?!不知道了~啊啊啊~”的项目。从标题看,这很可能是一个与音乐、舞蹈教学或明星内容相关的技术项目,具体可能涉及AI驱动的舞蹈…

2026/10/9 11:45:50 阅读更多 →
2026跨端开发技术选型:Flutter、React Native与HarmonyOS对比

2026跨端开发技术选型:Flutter、React Native与HarmonyOS对比

1. 跨端技术选型的时代背景与核心挑战 2026年的移动开发生态正面临前所未有的复杂局面。随着HarmonyOS Next的全面商用化,开发者们突然发现手头的技术选型决策变得异常艰难。我最近刚完成一个需要同时覆盖iOS、Android、HarmonyOS三端的金融项目,深刻体会…

2026/10/12 14:17:26 阅读更多 →

最新新闻

PS5外设兼容改造:从USB HID到RP2040的AnyPS5桥接方案

PS5外设兼容改造:从USB HID到RP2040的AnyPS5桥接方案

那阵子我把客厅收拾利索,终于腾出位置放新主机。开箱之后第一时间把手头几台旧手柄挨个插上去测试,结果有点失望:上一代主机的手柄在PS5上只能玩对应的旧版本游戏,切到PS5原生游戏界面里,要么只能当遥控器,…

2026/10/13 19:42:30 阅读更多 →
Augment 深度解析:全仓库索引如何攻克复杂大项目重构与 Bug 定位

Augment 深度解析:全仓库索引如何攻克复杂大项目重构与 Bug 定位

1. 从 SWE-bench 冠军说起:这个工具到底强在哪第一次看到 Augment 在 SWE-bench 上拿下冠军的消息,我的反应和大多数人一样——又是一个跑分选手吧?毕竟这个圈子从来不缺榜单王者,真正上手一用就露馅的案例我见过太多了。但仔细扒…

2026/10/13 19:42:30 阅读更多 →
专业直播录屏工具:4K高清录制与性能优化全攻略

专业直播录屏工具:4K高清录制与性能优化全攻略

1. 为什么我们需要专业的直播录屏工具在这个全民直播的时代,无论是游戏主播、知识分享者还是才艺表演者,都会遇到一个共同的痛点:如何完美保存直播内容。手机自带的录屏功能往往存在画质压缩、声音不同步、系统卡顿等问题,特别是当…

2026/10/13 19:42:30 阅读更多 →
打造编辑器插件集:知识工作者的知识片段连接与管理实战

打造编辑器插件集:知识工作者的知识片段连接与管理实战

前阵子我一直在折腾自己的一个插件集项目,名字很简单,就叫 knowledge-work-plugins。这个项目说来话长,但它解决的是我日常工作里最烦的一类问题:知识型工作的碎片化——今天要写代码,明天要写文档,后天要做…

2026/10/13 19:42:30 阅读更多 →
多Agent协作编排实战:五种拓扑结构、状态管理与避坑指南

多Agent协作编排实战:五种拓扑结构、状态管理与避坑指南

前阵子我把一个多Agent协作的原型推倒重写了三次,最后发现真正卡住我的不是模型能力,而是Agent与Agent之间的协作方式。单个Agent再聪明,一旦放进一个需要多人接力、互相校验、共享上下文的环境里,立刻就会暴露出一堆工程问题&…

2026/10/13 19:42:30 阅读更多 →
dsoFramer 2.3.0.2 源码编译指南:用 ActiveX 实现 Office 文档网页与 MFC 嵌入

dsoFramer 2.3.0.2 源码编译指南:用 ActiveX 实现 Office 文档网页与 MFC 嵌入

简介:dsoFramer V2.3.0.2 完整源码包,面向需要在 Visual Studio 2013 下编译、定制 COM 控件或 ActiveX 组件的 C 开发人员。资源共 106 个文件,核心为 8 个 .h 头文件与 7 个 .cpp 源文件,配套 .sln/.vcxproj 工程文件、bat 注册…

2026/10/13 19:41:29 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →