iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >java如何实现飞机大战小游戏
  • 688
分享到

java如何实现飞机大战小游戏

2023-07-01 05:07:49 688人浏览 薄情痞子
摘要

本篇内容介绍了“java如何实现飞机大战小游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!MyPanel类package &nb

本篇内容介绍了“java如何实现飞机大战小游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

MyPanel类

package  P;import java.awt.Font;import java.awt.Graphics;import java.awt.Point;import java.awt.Rectangle;import java.awt.event.MouseEvent;import java.awt.event.MouseMotionListener;import java.util.ArrayList;import java.util.List;import javax.sql.RowSetInternal;import javax.swing.ImageIcon;import javax.swing.JPanel;//xx.2//创建面板类,继承面板,实现移动监听事件public class MyPanel extends JPanel implements MouseMotionListener {    //private ImageIcon bjImage = new ImageIcon("img/bj.png");        //英雄机图片    private ImageIcon heroImage = new ImageIcon("img/头.png");         //显示loGo    //private ImageIcon logoImage = new ImageIcon("img/头.png");        //英雄机的宽高    private int width = heroImage.getIconWidth();    private int height = heroImage.getIconHeight();        //英雄机的坐标    private int x=180;    private int y=880;        //创建一个敌机的集合,用于展示多个敌机    List<Enemy> enemys = new ArrayList<>();    //存储子弹集合    List<Bullet> bullets = new ArrayList<>();    //存储爆炸对象集合    List<Bomb> bombs = new ArrayList<>();        //存储英雄机爆炸集合    List<HeroDead> heroDeads = new ArrayList<>();        private int number;//统计当前得分    private int m;//统计剩余血条量    //    MyPanel jp = new MyPanel() {//        {//            setBackground(Color.gray);// 设置面板背景颜色//        }            public MyPanel() {        //在构造方法中准备10个敌机        for(int i=0;i<10;i++){            enemys.add(new Enemy());        }    }        @Override    public void paint(Graphics g) { //用于绘制图片区域        super.paint(g);                //在窗口左侧展示打飞机得分        //设置字体: 参数1:字体家族, 参数2:字体样式:加粗   参数3:字体大小        g.setFont(new Font("宋体", Font.BOLD, 30));        g.drawString("当前得分:"+number, 5, 30);        g.drawString("发量(万根):"+(5-m), 5, 80);        //g.drawImage(null, x, y, getBackground(), getFocusCycleRootAncestor());                //绘制英雄机图片  参数1,图片  参数2和3:坐标        g.drawImage(heroImage.getImage(), x, y, null);                //g.drawImage(logoImage.getImage(), 19, 22, null);                //在绘图中显示10辆敌机        for(int i=0;i<enemys.size();i++){            Enemy enemy =  enemys.get(i);  //获取敌机对象            enemy.drawImage(g);     //然后分别展示        }                //展示子弹集合的图片        for (int i = 0; i < bullets.size(); i++) {            Bullet bullet = bullets.get(i);  //取出子弹对象            bullet.drawImage(g);        }                //展示爆炸集合的图片        for(int i=0;i<bombs.size();i++){            Bomb bomb = bombs.get(i);            bomb.drawImage(g);        }                //展示英雄机的销毁图片        for(int i=0;i<heroDeads.size();i++){            HeroDead heroDead = heroDeads.get(i);            heroDead.drawImage(g);        }            }    @Override    public void mouseDragged(MouseEvent e) {        //System.out.println("鼠标移动并拖拽触发");                //鼠标拖拽时,需要将英雄机也带着移动(只需改变x轴和y轴)        x = e.getX()-width/2;  //英雄机的移动,随着鼠标触发移动的        y = e.getY()-height/2;  //鼠标指定到英雄机中间位置                repaint();  //重新绘制图片    }    @Override    public void mouseMoved(MouseEvent e) {        //System.out.println("鼠标移动的触发..");                //鼠标移动时,需要将英雄机也带着移动(只需改变x轴和y轴)        x = e.getX()-width/2;  //英雄机的移动,随着鼠标触发移动的        y = e.getY()-height/2;  //鼠标指定到英雄机中间位置                repaint();  //重新绘制图片    }    //L-4. 创建子弹类Bullet,操作与敌机类类似    public void init() {        //定义一个标记,循环了自定义的次数后,才去添加,这样子弹数量会变少        int flag = 0;        while(true) { //循环地跑,模拟依次移动的效果            flag++;  //            if(flag==50) {  //控制子弹数量                              bullets.add(new Bullet(x+width/2, y)); //就是从英雄级的x,y轴位置发射子弹的                           flag=0;  //又回到0,依次计算15次              //System.out.println("子弹数量:"+ bullets.size());            }                                    //展示子弹,让子弹飞起来            for(int i=0;i<bullets.size();i++) {                 Bullet bullet = bullets.get(i);  //取出对象                 if(i%2!=0)//设置子弹左右发射                 bullet.move();                   else                 bullet.move1();//移动子弹位置                                                   //如果子弹移动到y轴为0,则移除掉                 if(bullet.getY()<0){                     bullets.remove(bullet);  //移除子弹对象                 }            }            //xx.3.            //敌机循环移动..            for(int i=0;i<enemys.size();i++) {                Enemy en = enemys.get(i);                en.move();  //循环地移动每一架敌机y轴位置                                                //超出屏幕范围后,需要移除,并重新添加一个对象                if(en.getY()>GameMain.HEIGHT) {                    //int count1=enemys.size();                    enemys.remove(en);   //移除对象                                        enemys.add(new Enemy());  //重新再创建对象                }                            //L 3-4                    //在敌机的循环中,再继续循环子弹; 需要判断是否有子弹和敌机重叠了,                //则移除敌机对象,重新添加,移除子弹;如果有则添加爆炸对象                for(int j=0;j<bullets.size();j++){                    Bullet bu = bullets.get(j);                    if(isHit(en,bu)){ //碰撞的判断                        enemys.remove(en);  //移除敌机,并重新new一个                        enemys.add(new Enemy());                                                bullets.remove(bu);  //移除子弹                                                //添加的爆炸位置和敌机位置一致                        bombs.add(new Bomb(en.getX(), en.getY()));                                                number += 10; //爆炸后,累加得分                    }                }                //zz-6                //判断英雄机与敌机的碰撞(英雄机的消亡)                if(isHit(en)){                    System.out.println("进入英雄机爆炸...");                    //敌机的对象移除                    enemys.remove(en);                                        //英雄机爆炸图片位置应该与英雄机重叠                    heroDeads.add(new HeroDead(x, y));                    for(m=0;m<=heroDeads.size();m++) {                        while(heroDeads.size()==5) {                            return;                         }                    }                      //游戏结束,跳出死循环                }            }            //L-5            //将爆炸的所有对象,过一段时间则干掉            for(int i=0;i<bombs.size();i++){                Bomb bomb = bombs.get(i);                bomb.move();  //计算次数,统一循环多少次后,再干掉                                if(bomb.getCount()>6){                    bombs.remove(bomb);  //在循环的一定范围后,可以移除爆炸了                }            }                        //xx.2            //每次的移动都需要停顿一下            try {                Thread.sleep(6);    //单位:毫秒  睡眠6毫秒            } catch (InterruptedException e) {                e.printStackTrace();            }                         repaint();  //重新绘制图片        }    }                 //zz-6     //英雄机与敌机的碰撞    private boolean isHit(Enemy en) {        //英雄机的碰撞区域        Rectangle rect = new Rectangle(x, y, width, height);        //碰撞点的位置,是在敌机的中心点        Point point = new Point(en.getX()+en.getWidth()/2, en.getY()+en.getHeight()/2);                return rect.contains(point);    }            //L-5    private boolean isHit(Enemy en, Bullet bu) {        //填充敌机的碰撞区域        Rectangle rect = new Rectangle(en.getX(), en.getY(), en.getWidth(), en.getHeight());        //将子弹的位置设置在中间        Point point = new Point(bu.getX()+bu.getWidth()/2, bu.getY()+bu.getHeight()/2);        //如果位置有重叠,返回true        return rect.contains(point);    }}

