基于Java制作一个好玩的打飞机游戏

目录
  • 1.效果图
  • 2.项目整体构造
  • 3.主类代码展示
  • 4.飞机类代码展示
  • 5.炮弹类代码展示
  • 6.爆炸类代码展示

1.效果图

2.项目整体构造

3.主类代码展示

public class MyGameFrame  extends  Frame {
    
    Image   planeImg  = GameUtil.getImage("images/plane.png");
    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;   //游戏持续的时间
    
    //@Override
    public void paint(Graphics g) {        //自动被调用。  g相当于一只画笔
        Color   c =  g.getColor();
        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);
            }
            
        }
        
        g.setColor(c);
    }
    
    
    //帮助我们反复的重画窗口!
    class  PaintThread  extends  Thread  {
        //@Override
        public void run() {
            while(true){
                repaint();        //重画
                
                try {
                    Thread.sleep(40);       //1s=1000ms
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }        
            }
        }
        
    }
    
    //定义键盘监听的内部类
    class   KeyMonitor extends  KeyAdapter  {

        //@Override
        public void keyPressed(KeyEvent e) {
            plane.addDirection(e);
        }

        //@Override
        public void keyReleased(KeyEvent 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() {
            //@Override
            public 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();
        }
        
    }

4.飞机类代码展示

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;    //y = 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;
        }
    }

5.炮弹类代码展示

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;
        }

6.爆炸类代码展示

