java实现雷霆战机

网友投稿 318 2022-07-24


本文实例为大家分享了java实现雷霆战机的具体代码,供大家参考,具体内容如下

GameFame.java

package cn. tx;

import javax.swing.*;

import java.awt.*;

import java.awKYsBijsVSt.image.BufferedImage;

import java.util.Random;

import java.util.Vector;

class GameFrame extends JFrame {

HeroPlane heroPlane;

//定义子弹的集合

Vector bullets = new Vector<>();

//敌机集合

Vector enemys = new Vector<>();

GameFrame frame;

public GameFrame () {

frame = this;

//创建英雄机

heroPlane =new HeroPlane();

heroPlane.start();

//设置窗体的宽高

this.setSize(450, 730);

//标题

this.setTitle("雷霆战机");

this.setResizable(false);

this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

this.setLocationRelativeTo(null);

//窗口可见

this.setVisible(true);

new Thread(new Runnable() {

@Override

public void run() {

while (true) {

repaint();

try {

Thread.sleep(10);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}).start();

//产生敌机的线程

new Thread(new Runnable() {

//创建随机数的对象

Random r = new Random();

@Override

public void run() {

while (true){

//启动敌机

EnemyPlane enemyPlane = new EnemyPlane(r.nextInt(500), 0, frame);

enemyPlane.start();

//添加敌机的时候,让x轴随机

enemys.add(enemyPlane);

try{

Thread.sleep(500);

} catch (InterruptedException e){

e.printStackTrace();

}

}

}

}).start();

}

// *在窗口上画,内容,paint这 个画笔的方法在窗口初始化的时候会默认的执行

// @param g

public void paint (Graphics g) {

//System.out.println("绘制画板");

//两背景

BufferedImage image = (BufferedImage) this.createImage(this.getSize().width, this.getSize().height);

//高效缓存的画笔

Graphics bi = image.getGraphics();

//画背景

bi.drawImage(new ImageIcon("img/MAP02_01.png").getImage(),0,0,null);

//画战斗机

bi.drawImage(heroPlane.img, heroPlane.x,heroPlane.y, heroPlane.width,heroPlane.heigth,null);

//飞机发射炮弹

for (int i = 0; i < bullets.size(); i++) {

System.out.println(bullets);

Bullet bullet = bullets.get(i);

if(bullet.y > 0)

bi.drawImage(bullet.image, bullet.x,bullet.y -= bullet.speed, bullet.width,bullet.height, null);

else

bullets.remove(bullet);

}

//画敌机

for (int i = 0; i < enemys.size(); i++) {

System.out.println(enemys);

EnemyPlane ep = enemys.get(i);

if(ep.y < 730 )

bi.drawImage(ep.img, ep.x,ep.y += ep.speed, ep.width,ep.heigth,null);

else

enemys.remove(ep);

}

//生效

g.drawImage(image,0,0,null);

}

public static void main (String[]args){

GameFrame frame = new GameFrame();

Player player = new Player(frame);

frame.addKeyListener(player);

}

}

HeroPlane

package cn.tx;

import javax.swing.*;

import java.awt.*;

public class HeroPlane extends Thread{

//英雄机在画板上的位置

int x=200, y=600;

int width = 50, heigth = 50;

//飞机的速度

int speed = 10;

Image img = new ImageIcon("img/10011.png").getImage();

//定义方向键的标志

boolean up,down,left,right;

public HeroPlane() {

}

public HeroPlane(int x, int y, int width, int heigth, Image img) {

this.x = x;

this.y = y;

this.width = width;

this.heigth = heigth;

}

@Override

public void run() {

while (true){

if (up){

y -= speed;

}

if (down){

y += speed;

}

if (left){

x -= speed;

}

http:// if (right){

x += speed;

}

try {

Thread.sleep(10);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

Player

package cn.tx;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

//定义一个玩家

public class Player extends KeyAdapter {

GameFrame frame;

HeroPlane heroPlane;

public Player(GameFrame frame) {

this.frame=frame;

}

public void keyPressed(KeyEvent e) {

int keyCode = e.getKeyCode();

//38、40、37、39

switch (keyCode){

case 38:

frame.heroPlane.up = true;

break;

case 40:

frame. heroPlane.down = true;

break;

case 37:

frame. heroPlane.left = true;

break;

case 39:

frame. heroPlane.right = true;

break;

case 66:

addBullut();

break;

}

}

@Override

public void keyReleased(KeyEvent e) {

int keyCode = e.getKeyCode();

//38、40、37、39

switch (keyCode){

case 38:

frame.heroPlane.up = false;

break;

case 40:

frame. heroPlane.down = false;

break;

case 37:

frame. heroPlane.left = false;

break;

case 39:

frame. heroPlane.right = false;

break;

}

}

public void addBullut(){

frame.bullets.add(new Bullet( frame.heroPlane.x+5, frame.heroPlane.y - 20));

}

}

EnemyPlane

package cn.tx;

import javax.swing.*;

import java.awt.*;

public class EnemyPlane extends Thread {

public GameFrame gf;

//子弹的坐标,大小速度

public int x, y;

public int width = 50;

public int heigth = 50;

public int speed = 2;

public Image img = new ImageIcon("img/10021.png").getImage();

public EnemyPlane(int x, int y, GameFrame gf) {

super();

this.x = x;

this.y = y;

this.gf = gf;

}

public EnemyPlane(int x, int y, int width, int heigth, GameFrame gf) {

super();

this.x = x;

this.y = y;

this.width = width;

this.heigth = heigth;

this.gf = gf;

}

//玛丽飞翔的逻辑;移动的逻辑都在这里。

public void run() {

while (true) {

//向左走

if (hit()) {

System.out.println("hit................");

this.speed = 0;

this.img = new ImageIcon("img/300350.png").getImage();

try {

this.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

gf.enemys.remove(this);

break;

}

if (this.y >= 760) {

break;

}

try {

this.sleep(10);

} catcKYsBiJsVSh (InterruptedException e) {

e.printStackTrace();

}

}

}

//检测碰撞

public boolean hit() {

// swing在水中,人家已经提供了

Rectangle myrect = new Rectangle(this.x, this.y, this.width, this.heigth);

Rectangle rect = null;

for (int i = 0; 1 < gf.bullets.size(); i++) {

Bullet bullet = gf.bullets.get(i);

System.out.println("test hit");

rect = new Rectangle(bullet.x, bullet.y - 1, bullet.width, bullet.height);

//碰撞检测

if (myrect.intersects(rect)) {

return true;

}

}

return false;

}

@Override

public String toString() {

return "EnemyPlane{" +

"x=" + x +

", y=" + y +

", width=" + width +

", height=" + heigth +

'}';

}

}

Bullet

package cn.tx;

import javax.swing.*;

import java.awt.*;

public class Bullet {

//在面板上的坐标

int x, y;

int width= 50,height = 50;

//定义飞机默认速度

int speed = 5;

Image image = new ImageIcon("img/30022.png").getImage();

public Bullet(int x, int y) {

this.x = x;

this.y = y;

}

public Bullet(int x, int y, int width, int height) {

this.x = x;

this.y = y;

this.width = width;

this.height = height;

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java并发编程ThreadLocalRandom类详解
下一篇:基于Springboot一个注解搞定数据字典的实践方案
相关文章

 发表评论

暂时没有评论,来抢沙发吧~