雷霆战舰飞机游戏简化版

class MyGameFrame:
import java.awt.Color;import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Date;import javax.swing.JFrame;
/*** 飞机游戏的主窗口* @author shishaopeng**/public class MyGameFrame extends Frame {Image planeImg =GameUtil.getImage("images/plane.png");// 得到images图片路径Image bg =GameUtil.getImage("images/bg.jpg");Plane plane =new Plane(planeImg,250,250);  Shell[] shells=new Shell[50];Explode bao;Date  startTime = new Date();Date  endTime;int period;   //游戏持续的时间@Overridepublic void paint(Graphics g) {         //自动被调用,g变量相当于一只画笔                      super.paint(g); g.drawImage(bg, 0, 0, null);plane.drawSelf(g);     // 画飞机//画出全部炮弹for(int i=0;i<shells.length;i++) {shells[i].draw(g);//飞机与炮弹的碰撞检测boolean peng=   shells[i].getRect().intersects(plane.getRect());if(peng) {plane.live=false;if(bao==null) {bao= new Explode(plane.x,plane.y);endTime=new Date();period =(int)(endTime.getTime()-startTime.getTime()/1000);}bao.draw(g);}//计时功能,给出提示if(!plane.live){g.setColor(Color.red);Font   f  =  new Font("宋体", Font.BOLD, 50);g.setFont(f);g.drawString("时间:"+period+"秒", (int)plane.x, (int)plane.y);}}}class PaintThread extends Thread{      //内部类   @Overridepublic void run() {super.run();while(true) {     repaint();   // 重复画窗口try {Thread.sleep(40);     //40ms   25/s图片变换频率} catch (InterruptedException e) {e.printStackTrace();}     }}}// 定义键盘监听的内部类class KeyMonitor extends KeyAdapter{@Overridepublic void keyPressed(KeyEvent e) {            super.keyPressed(e);plane.addDirection(e);}@Overridepublic void keyReleased(KeyEvent e) {           super.keyReleased(e);plane.minusDirection(e);}}/*** 初始化窗口*/public  void  launchFrame(){this.setTitle("雷霆战舰简化版");     //窗口名this.setVisible(true);        //可视化窗口this.setSize(Constant.GAME_WIDTH, Constant.GAME_HEIGHT);       //窗口大小   this.setLocation(300, 300);   //窗口位置        this.addWindowListener(new  WindowAdapter(){@Overridepublic void windowClosing(WindowEvent e) {          System.exit(0);}           });     new PaintThread().start();    // 启动重画窗口的线程addKeyListener(new KeyMonitor());  //  给窗口增加键盘的监听//初始化50个炮弹for(int i=0;i<shells.length;i++) {shells[i]= new Shell();}}public static void main(String[] args) {MyGameFrame  f = new MyGameFrame();f.launchFrame();}private Image offScreenImage = null;public void update(Graphics g) {if(offScreenImage == null)offScreenImage = this.createImage(Constant.GAME_WIDTH,Constant.GAME_HEIGHT);//这是游戏窗口的宽度和高度Graphics gOff = offScreenImage.getGraphics();paint(gOff);g.drawImage(offScreenImage, 0, 0, null);}
}
class GameUtil:import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;public class GameUtil {// 工具类最好将构造器私有化。private GameUtil() {} /*** 返回指定路径文件的图片对象* @param path* @return*/public static Image getImage(String path) {BufferedImage bi = null;try {URL u = GameUtil.class.getClassLoader().getResource(path);bi = ImageIO.read(u);} catch (IOException e) {e.printStackTrace();}return bi;}
}
class GameObject:import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
/*** 游戏物体的父类* @author 59231**/
public class GameObject {Image img;double x,y;int speed;int width,height;public void drawSelf(Graphics g) {g.drawImage(img,(int)x,(int)y,null);}public GameObject(Image img, double x, double y, int speed, int width, int height) {super();this.img = img;this.x = x;this.y = y;this.speed = speed;this.width = width;this.height = height;}public GameObject(Image img, double x, double y) {super();this.img = img;this.x = x;this.y = y;}public GameObject() {               }/*** 返回物体所在的矩形。便于后继的碰撞检测* @return*/public Rectangle  getRect() {return new Rectangle((int)x,(int)y,width,height);}
}
class GameObject:import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
/*** 游戏物体的父类* @author 59231**/
public class GameObject {Image img;double x,y;int speed;int width,height;public void drawSelf(Graphics g) {g.drawImage(img,(int)x,(int)y,null);}public GameObject(Image img, double x, double y, int speed, int width, int height) {super();this.img = img;this.x = x;this.y = y;this.speed = speed;this.width = width;this.height = height;}public GameObject(Image img, double x, double y) {super();this.img = img;this.x = x;this.y = y;}public GameObject() {               }/*** 返回物体所在的矩形。便于后继的碰撞检测* @return*/public Rectangle  getRect() {return new Rectangle((int)x,(int)y,width,height);}
}
class Constant:public class Constant {public static final int GAME_WIDTH=500;public static final int GAME_HEIGHT=500;
}
class plane:import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;public class Plane extends GameObject {boolean left,up,right,down;boolean live=true;public void drawSelf(Graphics g) {if(live) {      g.drawImage(img,(int)x,(int)y,null);if(left) {x-=speed;}if(right) {x+=speed;               }if(up) {y-=speed;}if(down) {y+=speed;}}else {}}public Plane(Image img,double x,double y) {this.img=img;this.x=x;this.y=y;this.speed=3;this.width=img.getWidth(null);this.height=img.getHeight(null);}//按下某个键,增加相应的方向public void addDirection(KeyEvent e) {switch(e.getKeyCode()) {case  KeyEvent.VK_LEFT:left=true;break;case KeyEvent.VK_UP:up=true;break;case  KeyEvent.VK_RIGHT:right=true;break;case KeyEvent.VK_DOWN:down=true;break;          }       } //按下某个键,取消相应的方向public void minusDirection(KeyEvent e) {switch(e.getKeyCode()) {case  KeyEvent.VK_LEFT:left=false;break;case KeyEvent.VK_UP:up=false;break;case  KeyEvent.VK_RIGHT:right=false;break;case KeyEvent.VK_DOWN:down=false;break;          }}} 
class Shell:import java.awt.Color;import java.awt.Graphics;public class Shell extends GameObject{double degree;public Shell() {x=200;y=200;width=10;height=10;speed=3;degree=Math.random()*Math.PI*2;}public void draw(Graphics g) {Color c=g.getColor();g.setColor(Color.YELLOW);g.fillOval((int)x,(int)y,width,height);// 炮弹沿着任意角度去飞x+=speed*Math.cos(degree);y+=speed*Math.sin(degree);if(x<0||x>Constant.GAME_WIDTH-width) {degree = Math.PI*degree;}if(y<30||y>Constant.GAME_HEIGHT-height) {degree =-degree;g.setColor(c);}}
}

游戏所需图片

















雷霆战舰 游戏简化版相关推荐