HeroDead类

package  P;import java.awt.Graphics;import javax.swing.ImageIcon;public class HeroDead {    private ImageIcon heroImage = new ImageIcon("img/爆炸.gif");    private int width = heroImage.getIconWidth();    private int height = heroImage.getIconHeight();    private int x;    private int y;                public ImageIcon getHeroImage() {        return heroImage;    }    public void setHeroImage(ImageIcon heroImage) {        this.heroImage = heroImage;    }    public int getWidth() {        return width;    }    public void setWidth(int width) {        this.width = width;    }    public int getHeight() {        return height;    }    public void setHeight(int height) {        this.height = height;    }    public int getX() {        return x;    }    public void setX(int x) {        this.x = x;    }    public int getY() {        return y;    }    public void setY(int y) {        this.y = y;    }    public HeroDead(int x,int y){        this.x=x;        this.y=y;    }    public void drawImage(Graphics g) {        g.drawImage(heroImage.getImage(), x, y, null);    }}

GameMain类

package  P;import java.awt.Color;import javax.swing.BorderFactory;import javax.swing.JFrame;//游戏入口类public class GameMain {    static final int WIDTH = 860;  //设置静态常量,作为状态值使用    static final int HEIGHT = 660;    public static void main(String[] args) {        JFrame jFrame = new JFrame();  //实例化顶级窗口类        jFrame.setSize(WIDTH, HEIGHT);  //设置宽高像素        jFrame.setTitle("小秃头历险记");  //设置标题        jFrame.setLocationRelativeTo(null);  //设置居中效果        //JFrame.EXIT_ON_CLOSE: 状态值  3        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口的同时,把程序关闭                //在窗口中,加入面板        MyPanel pl = new MyPanel();        pl.setBackground(Color.pink);        pl.setBorder(BorderFactory.createLineBorder(Color.cyan, 3));        jFrame.add(pl);  //添加面板组件        jFrame.addMouseMotionListener(pl);  //添加鼠标移动事件                  jFrame.setVisible(true);  //使窗口可视化                pl.init();  //在面板中循环将组件跑起来    }}

