用JAVA写游戏的酸爽,你可曾体会到

需求分析

实现玩家飞机的移动,子弹的发射
飞机和子弹的碰撞判定 出界判定
敌机的添加,移动和子弹的发射
分数与生命功能
碰撞时动态爆炸效果的绘制
BOSS类独特的移动和子弹移动方式
可关闭开启的音乐与音效
难度选择.地狱模式敌机能够左右摇摆
联机单机模式选择
排行榜和账号相关功能
完成的类如下

总体思路

JAVA的动态游戏界面都离不开这么一个核心步骤:继承jpanel,重写paint方法,在线程中调用repaint,便实现了动态界面的绘制.
源代码太长,想查看源码移步Github: https://github.com/2293256828/Thunder
这里关键说一下联机思路,其实很简单,就是P1玩家点击创建房间时,开一个端口号,P2玩家输入端口号,两者建立连接后就开始进入游戏界面的绘制,游戏中敲击键盘移动射击的同时传给对方一个操作代号,通过这个代号,就实现了另一架飞机的移动.下面给出部分代码:

//p1玩家的ui,socket联机
public void gameui(Socket s, int rand, int difficulty) {if (difficulty == 1) {HellPlayui playui;//playui就是继承jpanel重写paint方法,调用repaint的类playui = new HellPlayui(rand, sound_effect);//rand用于地图的随机性,sound_effect是音效设置//以下代码是联机实现,简单的说,就是队友按一下键盘,就会用socket传过来一个代号,你读取这个代号同时就移动他的飞机.new Thread(new Runnable() {@Overridepublic void run() {while (true) {try {//游戏结束的判定,上传分数,两边的用户名以及总成绩if (playui.i == 4) {Socket socket = new Socket("127.0.0.1", 111);socket.getOutputStream().write(2);DataOutputStream dos = new DataOutputStream(socket.getOutputStream());dos.writeInt(playui.score1 + playui.score2);dos.writeUTF(username);dos.writeUTF(username2);break;}if (playui.myplane2.isdead()) {return;}int a = s.getInputStream().read();//读取操作代号if (a == 1) {playui.myplane2.shoot(sound_effect);}if (a == 2) {playui.myplane2.moveright();}if (a == 3) {playui.myplane2.moveleft();}if (a == 4) {playui.myplane2.moveup();}if (a == 5) {playui.myplane2.movedown();}} catch (SocketException ee) {} catch (IOException e) {e.printStackTrace();}}}}).start();jFrame.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {try {if (playui.i == 4) {s.close();if (e.getKeyCode() == KeyEvent.VK_ENTER) {if (bgm) {Music.backgroundmusic.stop();}jFrame.dispose();jFrame.setContentPane(jPanel);jFrame.setVisible(true);jFrame.update(jFrame.getGraphics());}}if (playui.myplane1.isdead()) {return;}if (e.getKeyCode() == 32) {s.getOutputStream().write(1);playui.myplane1.shoot(sound_effect);}if (e.getKeyCode() == 39) {s.getOutputStream().write(2);playui.myplane1.moveright();}if (e.getKeyCode() == 37) {s.getOutputStream().write(3);playui.myplane1.moveleft();}if (e.getKeyCode() == 38) {s.getOutputStream().write(4);playui.myplane1.moveup();}if (e.getKeyCode() == 40) {s.getOutputStream().write(5);playui.myplane1.movedown();}} catch (IOException ioException) {ioException.printStackTrace();}}});jFrame.setContentPane(playui);new Thread(playui).start();//开始绘制界面}

实现效果:

登录界面:

主菜单

房间页

#游戏界面

服务端页面(Jtable实现):

另外还有Jtable导出EXCEL(第三方jar包), 音乐,子弹发射音效音效(Clip类)和爆炸效果的实现(用一个数组绘制),就不一一解释了.
源码在github,内含可运行的客户端jar包,没有环境账户名输admin进入单人模式即可,欢迎star:https://github.com/2293256828/Thunder

纯JAVA实现雷电飞机大战<可本地联机>相关推荐

  1. java小游戏-java小游戏-飞机大战

    java小游戏-java小游戏-飞机大战 1 窗口创建 2 背景图片添加 3 启动页面制作 4 启动页面点击事件 5 游戏物体父类的编写 6 背景的移动 7 双缓存的添加 8 背景图片的循环出现 9 ...

  2. 【java毕业设计】基于java+Eclipse的飞机大战游戏设计与实现(毕业论文+程序源码)——飞机大战游戏

    基于java+Eclipse的飞机大战游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Eclipse的飞机大战游戏设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦. ...

  3. 雷电飞机大战游戏|基于Java开发实现雷电飞机大战游戏

    作者主页:编程千纸鹤 作者简介:Java.前端.Pythone开发多年,做过高程,项目经理,架构师 主要内容:Java项目开发.毕业设计开发.面试技术整理.最新技术分享 收藏点赞不迷路  关注作者有好 ...

  4. 仿雷电——飞机大战类游戏Ⅰ

    文章目录 简介 第一阶段:游戏界面的绘画及图片加载 1.添加背景图片 第二阶段:使用多线程让动画动起来 第三阶段:键盘操控飞机 第四阶段:炮弹和飞机碰撞,爆炸 第五阶段:显示分数 简介 我们仿照 QQ ...

  5. java小游戏飞机大战_飞机大战小游戏Java(1)

    雷电游戏大家应该很多都玩过吧(至少95后的我有段时间一直玩····没玩过可能你太年轻了hhh),然后我们今天做一个类似的小游戏.软件:eclipse.exe 编程语言:JAVA 首先,还是要做个窗口界 ...

  6. Java程序之飞机大战

    功能分析 Shoot是一款非常有名的射击类小游戏-飞机大战,游戏中,玩家可以驾驶英雄机,在空中进行战斗,通过鼠标点击并移动英雄机,可以发射子弹,打掉飞机或者蜜蜂,从而来获得分数和奖励(分数默认为0,性 ...

  7. java程序之飞机大战_java写飞机大战一

    从前看马士兵老师的教程,学过一个坦克大战,不过当时一头雾水,一直想着模仿着写一个飞机大战,放假了终于动手写了,虽然AWT似乎已经不推荐用了,但是懒得研究swing啊,作为javase的练习还是可以的. ...

  8. JAVA 实现《飞机大战-II》游戏

    前言 <飞机大战-II>是一款融合了街机.竞技等多种元素的经典射击手游.华丽精致的游戏画面,超炫带感的技能特效,超火爆画面让你肾上腺素爆棚,给你带来全方位震撼感受,体验飞行战斗的无限乐趣. ...

  9. Java小游戏——飞机大战

    本程序是跟着尚学堂敲的,非常适合新手拿来练手.B站学习链接:047[飞机大战]_介绍视频_哔哩哔哩_bilibili​​​​​​ 主类GameWin,是游戏运行的主面板(该类继承JFrame): pa ...

最新文章

  1. C++ STL 之 map
  2. anguarjs 图片预览_Text to Image Converter(文字转图片软件)下载-Text to Image Converter(文字转图片软件)v1.5绿色版下载...
  3. 基于java的学生点名系统_基于javafx的学生电子点名系统(在eclipse中编写完成)...
  4. 企业家Scott Gerber:小公司应用开发的十条建议
  5. NPAPI和PPAPI开发
  6. 牛客题霸 [在转动过的有序数组中寻找目标值] C++题解/答案
  7. Hadoop节点热拔插
  8. Selenium3+python 加载Firefox配置
  9. Tensorflow学习笔记2----文本分类模型
  10. 常见概率分布图表总结
  11. 查看计算机显卡驱动版本,驱动人生检测选择显卡版本教程 电脑显卡公版和官方驱动区别...
  12. 基于双目摄像头测量距离
  13. 【量化分析】债券投资分析
  14. 小学必背古诗词80首(带拼音)
  15. UVM实战 卷I学习笔记14——OVM到UVM的迁移
  16. java treemap的排序_Java TreeMap的排序(转)
  17. Android使用FFmpeg 解码H264并播放(一)
  18. php mysql admin_mysql+phpAdmin
  19. 恒流恒压线性充电芯片MST4210
  20. 修改HTK代码,让其支持中文

热门文章

  1. 软件工程导论第三章复习总结附思维导图
  2. 【单片机学习笔记】(6):字符串处理函数、变量的三种情况、用函数实现模块化程序设计、晶振与延时、指针
  3. 如何去除软件内嵌广告_iphone如何一键去除app内置小广告?
  4. 这份职业我有多少期许
  5. Android Native层
  6. Java软件测试工程师之学习进阶路线
  7. 天干地支与阴阳五行的关系
  8. 百度云盘搜索引擎微信公证号_全L导演 H265 1080P 双语版@微信公众号edy521
  9. BMM 和 FMM 中文分词
  10. VBS 请求WebAPI接口_如何设计WEB API