好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

java实现雷霆战机

本文实例为大家分享了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

查看更多关于java实现雷霆战机的详细内容...

  阅读:21次