package 飞机小游戏;
//如果觉得好的话,给一点积分哦,太痛苦了,平时下一点资料都得需要
import java.awt.Color;
import java.awt.Font;
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;//解决了图片闪烁问题
import javax.xml.crypto.Data;import org.omg.CORBA.PRIVATE_MEMBER;
//窗口类
//飞机小游戏主窗口
public class MyGameFrame extends JFrame
{Image bgImage=GameUtil.getImage("images/bg.jpg");//地球Image pImage=GameUtil.getImage("images/plane.png");//飞机Plane plane=new Plane(pImage,250,250);//飞机对象//int pImageX=250;//int pImageY=250;//Shell shell=new Shell();//炮弹类Shell shells[]=new Shell[50];Explode bao;//爆炸对象Date startTime=new Date();//开始时间Date endTime;//结束时间int chixu;//游戏持续时间@Overridepublic void paint(Graphics g) {//自动被调用,g相当于画笔Color color=g.getColor();//获取当前字体/*// 画图形super.paint(g);Color color=g.getColor();Font font=g.getFont();g.setColor(Color.BLUE);//画笔颜色g.drawLine(100, 100, 300, 300);//线g.drawRect(100, 100, 300, 300);//矩形g.drawOval(100,100, 300, 300);//团员g.fillRect(100, 100, 40, 40);//实心矩形g.drawImage(ball, 0, 0, null);//画图片g.setColor(Color.red);g.setFont(new Font("宋体",Font.BOLD,50));//字体g.drawString("我在画图形", 200, 200);//文字g.setColor(color);*/g.drawImage(bgImage, 0, 0, null);//画地球位置/*g.drawImage(pImage, pImageX, pImageY, null);//画飞机位置pImageX++;//飞机移动*/plane.drawSelf(g);//画飞机//shell.draw(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();//结束时间chixu=(int)((endTime.getTime()-startTime.getTime())/1000);//持续时间}bao.draw(g);}if(!plane.live)//计算时间,没有碰撞{g.setColor(Color.red);//字颜色颜色Font font=new Font("宋体", Font.BOLD, 50);g.setFont(font);//改字体g.drawString("持续时间是:"+chixu+"秒", (int)plane.x, (int)plane.y);//画持续时间}}g.setColor(color);//回复原先字体}//反复的重画窗口,实现移动class PaintThread extends Thread{@Overridepublic void run() {// TODO Auto-generated method stubsuper.run();while(true){repaint();//重画try {Thread.sleep(40);//停止时间}catch(InterruptedException e){e.printStackTrace();}}}}//键盘监听的内部类class KeMonitor extends KeyAdapter{@Overridepublic void keyReleased(KeyEvent e) {//抬起那个键super.keyTyped(e);//System.out.println("抬起"+e.getKeyCode());//获取抬起的那个键plane.minusDirection(e);}@Overridepublic void keyPressed(KeyEvent e) {//按下那个键super.keyPressed(e);//System.out.println("按下"+e.getKeyCode());//获取按下的那个键plane.addDirection(e);}}//初始化窗口public void launchFrame(){this.setTitle("王硕作品");//创建this.setVisible(true);//显示this.setSize(Constant.GAME_WIDE, Constant.GAME_HEIGHT);//大小this.setLocation(300, 200);//位置this.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {//关闭时候操作// TODO Auto-generated method stubSystem.exit(0);//结束虚拟}});new PaintThread().start();//启动线程addKeyListener(new KeMonitor());//给窗口添加键盘监听//初始化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 offScrImage=null;public void update(Graphics g){if(offScrImage==null)offScrImage=this.createImage(Constant.GAME_WIDE, Constant.GAME_HEIGHT);Graphics gOffGraphics=offScrImage.getGraphics();paint(gOffGraphics);g.drawImage(offScrImage, 0, 0, null);}}
package 飞机小游戏;import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;//飞机类
public class Plane extends GameObject{boolean shang,xia,zuo,you;int speed=10;boolean live=true;public void drawSelf(Graphics g){if(live)//判断碰撞{g.drawImage(img, (int)x, (int)y, null);if(zuo)x-=speed;//增加减少常量if(you)x+=speed;if(shang)y-=speed;if(xia)y+=speed;}else {}}public Plane(Image img,double x,double y){this.img=img;this.x=x;this.y=y;this.speed=10;this.width=img.getWidth(null);this.height=img.getHeight(null);}//按下某个键,增加相应方向public void addDirection(KeyEvent e){switch(e.getKeyCode()){case KeyEvent.VK_LEFT:zuo=true;break;case KeyEvent.VK_UP:shang=true;break;case KeyEvent.VK_RIGHT:you=true;break;case KeyEvent.VK_DOWN:xia=true;break;}}//按下某个键,取消相应方向public void minusDirection(KeyEvent e){switch(e.getKeyCode()){case KeyEvent.VK_LEFT:zuo=false;break;case KeyEvent.VK_UP:shang=false;break;case KeyEvent.VK_RIGHT:you=false;break;case KeyEvent.VK_DOWN:xia=false;break;}}}
package 飞机小游戏;import java.awt.Color;
import java.awt.Graphics;//炮弹类
public class Shell extends GameObject
{double dergree;//随机角度public Shell(){x=200;y=200;width=10;height=10;speed=2;//移动速度dergree=Math.random()*Math.PI;//随机角度[0~2pi]}public void draw(Graphics g){Color color=g.getColor();g.setColor(Color.YELLOW);//点g.fillOval((int)x, (int)y, width, height);//实心点//沿任意角度去飞x+=speed*Math.cos(dergree);y+=speed*Math.sin(dergree);if(x<0||x>Constant.GAME_WIDE-width)dergree=Math.PI-dergree;if(y<30||y>Constant.GAME_HEIGHT-height)dergree=-dergree;g.setColor(color);}}
package 飞机小游戏;
//工具类
//返回图像对象
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(){}//返回指定路径的图片对象public static Image getImage(String path){BufferedImage bi=null;try {URL url=GameUtil.class.getClassLoader().getResource(path);bi=ImageIO.read(url);} catch (IOException e){e.printStackTrace();}return bi;}}
package 飞机小游戏;
//游戏物体的父类,解决物体的位置、边缘距离、图片、速度import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;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() {super();}//返回物体所在矩形,便于后续碰撞检测public Rectangle getRect(){return new Rectangle((int)x, (int)y,width,height);}}
package 飞机小游戏;
//爆炸类import java.awt.FontFormatException;
import java.awt.Graphics;
import java.awt.Image;public class Explode {double x,y;static Image images[]=new Image[16];static {for(int i=0;i<16;i++)//加载图形{images[i]=GameUtil.getImage("images/explode/e"+(i+1)+".gif");images[i].getWidth(null);}}int count;public void draw(Graphics g){if(count<=15){g.drawImage(images[count], (int)x, (int)y, null);//画图形count++;}}public Explode(double x, double y) {super();this.x = x;this.y = y;}}
package 飞机小游戏;
//常量类
public class Constant {public static final int GAME_WIDE=570;//宽public static final int GAME_HEIGHT=613;//高}

java打飞机小游戏(跟着网上视频写到)相关推荐

  1. java swing飞机大战游戏(源码+视频+文档+ppt)

    该项目是由Java swing实现的一款小游戏飞机大战,模仿的是微信版的飞机大战之打飞机小游戏,可在Java环境下运行,jdk版本不限,非常适合Java学习者参考学习,此外附带有视频导入教程,手把手教 ...

  2. Java打飞机小游戏(附完整源码)

    写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习.java确实不适合写桌面应用,这里只是通过这个游戏让大家理解oop面向对象编程的过程,纯属娱乐.代码写的很 ...

  3. Java打飞机小游戏

    飞机大战脚本组成 1.有一个所有物体的父物体GameObject,然后就是一堆物体继承于他,等到他的属性于函数. 2.窗口组件 3.工具脚本(负责做一些杂事和存放图片) 代码 GameObject p ...

  4. JAVA实现飞机小游戏

    通过该项目让我对什么是面向对象思想有了深刻的认识,对监听器,多线程开发,缓冲区处理,锁等有了深入了解. 1.先将UI界面类构造出来 ```java public class UI {public vo ...

  5. 用JAVA写个飞机小游戏玩玩吧

    闲来无事写了个飞机小游戏. 设定很简单,子弹打到飞机就结束游戏. 实现步骤如下,有问题可以评论区讨论: 首先建立一个PlayGame项目和它之下的包: MyGameFrame(游戏实现)类: pack ...

  6. Java飞机小游戏制作简单实现详细小结

    567881@ftJava小游戏开发 Java飞机小游戏制作简单实现小结 本人原来是个技术小白,寒假我跟着高淇老师的Java300集开始自学Java,跟着做了一个飞机大战小游戏,已经实现了飞机的自由移 ...

  7. Java Swing 经典小游戏《飞机大战》———— (四)碰撞检测 游戏状态与得分 玩家升级

    前期回顾 Java Swing 经典小游戏<飞机大战>---- (一)获取素材,创建窗口,添加滚动背景,双缓冲 Java Swing 经典小游戏<飞机大战>---- (二)玩家 ...

  8. Java版打飞机小游戏

    放假写的一个Java端打飞机小游戏. 复习到的知识点有:java图形界面,多线程,集合框架等. 主要的收获是知道了处理图层的方式,即JLayeredPane层次面板,主要思路 如下: 1.       ...

  9. 编程语言用 Java 开发一个打飞机小游戏(附完整源码)

    编程语言用 Java 开发一个打飞机小游戏(附完整源码) 上图 写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习.java确实不适合写桌面应用,这里只是通过 ...

最新文章

  1. FPGA开发中全局复位置位(GSR)
  2. 获取父页面URL的参数对应值及左对齐字符串
  3. 最小表示法 最大表示法
  4. 微信小程序访问云数据库
  5. The Distinguish of the share or static lib in MFC
  6. 【数位DP】B-number(HDU 3652)
  7. 【线段树】Segment Tree
  8. 转:【HTTP】常见错误码说明
  9. 拓端tecdat|matlab使用分位数随机森林(QRF)回归树检测异常值
  10. 对象不支持“attachEvent”属性或方法的解决办法
  11. 关于工作后定居城市的思考以及房价…
  12. mysql路由和MAH
  13. 使用NODEJS+REDIS开发一个消息队列以及定时任务处理
  14. On children
  15. Codeforce Cthulhu
  16. python之pythonnet
  17. mondrian 性能优化
  18. Storage事件无法触发解决
  19. 【转】MATLAB R2018a for Mac
  20. SLAM学习:DWA算法原理和编程实现(PYTHON)

热门文章

  1. Nodejs——setInterval设置停止的次数和时间
  2. Androd - 自定义view了解与应用
  3. Chrome自签名证书配置
  4. 在旧计算机上增加储存空间,手机老显示存储空间不足怎么办?三大方式让你增加有效使用空间...
  5. java文件转换为二进制_Java文件到二进制转换
  6. 在cmd中运行.java文件
  7. idea查看mysql版本号_如何查看 mysql 的版本号
  8. java后端分布式框架路线图
  9. js延迟执行dom操作(函数节流)
  10. 黑马头条-day02