好得很程序员自学网

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

java使用GUI实现贪吃蛇游戏

本文实例为大家分享了java使用GUI实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下

整个代码分为三部分

1.游戏开始界面
2.data基本图片的添加
3.面板,将小蛇画到面板上

这是游戏完整界面

1. 游戏开始界面

?

1

2

3

4

5

6

7

8

9

10

11

12

13

public class StartGame {

    public static void main(String[] args) {

        JFrame frame = new JFrame();

 

        frame.setBounds( 10 , 10 , 900 , 720 );

        frame.setResizable( false );

 

        frame.add( new GamePanel());

        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        frame.setVisible( true );

 

    }

}

2.data数据

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

public class Data {

 

    private static URL headerURL=Data. class .getResource( "statics/header.png" );

    public static ImageIcon header= new ImageIcon(headerURL);

    private static URL upURL=Data. class .getResource( "statics/up.png" );

    private static URL downURL=Data. class .getResource( "statics/down.png" );

    private static URL leftURL=Data. class .getResource( "statics/left.png" );

    private static URL rightURL=Data. class .getResource( "statics/right.png" );

 

    public static ImageIcon up= new ImageIcon(upURL);

    public static ImageIcon down= new ImageIcon(downURL);

    public static ImageIcon left= new ImageIcon(leftURL);

    public static ImageIcon right= new ImageIcon(rightURL);

 

    private static URL bodyURL=Data. class .getResource( "statics/body.png" );

    public static ImageIcon body= new ImageIcon(bodyURL);

 

    private static URL foodURL=Data. class .getResource( "statics/food.png" );

    public static ImageIcon food= new ImageIcon(foodURL);

 

}

3.面板绘制

?

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

public class GamePanel extends JPanel   implements KeyListener, ActionListener {

 

    int length;

    int [] snakeX= new int [ 600 ];

    int [] snakeY= new int [ 500 ];

    String fx;

 

    int foodx;

    int foody;

    Random random= new Random();

 

    int score;

 

 

    boolean isStart= false ;

    boolean isFail= false ;

 

    Timer timer= new Timer( 75 , this );

 

    public GamePanel() {

        init();

        this .setFocusable( true );

        this .addKeyListener( this );

        timer.start();

    }

 

    public void init(){

        length= 3 ;

        snakeX[ 0 ]= 100 ;snakeY[ 0 ]= 100 ;

        snakeX[ 1 ]= 75 ;snakeY[ 1 ]= 100 ;

        snakeX[ 2 ]= 50 ;snakeY[ 2 ]= 100 ;

        fx = "R" ;

 

        foodx= 25 + 25 *random.nextInt( 34 );

        foody= 75 + 25 *random.nextInt( 24 );

        score= 0 ;

    }

 

    @Override

    protected void paintComponent(Graphics g) {

        super .paintComponent(g);

 

        this .setBackground(Color.WHITE);

        Data.header.paintIcon( this ,g, 25 , 11 );

        g.fillRect( 25 , 75 , 850 , 600 );

 

        g.setColor(Color.white);

        g.setFont( new Font( "微软雅黑" ,Font.BOLD, 18 ));

        g.drawString( "长度" +length, 750 , 30 );

        g.drawString( "分数" +score, 750 , 50 );

 

        Data.food.paintIcon( this ,g,foodx,foody);

 

        if (fx.equals( "R" )){

            Data.right.paintIcon( this ,g,snakeX[ 0 ],snakeY[ 0 ]);

        } else if (fx.equals( "L" )){

            Data.left.paintIcon( this ,g,snakeX[ 0 ],snakeY[ 0 ]);

        } else if (fx.equals( "U" )){

            Data.up.paintIcon( this ,g,snakeX[ 0 ],snakeY[ 0 ]);

        } else if (fx.equals( "D" )){

            Data.down.paintIcon( this ,g,snakeX[ 0 ],snakeY[ 0 ]);

        }

 

        //Data.right.paintIcon(this,g,snakeX[0],snakeY[0]);

        for ( int i = 1 ; i < length; i++) {

            Data.body.paintIcon( this ,g,snakeX[i],snakeY[i]);

        }

 

        if (isStart== false ){

            g.setColor(Color.white);

            g.setFont( new Font( "宋体" ,Font.BOLD, 40 ));

            g.drawString( "想玩就嗯空格" , 300 , 300 );

        }

 

        if (isFail){

            g.setColor(Color.red);

            g.setFont( new Font( "微软雅黑" ,Font.BOLD, 40 ));

            g.drawString( "人生不能重来,请走好每一步" , 150 , 350 );

        }

    }

 

    @Override

    public void keyPressed(KeyEvent e) {

        int keyCode = e.getKeyCode();

        if (keyCode == KeyEvent.VK_SPACE){

            if (isFail){

                isFail= false ;

                init();

            } else {

                isStart=!isStart;

            }

            repaint();

        }

        if (keyCode==KeyEvent.VK_UP){

            fx= "U" ;

        } else   if (keyCode==KeyEvent.VK_DOWN){

            fx= "D" ;

        } else   if (keyCode==KeyEvent.VK_LEFT){

            fx= "L" ;

        } else   if (keyCode==KeyEvent.VK_RIGHT){

            fx= "R" ;

        }

 

    }

    @Override

    public void actionPerformed(ActionEvent e) {

        if (isStart&&isFail== false ){

 

            if (foodx==snakeX[ 0 ]&&foody==snakeY[ 0 ]){

                length++;

 

                score+= 10 ;

 

 

                foodx= 25 + 25 *random.nextInt( 34 );

                foody= 75 + 25 *random.nextInt( 24 );

            }

 

            for ( int i = length- 1 ; i > 0 ; i--) {

                  snakeX[i]=snakeX[i- 1 ];

                  snakeY[i]=snakeY[i- 1 ];

            }

            if (fx.equals( "R" )){

                snakeX[ 0 ] =snakeX[ 0 ]+ 25 ;

                if (snakeX[ 0 ]> 850 ){ snakeX[ 0 ]= 25 ; }

            } else if (fx.equals( "L" )){

                snakeX[ 0 ] =snakeX[ 0 ]- 25 ;

                if (snakeX[ 0 ]< 25 ){ snakeX[ 0 ]= 850 ; }

            } else if (fx.equals( "U" )){

                snakeY[ 0 ]=snakeY[ 0 ]- 25 ;

                if (snakeY[ 0 ]< 75 ){snakeY[ 0 ]= 650 ;}

            } else if (fx.equals( "D" )){

                snakeY[ 0 ]=snakeY[ 0 ]+ 25 ;

                if (snakeY[ 0 ]> 650 ){snakeY[ 0 ]= 75 ;}

            }

 

            for ( int i = 1 ; i < length; i++) {

                if (snakeY[ 0 ]==snakeY[i]&&snakeX[ 0 ]==snakeX[i]){

                    isFail= true ;

                }

            }

 

            repaint();

        }

        timer.start();

    }

 

 

    @Override

    public void keyTyped(KeyEvent e) {

 

    }

    @Override

    public void keyReleased(KeyEvent e) {

 

    }

 

 

}

小蛇的各个部位参数如下

头部尺寸

身体尺寸

食物尺寸

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

原文链接:https://blog.csdn.net/y18791050779/article/details/104269690

查看更多关于java使用GUI实现贪吃蛇游戏的详细内容...

  阅读:17次