Enemy类

package  P;import java.awt.Graphics;import java.util.Random;import javax.swing.ImageIcon;//创建敌机类public class Enemy {    //创建敌机图片,宽高,坐标等属性    private ImageIcon enemyImage = new ImageIcon("img/错误.png");        private int width = enemyImage.getIconWidth();    private int height = enemyImage.getIconHeight();        private int x;    private int y;        public ImageIcon getEnemyImage() {        return enemyImage;    }    public void setEnemyImage(ImageIcon enemyImage) {        this.enemyImage = enemyImage;    }    public int getWidth() {        return width;    }    public void setWidth(int width) {        this.width = width;    }    public int getHeight() {        return height;    }    public void setHeight(int height) {        this.height = height;    }    public int getX() {        return x;    }    public void setX(int x) {        this.x = x;    }    public int getY() {        return y;    }    public void setY(int y) {        this.y = y;    }    public Enemy(){        //创建随机类,在窗口宽高范围内随机        Random random = new Random();        //随机出来的敌机位置可以显示一半图片        x = random.nextInt(GameMain.WIDTH-width/2);        y = -random.nextInt(GameMain.HEIGHT-height/2);  //初始敌机位置为负数    }    public void drawImage(Graphics g) {        //绘制敌机图片        g.drawImage(enemyImage.getImage(), x, y, null);    }    public void move() {        y +=2;  //控制y轴速度    }}

Bullet类

