在整个代码实现中,以GUI绘制界面,使用线程来控制敌方飞机和大boss的创建,采用键盘监听来实现控制小飞机的飞行方向和发射子弹。话不多说,先上最后效果图。

资源源码在这里
程序入口,界面主类:

public class GameWindow extends Frame {//窗口宽度public static int WINDOW_WIDTH = 1366;//窗口高度,单位像素public static int WINDOW_HEIGHT = 720;private static Image bgimg = null;public GameWindow(String title) {super(title);init();//播放背景音乐GameComponent.getBackgroundMusic().play();//启动线程重复画面板new Thread(new PrintPlane(this)).start();//启动线程创建UFOnew Thread(new CreateUfo(this)).start();}/*** 初始化方法*/private void init() {setBounds(GameUtil.getMidXY(WINDOW_WIDTH, POSITION.X),GameUtil.getMidXY(WINDOW_HEIGHT,POSITION.Y),WINDOW_WIDTH,WINDOW_HEIGHT);//设置窗口界面setVisible(true);//添加监听方法addListener();}public void addListener() {//窗口关闭的监听this.addWindowListener(new GameAdapter(this));// 键盘按键监听this.addKeyListener(new GameAdapter(this));}/*** 重写update方法,reprint被调用则就是调用的update方法* @param g*/@Overridepublic void update(Graphics g) {if (bgimg == null) bgimg = createImage(WINDOW_WIDTH,WINDOW_HEIGHT);//得到这个底片的画笔Graphics bg = bgimg.getGraphics();bg.setColor(Color.white);bg.fillRect(0,0,WINDOW_WIDTH,WINDOW_HEIGHT);print(bg);g.drawImage(bgimg,0,0,this);}/*** 窗口每变更一次,此方法则被调用一次* @param g*/@Overridepublic void paint(Graphics g) {//画背景图GameComponent.getBackground(this).showMe(g);//显示飞机GameComponent.getPlane(GameWindow.this).showMe(g);//画飞机的血条GameComponent.getPlaneBloodBar(this).showMe(g);//显示我方飞机的子弹List<Bullet> bulletList = GameComponent.getBulletList();for (int i = 0;i<bulletList.size();i++) {Bullet bullet = bulletList.get(i);bullet.showMe(g);}//画飞碟小怪List<Ufo> ufoList = GameComponent.getUfoList();for (int i = 0;i<ufoList.size();i++) {Ufo ufo = ufoList.get(i);ufo.showMe(g);}//画飞碟子弹List<UfoBullet> ufoBulletList = GameComponent.getUfoBulletList();for (int i = 0;i<ufoBulletList.size();i++) {UfoBullet ufoBullet = ufoBulletList.get(i);ufoBullet.showMe(g);}//画BossList<Boss> bossList = GameComponent.getBossList();for (int i = 0;i<bossList.size();i++) {Boss boss = bossList.get(i);boss.showMe(g);}//画Boss子弹List<BossBullet> bossBulletList = GameComponent.getBossBulletList();for (int i = 0;i<bossBulletList.size();i++) {BossBullet bossBullet = bossBulletList.get(i);bossBullet.showMe(g);}//画爆炸效果List<Bomb> bombList = GameComponent.getBombList();for (int i = 0;i<bombList.size();i++) {Bomb bomb = bombList.get(i);bomb.showMe(g);}//画消灭小怪的数目g.setColor(Color.black);g.drawString("消灭小怪数量:" + GlobalVariable.deadUfoCount,20,50);}public void addBullet(Bullet bullet) {GameComponent.addBullet(bullet);}public static void main(String[] args) {GameComponent.init();new GameWindow("飞机大战");}//内部类线程控制画窗口private class PrintPlane implements Runnable {private GameWindow gameWindow;public PrintPlane(GameWindow gameWindow) {this.gameWindow = gameWindow;}@Overridepublic void run() {//死循环一直画窗口的内容,实现动画效果。while (true) {gameWindow.repaint();}}}
}

游戏中组件的父类