  1. 用java编写战舰 游戏吗_java – 战舰游戏 – 船舶重叠

    我正在使用ACM库在 Java中编写一个简单的战舰游戏. 游戏开始后,应该将船只放在画布上的随机位置,但问题是船只可能会互相覆盖,这在游戏中是不允许的.如何避免将船放在彼此之上? 我的代码是: pri ...

  2. 用java编写战舰 游戏吗_如何在Java中正确建模战舰游戏

    我正在尝试为我的小组在大学里做的"游戏"项目创建战舰游戏.我之前从未真正使用过GUI,几乎所有输出都在Eclipse控制台中. 首先,我创建了一个GUI类,它实际上是我的" ...

  3. java 雷霆战机游戏 飞机大战 全过程教学+免费素材(附全部源代码)

    这个游戏已是我第二次编写了,之前写过一个简易版的飞机大战类似demo.这次在上一次基础上添加了许多元素,增添了可玩性. 游戏效果图如下: ps :完整源码+视频教程+论文文档 :java雷霆战机完整资 ...

  4. 开创性的区块链操作系统项目——去中心化的战舰游戏

    卓有成效的开发人员 Lachezar 说,他开始使用区块链的时候很容易.Cartesi 提供了很多开发文档,他能够通过实际开发他的去中心化应用程序来获得大部分区块链知识,而不用先学复杂的 Solidi ...