package  P;import java.awt.Graphics;import javax.swing.ImageIcon;//创建子弹类public class Bullet {    //创建属性,子弹图片,宽高,位置    private ImageIcon bulletImage = new ImageIcon("img/aaa.gif");        private int width = bulletImage.getIconWidth();    private int height = bulletImage.getIconHeight();        private int x;    private int y;        public ImageIcon getBulletImage() {        return bulletImage;    }    public void setBulletImage(ImageIcon bulletImage) {        this.bulletImage = bulletImage;    }    public int getWidth() {        return width;    }    public void setWidth(int width) {        this.width = width;    }    public int getHeight() {        return height;    }    public void setHeight(int height) {        this.height = height;    }    public int getX() {        return x;    }    public void setX(int x) {        this.x = x;    }    public int getY() {        return y;    }    public void setY(int y) {        this.y = y;    }    public Bullet(int x,int y) { //x,y轴位置从外面传入(等于英雄级的位置)        this.x = x;        this.y = y;    }    public void drawImage(Graphics g) {        g.drawImage(bulletImage.getImage(), x, y, null);    }    public void move() {        x-=1;        y -= 2;  //让子弹y轴从下往上递减    }    public void move1() {        x+=1;        y -= 2;  //让子弹y轴从下往上递减    }}

爆炸类bomb类

package P;import java.awt.Graphics;import javax.swing.ImageIcon;//创建爆炸的实体了public class Bomb {    //爆炸的图片,宽高,位置属性    private ImageIcon bombImage=new ImageIcon("img/zz.png");    private int width = bombImage.getIconWidth();    private int height = bombImage.getIconHeight();    private int x;    private int y;        private int count;  //记录多少次数后爆炸        public ImageIcon getBombImage() {        return bombImage;    }    public void setBombImage(ImageIcon bombImage) {        this.bombImage = bombImage;    }    public int getWidth() {        return width;    }    public void setWidth(int width) {        this.width = width;    }    public int getHeight() {        return height;    }    public void setHeight(int height) {        this.height = height;    }    public int getX() {        return x;    }    public void setX(int x) {        this.x = x;    }    public int getY() {        return y;    }    public void setY(int y) {        this.y = y;    }    public int getCount() {        return count;    }    public void setCount(int count) {        this.count = count;    }    public Bomb(int x,int y){        this.x = x;        this.y = y;    }    public void drawImage(Graphics g) {        g.drawImage(bombImage.getImage(), x, y, null);    }    public void move() {        count++;    }    }

“java如何实现飞机大战小游戏”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: java如何实现飞机大战小游戏