public abstract class GameRole {//组件在窗口的位置protected int x;protected int y;//大小protected int width = 5;protected int height = 5;//是否活着,即确认窗口是否画该组件protected boolean isAlive;//显示组件的窗口protected GameWindow gameWindow;//组件在窗口显示自己的方法public abstract void showMe(Graphics g);public GameRole() {}public GameRole(int x, int y, int width, int height, boolean isAlive, GameWindow gameWindow) {this.x = x;this.y = y;this.width = width;this.height = height;this.isAlive = isAlive;this.gameWindow = gameWindow;}//组件移动的方法public abstract void move();//得到组件的外切矩形public Rectangle getRectangle(){return new Rectangle(x,y,width,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 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 boolean isAlive() {return isAlive;}public void setAlive(boolean alive) {isAlive = alive;}public GameWindow getGameWindow() {return gameWindow;}public void setGameWindow(GameWindow gameWindow) {this.gameWindow = gameWindow;}}

主角飞机类

package com.hyy.pojo;import com.hyy.enums.DIRECTION;
import com.hyy.main.GameWindow;
import com.hyy.utils.GameComponent;import java.awt.*;
import java.awt.event.KeyEvent;public class Plane extends GameRole{//飞机速度private int speed = 1;//飞机方向private boolean up,down,left,right;private DIRECTION dir = DIRECTION.STOP;//飞机上下飞动画索引private int index = 4;//血条private int hp = 355;public Plane() {}public Plane(int x, int y, int width, int height, boolean isAlive, GameWindow gameWindow) {this.x = x;this.y = y;this.width = width;this.height = height;this.isAlive = isAlive;this.gameWindow = gameWindow;}public Plane(int x, int y, boolean isAlive,int width, int height, int speed, GameWindow gameWindow) {this.x = x;this.y = y;this.width = width;this.height = height;this.isAlive = isAlive;this.speed = speed;this.gameWindow = gameWindow;}/*** 在窗口显示飞机*/public void showMe(Graphics g) {if (hp <= 0) isAlive = false;if (gameWindow != null && isAlive) {g.drawImage(GameComponent.getPlaneImage()[index],x,y,width,height,gameWindow);move();}}/*** 键盘按下的监听* @param e*/public void isPressed(KeyEvent e) {switch(e.getKeyCode()) {case KeyEvent.VK_W:up = true;break;case KeyEvent.VK_S:down = true;break;case KeyEvent.VK_A:left = true;break;case KeyEvent.VK_D:right = true;break;case KeyEvent.VK_J:if (isAlive) fire();break;}}/*** 发射子弹*/public void fire() {Bullet bullet = new Bullet(x + width, y + (height/2), true,10,10, gameWindow);gameWindow.addBullet(bullet);GameComponent.getPlaneShootMusic().play();}/*** 受伤*/public void injure(int injuryValue) {hp -= injuryValue;GameComponent.getPlaneBloodBar(gameWindow).setAllowance(hp);}/*** 键盘松开的监听* @param e*/public void isReleased(KeyEvent e) {switch(e.getKeyCode()) {case KeyEvent.VK_W:up = false;break;case KeyEvent.VK_S:down = false;break;case KeyEvent.VK_A:left = false;break;case KeyEvent.VK_D:right = false;break;}}/*** 设置飞机方向*/public void setDirection() {if (up && !down && !left && !right) dir = DIRECTION.UP;if (!up && down && !left && !right) dir = DIRECTION.DOWN;if (!up && !down && left && !right) dir = DIRECTION.LEFT;if (!up && !down && !left && right) dir = DIRECTION.RIGHT;if (up && !down && left && !right) dir = DIRECTION.LEFT_UP;if (!up && down && left && !right) dir = DIRECTION.LEFT_DOWN;if (up && !down && !left && right) dir = DIRECTION.RIGHT_UP;if (!up && down && !left && right) dir = DIRECTION.RIGHT_DOWN;if (!up && !down && !left && !right) dir = DIRECTION.STOP;}/*** 控制飞机移动*/public void move() {//其中的if语句限制了飞机的移动位置,防止飞机移动到屏幕范围外setDirection();switch (dir) {case UP:if (index > 0) index--;if (y > 30)y -= speed;break;case DOWN:if (index < 8) index++;if (y < (GameWindow.WINDOW_HEIGHT - 144))y += speed;break;case LEFT:if (x > 0)x -= speed;break;case RIGHT:if (x < (GameWindow.WINDOW_WIDTH - width))x += speed;break;case LEFT_UP:if (index > 0) index--;if (x > 0)x -= speed;if (y > 30)y -= speed;break;case LEFT_DOWN:if (index < 8) index++;if (x > 0)x -= speed;if (y < (GameWindow.WINDOW_HEIGHT - 144))y += speed;break;case RIGHT_UP:if (x < (GameWindow.WINDOW_WIDTH - width))x += speed;if (y > 30)y -= speed;break;case RIGHT_DOWN:if (x < (GameWindow.WINDOW_WIDTH - width))x += speed;if (y < (GameWindow.WINDOW_HEIGHT - 144))y += speed;break;}}public int getSpeed() {return speed;}public void setSpeed(int speed) {this.speed = speed;}public int getHp() {return hp;}public void setHp(int hp) {this.hp = hp;}
}

boss和小怪的实体类与主角飞机类似,不在一一贴代码了。

飞机大战小游戏的简介相关推荐