  5. 战争雷霆warthunder游戏内自定义文本mod的制作方法

    一学就会的方法 第一步:打开战争雷霆的目录,可使用任务管理器进行查找-具体可以看我星羽空幻的其它博客 第二步:打开目录下的config.blk文件(这个可以用记事本打开),找到debug在内加上 te ...

  6. 基于HTML5坦克大战游戏简化版

    之前我们有分享过不少经典的HTML5游戏,有些还是很有意思的,比如HTML5版切水果游戏和HTML5中国象棋游戏.今天要分享的是一款简化版的HTML5坦克大战游戏,方向键控制坦克的行进方向,空格键发射 ...

  7. 区块链游戏项目(战舰游戏)基于layer2区块链技术,使用以太坊的solidity语言, 含全栈完整源码

    这里介绍一个基于区块链以太坊开发的战舰游戏项目.做这个项目的初衷是对layer2区块链技术的proof-of-concept.因此,本项目是一个可以在每一个人的电脑上面执行的demo.为了让大家也能执 ...

  8. JavaScript学习笔记——编写战舰游戏 Part2:JavaScript部分

    编程思路 核心:跟随游戏的步骤逻辑,思考其中所需的功能,并尽量将各部分功能分离,可以使编程思路更清晰.代码易读性更强,也方便调试 先写大框架,有需要的功能直接调用(虽然未编写),交给后面的代码实现细节 ...

  9. 项目二:用C++做一个战舰游戏

    开启我的菜鸟小旅程 Battleship Game 舰船战争背景描述 MVC模式基础理解 显示10*10玩家战舰位置分布功能 代码部分讲解 第一部分 定义CMakeLists.txt 文件 [ C++ ...

最新文章

  1. python集合用法详解(创建、添加(add()、update())、删除(remove()、discard()、pop())、查找(in、not in))
  2. Shell 下记录程序运行时间
  3. WinDocks发布Windows版本的Docker引擎
  4. Python列表List
  5. ajax异步查询demo,ASP.NET中AJAX的异步加载(Demo演示)
  6. java版 modbus crc16校验 (已测试成功)_java版 ModBus CRC16校验 (已测试成功)
  7. 4. 星际争霸之php设计模式--工厂方法模式
  8. MySQL 基础 ———— 子查询
  9. 【内存检测系列】window下windbg内存泄漏检查
  10. Trim or Discard or Unmap
  11. onmouseover+onmouseout :表格隔行变色
  12. thinkphp创建对象及数据操作
  13. 简述使jdbc连接mysql数据库_java中简述使用JDBC完成数据库操作的基本步骤。
  14. 1)⑤爬取搜狗旅游部分新闻
  15. 机械秒表的使用方法_秒表的使用方法?
  16. Easyx-----c语言实现烟花表白程序
  17. 清理垃圾文件属于计算机安全维护吗,如何清理c盘垃圾文件
  18. 亚马逊广告接口 amazon advertising
  19. 带库的pydroid安装与使用。
  20. android型号手机怎么截图,如何在Android手机上屏幕截图(仅限Rooted Phone) | MOS86...

热门文章

  1. 函数使用(函数定义及调用方式、传参与返回参数、命名空间、装饰器)
  2. [ Python ] 爬虫类库学习之 requests,爬取豆瓣喜剧电影排行榜
  3. 过拟合(Over-fitting) 和 欠拟合(Under-fitting)
  4. mac快捷键 idea快捷键整理
  5. 相忘江湖不如相濡以沫(IV)
  6. 基于程序员的知识付费,这个网站有点新意,但是基于程序员的知识付费,能刮起一阵凤么?
  7. 支付宝扫码付代理微信支付宝二合一支付收银系统
  8. MySQL 获得当前日期时间以及时间的转换
  9. ARM-DAPLINK 仿真器硬件解析
  10. AppScan的用法