本文链接: https://www.lsjlt.com/news/333446.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java如何实现飞机大战小游戏
    本篇内容介绍了“java如何实现飞机大战小游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!MyPanel类package &nb...
    99+
    2023-07-01
  • java实现飞机大战小游戏
    本文实例为大家分享了java实现飞机大战游戏的具体代码,供大家参考,具体内容如下 MyPanel类 package  P; import java.awt.Font; import...
    99+
    2024-04-02
  • java实现飞机大战游戏
    java实现飞机大战,供大家参考,具体内容如下 用Java写个飞机大战游戏练习一下,实现可播放游戏背景音乐和游戏的基本功能 设计 1、准备好相应的图片和背景音乐(.wav文件); 2...
    99+
    2024-04-02
  • Vue实现飞机大战小游戏
    目录使用 Vue 开发一个简略版的飞机大战小游戏一、实现思路二、所需知识点三、实现步骤使用 Vue 开发一个简略版的飞机大战小游戏 如题,假设你为了向更多访问你博客的人展示你的技术,...
    99+
    2024-04-02
  • javascript实现飞机大战小游戏
    本文实例为大家分享了javascript实现飞机大战游戏的具体代码,供大家参考,具体内容如下 文档结构如下 其中tool文件中只使用了随机数,audio中是存放的音乐文件,imag...
    99+
    2024-04-02
  • 用JS实现飞机大战小游戏
    本文实例为大家分享了JS实现飞机大战小游戏的具体代码,供大家参考,具体内容如下 小的时候玩的飞机大战感觉还蛮神奇,今天自己就学着做了一个 先制作好要做好的几步以及背景样式 var...
    99+
    2024-04-02
  • Python飞机大战小游戏
    游戏规则:键盘上下左右键控制飞机移动 游戏展示图片: 源码: 第一个py命名为:plane_main.py import pygamefrom plane_sprites import *class PlaneGame(object): ...
    99+
    2023-09-08
    python
  • javascript实现简单飞机大战小游戏
    本文实例为大家分享了javascript实现飞机大战小游戏的具体代码,供大家参考,具体内容如下 效果图 html文件 <!DOCTYPE html> <html ...
    99+
    2024-04-02
  • 原生JS实现飞机大战小游戏
    本文实例为大家分享了JS实现飞机大战小游戏的具体代码,供大家参考,具体内容如下 <html> <head> <title> 飞机大战 &...
    99+
    2024-04-02
  • python实现简单飞机大战小游戏
    为了熟悉Python基础语法,学习了一个经典的案例:飞机大战,最后实现效果如下: 实现步骤: ①下载64位对应python版本的pygame:pygame-1.9.6-cp38-c...
    99+
    2024-04-02
  • C++实现飞机大战游戏
    本文实例为大家分享了C++实现飞机大战游戏的具体代码,供大家参考,具体内容如下 代码是单线程执行,无界面,(博主下一步学习QT之后融入)还有待改进。先放张界面图: 话不多说 上...
    99+
    2024-04-02
  • JavaScript实现前端飞机大战小游戏
    本文实例为大家分享了JavaScript实现前端飞机大战的具体代码,供大家参考,具体内容如下 html: <!DOCTYPE html> <html>    ...
    99+
    2024-04-02
  • C语言实现飞机大战小游戏
    本文实例为大家分享了C语言实现飞机大战小游戏的具体代码,供大家参考,具体内容如下 技术原型 1、void gotoxy(int x, int y) 函数,该函数可以使光标去到(x,y...
    99+
    2024-04-02
  • jQuery实现飞机大战游戏
    目录一、效果图二、核心代码1.创建地图  2.用户选择飞机界面3.设置背景循环4.创建飞机5.创建敌机6.敌机移动7.设置敌机爆炸8.创建子弹9.检测子弹的移动(...
    99+
    2024-04-02
  • JavaScript实现飞机大战游戏
    本文实例为大家分享了canvas ,js 实现一个简单的飞机大战,供大家参考,具体内容如下 预览图: 代码: <!DOCTYPE html> <html>...
    99+
    2024-04-02
  • Python实战小游戏飞机大战详解
    目录导语​正文一、环境安装二、我方飞机三、敌方飞机四、控制键盘移动五、检测子弹碰撞六、效果图总结导语 “看见别人都那么努力,那么勤奋,那么意气风发地走在成功的道路上,你问...
    99+
    2024-04-02
  • Java如何实现飞机小游戏
    这篇文章主要讲解了“Java如何实现飞机小游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java如何实现飞机小游戏”吧!1,Constant;专门放常量package com....
    99+
    2023-07-01
  • Java实现飞机大战-II游戏详解
    目录前言主要设计功能截图代码实现启动类玩家飞机总结前言 《飞机大战-II》是一款融合了街机、竞技等多种元素的经典射击手游。华丽精致的游戏画面,超炫带感的技能特效,超火爆画面让你肾上腺...
    99+
    2024-04-02
  • 怎么用Python实现小游戏飞机大战
    本篇内容介绍了“怎么用Python实现小游戏飞机大战”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、环境安装本文是写的游戏代码,基于Pyg...
    99+
    2023-06-25
  • 如何使用原生JS实现飞机大战小游戏
    小编给大家分享一下如何使用原生JS实现飞机大战小游戏,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!本文实例为大家分享了JS实现飞机大战小游戏的具体代码,供大家参考,具体内容如下<html> <h...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作