Java 飞翔的小鸟

前言

基于Java的飞翔小鸟游戏,本代码来自b站up主分享。本游戏所需的图片素材需要自己获取并下载,在此视频下,视频链接:【Java经典小游戏项目之飞翔的小鸟】 https://www.bilibili.com/video/BV1ou411o7br/?p=10&share_source=copy_web&vd_source=4611ec45767280678018f593c547e388。

 

 

启动入口

package com.bird.app;

import com.bird.main.GameFrame;

 

public class GameApp {

    public static void main(String[] args) {

        new GameFrame();

    }

}

 

1

2

3

4

5

6

7

8

9

 

 

 

主类

 

游戏主窗口类

package com.bird.main;

 

import static com.bird.util.Constant.*;

 

import java.awt.*;

import java.awt.event.*;

import java.awt.image.BufferedImage;

 

/**

 * 游戏的主窗口类,所有的关于游戏中绘制的内容都在此类中完成。

 */

public class GameFrame extends Frame {

 

    //实例化gamebackGround类

    private GameBackGround gameBackGround;

 

    //实例化Bird类

    private Bird bird;

 

    //实例化GameBarrierLayer类

    private GameBarrierLayer gameBarrierLayer;

 

    //实例化GameFrontGround类

    private GameFrontGround gameFrontGround;

 

 

    //存放图片的图片

    private BufferedImage buffimg = new BufferedImage(FRAM_WIDTH,FRAM_HEIGNT,BufferedImage.TYPE_4BYTE_ABGR);

 

 

    //构造方法中初始化一些参数

    public GameFrame(){

        //窗口是否可见

        setVisible(true);

        //窗口的大小

        setSize(FRAM_WIDTH,FRAM_HEIGNT);

        //窗口的标题

        setTitle(FRAM_TITLE);

        //窗口的初始化位置

        setLocation(FRAM_X,FRAM_Y);

        //窗口的大小不可改变

        setResizable(false);

 

 

        //窗口的关闭事件

        addWindowListener(new WindowAdapter() {

            @Override

            public void windowClosing(WindowEvent e) {

                System.exit(0);//结束程序

            }

        });

 

 

        //初始化游戏对象

        initGamg();

 

        new run().start();

 

        //添加按键监听

        addKeyListener(new KeyAdapter() {

            @Override

            public void keyPressed(KeyEvent e) {

                add(e);

            }

 

            @Override

            public void keyReleased(KeyEvent e) {

                minu(e);

            }

        });

 

 

 

    }

 

    //对游戏中的对象初始化

    public void initGamg(){

        gameBackGround = new GameBackGround();

        bird = new Bird();

        gameFrontGround = new GameFrontGround();

        gameBarrierLayer = new GameBarrierLayer();

    }

 

 

 

    class run extends Thread{

        @Override

        public void run() {

            while (true) {

                repaint();

                try {

                    Thread.sleep(33);

                } catch (InterruptedException e) {

                    e.printStackTrace();

                }

            }

        }

    }

 

 

    /**

     * 所有的我们需要绘制的内容都在此方法中进行调用绘制

     */

    @Override

    public void update(Graphics g) {

        if(bird.life){

            //得到图片的画笔

            Graphics graphics = buffimg.getGraphics();

 

            gameBackGround.draw(graphics);

            bird.draw(graphics);

            gameFrontGround.draw(graphics);

            gameBarrierLayer.draw(graphics,bird);

 

            //一次性的将图片绘制到屏幕中

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

        }else {

            String over = "游戏结束";

            g.setColor(Color.red);

            g.setFont(new Font("微软雅黑",1,60));

            g.drawString(over,180,250);

 

            String reset = "Space Reset Game";

            g.drawString(reset,25,350);

        }

    }

 

 

    //按键

    public void add(KeyEvent e){

        switch (e.getKeyCode()){

            case KeyEvent.VK_UP:

                bird.fly(1);

                break;

            case KeyEvent.VK_SPACE:

                if (bird.life == false) {

                    restart();

                }

                break;

        }

    }

 

 

 

    //抬键

    public void minu(KeyEvent e){

        switch (e.getKeyCode()){

            case KeyEvent.VK_UP:

                bird.fly(5);

                break;

        }

    }

 

    /**

     * 重置游戏

     */

    public void restart(){

        gameBarrierLayer.restant();

        bird.restartDraw();

    }

 

 

}

 

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

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

 

 

 

游戏前景类

package com.bird.main;

 

import com.bird.util.Constant;

import com.bird.util.GameUtil;

 

import java.awt.*;

import java.awt.image.BufferedImage;

import java.util.ArrayList;

import java.util.List;

import java.util.Random;

 

/**

 * 游戏的前景类

 */

public class GameFrontGround {

    //云彩的个数

    private static final int CLOUND_COUNT = 2;

    //存放云彩的容器

    private List<Cloud> clouds;

    //云彩的飞行速度

    private static final int CLOUNG_SPEED = 1;

    //使用到图片资源

    private BufferedImage[] img;

 

    //用于产生随机数

    private Random random;

 

    // 构造器初始化数据

    public GameFrontGround() {

        clouds = new ArrayList<>();

        img = new BufferedImage[CLOUND_COUNT

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值