  1. 用C语言实现飞机大战小游戏

    我的个人博客:谋仁·Blog 该项目已上传至GitHub:点击跳转 文章目录 摘要 运行环境 整体功能思维导图 效果预览 具体功能的实现 图形界面:EasyX EasyX图形库简介 EasyX图形库的 ...

  2. python 飞机大战小游戏

    飞机大战小游戏,这里需要下载pygame模块 这是需要的素材,需要的自取: 上代码: import time import pygame from pygame.locals import *#检测事 ...

  3. 点击list view中一行内容可以在combox中显示_java版飞机大战小游戏详细教程(零基础小白也可以分分钟学会!)...

    一:游戏展示 飞机大战小游戏我们都玩过,通过移动飞机来打敌机,这里给大家展示一下游戏成果:呜呜呜由于gif只能上传5M大小,所以就不能给大家展示操作了,如果大家有兴趣可以自己自己做出来再玩哟. 这里面 ...

  4. 飞机大战小游戏(超详细)

    偷学Python之最后的项目二:飞机大战小游戏(超详细) 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志.--苏轼 甜甜先说 这次用Python中的pygame模块来完成一个飞机大战的小游戏:基本思 ...

  5. matlab飞机大战小游戏(第二版)

    第一版链接:https://blog.csdn.net/slandarer/article/details/88025006 游戏截图: ------------------------ 游戏动图: ...

  6. 使用小程序制作一个飞机大战小游戏

    此文主要基于微信小程序制作一个飞机大战小游戏,上手即用,操作简单. 一.创建小程序 二.页面实现 三.代码块 一.创建小程序 访问微信公众平台,点击账号注册. 选择小程序,并在表单填写所需的各项信息进 ...

  7. C语言—飞机大战小游戏

    哈工大经典C语言大作业-飞机大战小游戏,源码如下,已经通过编译获得评分19+ (满分20)当时还是太菜了呜呜呜. 可以给大家参考一下,好像本来是加了音乐的,但是你们可能没有对应的音乐MP3文件,所以如 ...

  8. 基于Java语言在窗体上实现飞机大战小游戏

    全套资料下载地址:https://download.csdn.net/download/sheziqiong/85594271 项目介绍 飞机大战:用 Java 语言在窗体上实现飞机大战小游戏,运行程 ...

  9. 【Java代码实现飞机大战小游戏】简单理解

    飞机大战 飞机大战小游戏历经10天完成,主要用到的就是我们面向对象部分的知识:类,封装,继承,多态,静态代码块等等内容+swing部分内容.所以即使你是java小白,也不用担心欧! 游戏说明:游戏有3 ...

最新文章

  1. nefu 118 n!后面有多少个0 算数基本定理,素数分解
  2. jmeter 不同场景 比例_在JMeter测试中如何根据业务场景来控制运行比例
  3. mysql大量数据合并_mysql中将多行数据合并成一行数据
  4. Python 爬虫是什么
  5. PHP正则表达式的快速学习方法
  6. 算法图解-----十种常用算法
  7. 从零开始的腾讯电脑管家下载安装配置教程
  8. itextsharp、Aspose.Words、Aspose.Cells联合使用
  9. 中国一共有多少个神仙?
  10. 迷茫的剑客----网站设计师! -----静水流深
  11. 软件测试——linux基础
  12. 重卡自动驾驶进入“正规战”
  13. 微信自定义分享--失效问题
  14. linux TC命令使用总结
  15. 使用Python异序词检测示例_清点法_排序法_蛮力法_计数法
  16. 通达信手机版分时图指标大全_通达信精选指标——主力潜伏中优化版
  17. 华为数通HCIA学习笔记之OSI参考模型TCP/IP模型
  18. 对称加密和非对称加密!
  19. 应用程序配置不正确,程序无法启动的问题小结
  20. Three.js点击地图动态标注

热门文章

  1. 计算机专业简历中的项目负责,计算机专业项目经历填写范文
  2. python有哪些库可以读写内存_使用Python学习win32库进行内存读写
  3. Python 繁体简体互相转换
  4. 达人评测i9 13900hx和i7 13700h对比差多少
  5. 李宏毅《机器学习》笔记 DAY4 深度学习反向传播
  6. windows计算机查看里设置,怎么让电脑像手机一样屏幕常亮呢,看这里,WIN10系统下如何设置电脑屏幕...
  7. 舆情监测关键词怎么确定及收集的方法
  8. 【AMD】FSR技术的源码编译过程
  9. 卡拉赞服务器延迟,魔兽世界怀旧服:卡拉赞测试被取消,tbc有可能延迟开放
  10. 语言常用c100单词,英语文化_夏普新款PW-C100-G电子词典测评_沪江英语