本文实例为大家分享了java实现雷霆战机的具体代码,供大家参考,具体内容如下
GameFame.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
package cn. tx; import javax.swing.*; import java.awt.*; import java.awt.image.BufferedImage; import java.util.Random; import java.util.Vector; class GameFrame extends JFrame { HeroPlane heroPlane; //定义子弹的集合 Vector<Bullet> bullets = new Vector<>(); //敌机集合 Vector<EnemyPlane> 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
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; } if (right){ x += speed; } try { Thread.sleep( 10 ); } catch (InterruptedException e) { e.printStackTrace(); } } } } |
Player
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
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 ); } catch (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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
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; } } |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_54393060/article/details/122849462