static {
        for (int i = 0; i < 16; i++) {
            imgs[i] = GameUtil.getImage("images/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;
    }

到此这篇关于基于Java制作一个好玩的打飞机游戏的文章就介绍到这了,更多相关Java打飞机游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java编写实现坦克大战小游戏

    本文实例为大家分享了Java实现坦克大战小游戏的具体代码,供大家参考,具体内容如下 创作背景:n年前的学期末课题设计,从b站上学的,一个代码一个代码敲出来的. 小游戏介绍: 红色坦克是我们的操纵坦克,黑色是敌人坦克.上下左右键控制坦克移动方向按ctrl键发射炮弹红色坦克可以穿墙,黑色不可以 具体页面如下: 奉上全部源代码: Tank.java import java.awt.*; import java.awt.event.*; import java.util.*; public class

  • Java递归实现迷宫游戏

    目录 1.问题由来 2.问题的描述 3.思路分析 4.代码实现 5.结果输出 1.问题由来 迷宫实验是取自心理学的一个古典实验.在该实验中,把一只老鼠从一个无顶大盒子的门放入,在盒中设置了许多墙,对行进方向形成了多处阻挡.盒子仅有一个出口,在出口处放置一块奶酪,吸引老鼠在迷宫中寻找道路以到达出口.对同一只老鼠重复进行上述实验,一直到老鼠从入口到出口,而不走错一步.老鼠经多次试验终于得到它学习走迷宫的路线. 2.问题的描述 有一个迷宫地图,有一些可达的位置,也有一些不可达的位置(障碍.墙壁.边界)

  • Java实现年兽大作战游戏详解

    目录 前言 一.玩法介绍 二.代码介绍 2.1 程序入口[Frame] 2.2 构造器[GamePanel] 2.3 游戏逻辑实现[GamePanel] 2.4 游戏的血液[InitProcessor] 2.5 实体类[FireworksDO][FlowersDO] 2.6 图片素材 三.总结 前言 春节要到了,看惯了前端各种小游戏,确实做得很好,很精致.但是我也要为后端程序员稍微做一点贡献,做一款java版本的[年兽大作战]. 这个游戏加上编写文章,上班摸鱼时间加上回家的空闲时间,大概花了三天

  • Java实现俄罗斯方块小游戏源码

    本文实例为大家分享了Java实现俄罗斯方块小游戏的具体代码,供大家参考,具体内容如下 一.最终效果 二.功能需求 1. 在二维平面里面用各种随机产生的方块堆积木,每满一行消去一行,当达到顶部时,游戏结束.2. 通过方向键来控制方块转动,左移,右移和直落.3. 方块下落统一设置蓝色,接触底部变粉色.4. 计算分数,分数是由方块的类型决定的,每堆积一个方块就把分数累加到总分中.5. 游戏有开始.重新开始.降低提高级数(速度).暂停.退出 三.程序实现 这个是最基础的方块素材 package 俄罗斯方

  • java实现简单猜拳小游戏

    本文实例为大家分享了java实现猜拳小游戏的具体代码,供大家参考,具体内容如下 User.java import java.util.Scanner; public class User { String name; int score; public int showFist(){ System.out.println ("请出拳:1.剪刀\t2.石头\t3.布"); Scanner input=new Scanner ( System.in ); int choice=input.

  • 微信游戏打飞机游戏制作(java模拟微信打飞机游戏)

    复制代码 代码如下: package com.beancore.ui; import java.awt.BorderLayout;import java.awt.Container;import java.awt.Dimension;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.IOException;import java

  • Java实现打飞机小游戏(附完整源码)

    写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习.java确实不适合写桌面应用,这里只是通过这个游戏让大家理解oop面向对象编程的过程,纯属娱乐.代码写的很简单,也很容易理解,并且注释写的很清楚了,还有问题,自己私下去补课学习. 效果如下 完整代码 敌飞机 import java.util.Random; 敌飞机: 是飞行物,也是敌人 public class Airplane extends FlyingObject implements Enemy

  • 基于Java制作一个好玩的打飞机游戏

    目录 1.效果图 2.项目整体构造 3.主类代码展示 4.飞机类代码展示 5.炮弹类代码展示 6.爆炸类代码展示 1.效果图 2.项目整体构造 3.主类代码展示 public class MyGameFrame  extends  Frame {          Image   planeImg  = GameUtil.getImage("images/plane.png");     Image   bg  = GameUtil.getImage("images/bg.j

  • 基于Java制作一个简易的远控终端

    目录 远控终端的本质 Java制作简易的远控 1.环境 2.新建项目 3.新建一个Java类 4.编写程序 5.将项目打包成jar包并生成exe文件 附完整代码 远控终端的本质 1.服务端(攻击者)传输消息 ----> socket连接 ----> 客户端(被攻击者)接收消息 2.客户端执行消息内容(即执行服务端传回来的命令) 3.客户端传输执行结果 ----> socket连接 ----> 服务端显示命令执行结果 Java制作简易的远控 1.环境 环境:IntelliJ IDEA

  • 基于Java语言在窗体上实现飞机大战小游戏的完整步骤

    目录 小组项目 模块需求描述 总体开发思想 功能实现 1.登录与结束界面 2.播放音乐 3.子弹 运行测试 登陆界面 发射子弹 总结 小组项目 飞机大战:用 Java 语言在窗体上实现飞机大战小游戏,运行程序后,出现一个窗体,在窗体上用鼠标控制英雄机的移动,通过子弹打击敌机进行分数的计算,以及英雄机血量的计算等. 主要模块:登陆界面.音乐.子弹.敌机.英雄机.背景图.结束界面.BOSS 机.分数计算.血量计算. 负责模块:登陆界面.音乐.子弹.结束界面. 模块需求描述 登陆界面:运行程序后,弹出

  • 基于Flutter制作一个火箭发射动画

    目录 总结 前言 北京时间10月16日0时23分,神舟十三号飞船成功发射,目前三名航天员已经顺利进驻空间站,开始为期6个月的“太空差旅”生活. 国家的航天技术的突飞猛进也让岛上码农很自豪,今天看 Flutter 的动画知识,看到了 AnimatedPositioned 这个组件,可以用于控制组件的相对位置移动.结合这个神舟十三号的发射,灵机一动,正好可以使用AnimatedPositioned 这个组件实现火箭发射动画.话不多说,先上效果! 效果说明 这里其实是两张图片叠加,一张是背景地球星空的

  • 基于Flutter制作一个心碎动画特效

    目录 前言 实现步骤 1.绘制一个心 2.绘制心的裂痕 3.加入动画 完整代码 小结 前言 继续动画探索,今天用Flutter制作一个心碎的感觉,灵感来源于今天的股市,哎,心哇凉哇凉的.废话不多说,开始. 效果图先上: 实现步骤 1.绘制一个心 首先我们使用两段三阶贝塞尔曲线制作一个心型,这里因为需要实现心碎的效果,所以我们需要将心的两段用两段路径path进行绘制出来,效果: 绘制代码: canvas.translate(size.width / 2, size.height / 2); Pai

  • 利用java制作一个小的目录查询器的方法

    实例如下: import java.util.*; import javax.swing.*; import java.awt.*; import java.io.*; import java.awt.event.*; class MyWindow{ private Frame f1; private Button bt1; private TextField tx1; private TextArea tx2; MyWindow(){ init(); } public void init(){

  • 详解基于electron制作一个node压缩图片的桌面应用

    基于electron制作一个node压缩图片的桌面应用 下载地址:https://github.com/zenoslin/imagemin-electron/releases 项目源码Github:https://github.com/zenoslin/imagemin-electron 准备工作 我们来整理一下我们需要做什么: 压缩图片模块 获取文件路径 桌面应用生成 压缩图片 我们需要使用imagemin这个库来压缩图片,这里我们把这个库封装成压缩模块. const imagemin = r

  • 基于Java创建一个订单类代码实例

    这篇文章主要介绍了基于Java创建一个订单类代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需求描述 定义一个类,描述订单信息 订单id 订单所属用户(用户对象) 订单所包含的商品(不定数量个商品对象) 订单总金额 订单应付金额: 总金额500~1000,打折85折 总金额1000~1500,打折80折 总金额1500~2000,打折70折 总金额超过2000,打折65折 在此基础上,还要看用户的vip等级 用户vip等级为:一般会员,

  • 基于Java设计一个短链接生成系统

    目录 引言 短链接的原理 短链接怎么设计的 引言 相信大家在生活中,特别是最近的双十一活动期间,会收到很多短信,而那些短信都有两个特征,第一个是几乎都是垃圾短信,这个特点此处可以忽略不计,第二个特点是链接很短,比如下面这个: 我们知道,短信有些是有字数限制的,直接放一个带满各种参数的链接,不合适,另外一点是,不想暴露参数.好处无非以下: 太长的链接容易被限制长度 短链接看着简洁,长链接看着容易懵 安全,不想暴露参数 可以统一链接转换,当然也可以实现统计点击次数等操作 那背后的原理是什么呢?怎么实

  • 基于QT制作一个简易的传输文件小工具

    最近因为一个事情很恼火,因为办公需要用到企业微信,但是企业微信只能在一个电脑上登陆,所以当别人发文件给你的时候,你只能一个电脑接收,创建共享文件夹也很麻烦,每次都需要去访问,很麻烦.所以准备自己写一个文件传输小工具. 功能就是能实现文件的双向传输,即客户端能传给服务端,服务端可以传给客户端. 使用的tcp通信,其实就是发消息,但是组合数据我是借鉴了IT1995大神写的代码. 先看下效果图 可以看到既可以接受文件也可进行发送文件,只要2台电脑在统一局域网内,就可发送和接受数据. 本地文件下出现了一

随机推荐