一丶窗口,常量,Image构造器

package tk.javazhangwei.util;import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class MyFrame  extends Frame {/*** 加载窗口*/public void launchFrame(){setSize(Constant.GAME_WIDTH, Constant.GAME_HEIGHT);setLocation(100, 100);setVisible(true);new PaintThread().start();  //启动重画线程addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}/**** * 双缓冲技术*/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);}/*** 定义一个重画窗口的线程类,是一个内部类* @author dell**/class PaintThread extends Thread {public void run(){while(true){repaint();try {Thread.sleep(40); //1s = 1000ms} catch (InterruptedException e) {e.printStackTrace();}   }}}
}
package tk.javazhangwei.util;/*** 游戏项目中用到的常量* @author dell**/
public class Constant {public static final int GAME_WIDTH = 500;public static final int GAME_HEIGHT = 500;}
package tk.javazhangwei.util;import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;public class GameUtil {private GameUtil(){}  //工具类最好将构造器私有了。public static Image getImage(String path){BufferedImage bi=null;try {URL u = GameUtil.class.getClassLoader().getResource(path);bi = javax.imageio.ImageIO.read(u);} catch (IOException e) {e.printStackTrace();}return bi;}
}

二丶游戏主窗口

package tk.zhangwei.games;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.util.ArrayList;
import java.util.Date;import tk.javazhangwei.util.Constant;
import tk.javazhangwei.util.GameUtil;
import tk.javazhangwei.util.MyFrame;
/**** 飞行游戏主窗口* @author zw**/
public class PlaneGameFrame extends MyFrame {Image bg = GameUtil.getImage("images/bg.jpg");Plane p = new Plane("images/plane.png", 230, 400);ArrayList bulletList = new ArrayList();//以后加上泛型Date startTime;Date endTime;Explode bao;int bulletNumber = 18;//子弹数目设定public void paint(Graphics g){g.drawImage(bg, 0, 0, null);p.draw(g);//遍历子弹for(int i=0;i<bulletList.size();i++){Bullet b = (Bullet)bulletList.get(i);b.draw(g);//检测跟飞机的碰撞boolean peng = b.getRect().intersects(p.getRect());if(peng){p.setLive(false);//飞机死掉if(bao==null){endTime = new Date();bao = new Explode(p.x,p.y);}bao.draw(g);break;}}if(!p.isLive()){printGG(g, "GAME OVER!", 50, 110, 200, Color.red);int gameTime = (int)((endTime.getTime() - startTime.getTime())/1000);//40行结束时间减去游戏开始printGG(g, "生存时间:"+gameTime+"秒", 20, 150, 250, Color.blue);switch (gameTime/10) {case 0:case 1:printGG(g, "游戏评分:★ ", 30, 140, 300, Color.blue);break;case 2:printGG(g, "游戏评分:★ ★", 30, 140, 300, Color.blue);break;case 3:case 4:printGG(g, "游戏评分:★ ★★", 30, 140, 300, Color.blue);break;case 5:printGG(g, "游戏评分:★ ★★★", 30, 140, 300, Color.blue);break;default:printGG(g, "游戏评分:★ ★★★★", 30, 140, 300, Color.blue);break;}}}/**** 封装飞机死后,打印窗口提示信息* @param g* @param str* @param size*/public void printGG(Graphics g,String str,int size,int x,int y,Color color){Color c = g.getColor();Font f = new Font("宋体", Font.BOLD, size);g.setFont(f);g.setColor(color);g.drawString(str, x, y);g.setColor(c);} public static void main(String[] args){new PlaneGameFrame().launchFrame();}public void launchFrame(){super.launchFrame();//继续使用父类,如果不使用,只会操作键盘监听//增加键盘监听addKeyListener(new KeyMonitor());//生成一堆子弹for(int i =0;i<bulletNumber;i++){          //生成子弹数目Bullet b = new Bullet();bulletList.add(b);}startTime = new Date();}//定义一个内部类,方便使用外部类的普通属性class KeyMonitor extends KeyAdapter{@Overridepublic void keyPressed(KeyEvent e) {System.out.println("按下"+e.getKeyCode());p.add(e);//调用键盘按下事件}@Overridepublic void keyReleased(KeyEvent e) {System.out.println("释放"+e.getKeyCode());p.reduce(e);//如果不调用这个方法,当你弹起这个按键,飞机一直会往那个方向飞,不会停止}}
}

三丶飞机

package tk.zhangwei.games;import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.lang.invoke.SwitchPoint;import tk.javazhangwei.util.GameUtil;
/**** 构造飞机方法* @author zw**/
public class Plane extends GameObject {Image img;int speed = 6;private boolean live = true;//默认为trueboolean left,up,right,down;public void draw(Graphics g){if(live){g.drawImage(img, (int)x, (int)y, null);move(); }}/** 八个方向的算法*/public void move(){    //给飞机增加移动属性if(left){x -=speed;}if(right){x +=speed;}if(up){y -=speed;}if(down){y +=speed;}}public void add(KeyEvent e){//键盘按下的操作switch (e.getKeyCode()) {case 37:left = true;break;case 38:up = true;break;case 39:right = true;break;case 40:down = true;break;default:break;}}public void reduce(KeyEvent e){//键盘谈起,禁止移动switch (e.getKeyCode()) {case 37:left = false;break;case 38:up = false;break;case 39:right = false;break;case 40:down = false;break;default:break;}}public Plane(String imgpath, double x, double y) {//传入参数,增加图片初始化this.img = GameUtil.getImage(imgpath);this.x = x;this.y = y;this.width = img.getWidth(null);this.height = img.getHeight(null);}public Plane(){}public boolean isLive() {return live;}public void setLive(boolean live) {this.live = live;}}

四丶子弹

package tk.zhangwei.games;import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;import tk.javazhangwei.util.Constant;
/*** 设置子弹* @author zw**/
public class Bullet extends GameObject{double degree;public Bullet(){degree = Math.random()*Math.PI*2;//设置随机角度,在0到360度之间x = Constant.GAME_WIDTH/2;y = Constant.GAME_HEIGHT/2;width = 10;height = 10;}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(y>Constant.GAME_HEIGHT-height||y<30){degree = -degree;}if(x<0||x>Constant.GAME_WIDTH-width){degree = Math.PI-degree;}g.setColor(c);}}

五丶爆炸效果

package tk.zhangwei.games;import java.awt.Graphics;
import java.awt.Image;import tk.javazhangwei.util.GameUtil;/**** 爆炸* @author zw**/
public class Explode {double x,y;static Image[] imgs = new Image[16];static{for(int i=0;i<=15;i++ ){imgs[i] = GameUtil.getImage("explode/e"+(i+1)+".gif");imgs[i].getWidth(null);}}int count;public void draw(Graphics g){if(count<=15){g.drawImage(imgs[count], (int)x, (int)y, null);count++;    }}public Explode(double x,double y){this.x = x;this.y = y;}}

六丶GameObject

package tk.zhangwei.games;import java.awt.Rectangle;public class GameObject {double x,y;//子弹初始位置double degree;int speed = 3;int width ;int height ;//获取子弹矩形public Rectangle getRect(){Rectangle r = new Rectangle((int)x, (int)y, width, height);return r;}public GameObject(double x, double y, double degree, int speed, int width, int height) {super();this.x = x;this.y = y;this.degree = degree;this.speed = speed;this.width = width;this.height = height;}public GameObject(){}
}

七丶运行游戏

Java编写飞行游戏相关推荐

  1. 用java编写围棋游戏

    好的,我来为您提供一些关于如何使用 Java 编写围棋游戏的指导. 首先,你需要了解围棋的规则和游戏流程.围棋是一种棋类游戏,游戏中有两名玩家,分别为黑棋和白棋.每个玩家可以在棋盘上的任意位置下棋,目 ...

  2. 如何用java编写小游戏

    应一起学习java的众兄弟姐妹们的要求,对塔防游戏小程序做一个简单的说明,本人学习java两年时间,现在刚刚入职,虽然上班基本不用java swing相关的知识,但由于大学期间运用awt.swing编 ...

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

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

  4. java编写桌球游戏素材小球图片_你学不好Java还是有原因的!拿走这套Java系统教程,自学必备...

    很多同学都遇到过一种情况:就是无论自己怎么学Java,到头来发现学的都是皮毛,当真正去用python去做一个项目的时候,脑袋里面一片空白.完全不知道从何做起! 那是你没有系统的学过一次Java,现在的 ...

  5. 用java编写运行的小游戏_第一次用Java编写小游戏!

    哈哈,我又来发帖了- -话说好久没碰eclipse了,所以这次就给大家带来一个我的原创作品:Java猜拳!!! 先上效果: 1.PNG (13.21 KB, 下载次数: 34) 2016-1-24 1 ...

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

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

  7. java编写打字游戏_程序设计:简单字母打字游戏(JAVA编写)

    展开全部 /* 游戏开始,从天上62616964757a686964616fe78988e69d8331333262373266掉下10个有标号(字母)的炸弹, 下面有10颗子弹(就是可以按10个字母 ...

  8. java编写桌球游戏素材小球图片_Java|零基础开发桌球小游戏项目

    //桌球游戏开发 import java.awt.; import javax.swing.; public class BallGame2 extends JFrame { Image ball=T ...

  9. Java 编写大鱼吃小鱼游戏 窗体程序 完整源码

    今天为大家分享大鱼吃小鱼游戏开发与制作.整个系统界面漂亮,有完整得源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开发环境 开发语言为Java,开发环境Eclipse或者IDEA都可 ...

最新文章

  1. oracle exists语句
  2. 根证书和中间证书的区别
  3. 淘宝开源的代码质量检测工具!
  4. matlab错误103 577,小编为你作答win7系统安装MATLAB出现 license manager error 103错误的还原教程...
  5. 就业技术书文件表格_Word格式:工程预结算工作流程图及工作表单,附20余表格...
  6. hibernate get方法有执行sql但是后台拿不到_「6」进大厂必须掌握的面试题-Hibernate...
  7. Python_列表2
  8. RMAN 总括 组成 配置 检测
  9. Maven搭建SpringMVC+Hibernate项目详解
  10. 爬虫如何爬取微信公众号文章
  11. H5调用app原生接口
  12. 使用wepe U盘重装Windows系统
  13. 关于私信问题和时间管理的感悟
  14. 科研画图——流程图软件draw.io
  15. 如何系统学习知识图谱-胖子哥的实践经验分享
  16. 谷歌中国工程研究院原副院长王劲加盟百度
  17. Paper | Detail-revealing Deep Video Super-resolution
  18. unity webgl 手机端微信直接打开链接
  19. 2014计算机考研分数线,2014年全国统计算机考研各个大学录取分数线汇总.doc
  20. mysql Writing to net

热门文章

  1. 阿里云和华为云哪个好一点?
  2. 魔百盒m401a折腾Armbian+qinglong -- 1
  3. EPS Global与意法半导体(ST)达成合作
  4. Java 不死神兔案例
  5. vue-ssr的使用
  6. access课程均不及格_2014年全国计算机二级access上机考点 7
  7. ApacheDS 安装以及LDAPS配置(图文)
  8. GitHub 优秀的 Android 开源项目 - 让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) - 博客频道 - CSDN.NET
  9. 【sdx12】sdx12获取Serial Number操作方法及源码分享Serial Number的寄存器地址
  10. c语言结题报告事例,STITP结题报告.PDF