好得很程序员自学网

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

Java实现简单版贪吃蛇游戏

本文实例为大家分享了Java实现简单版贪吃蛇游戏的具体代码,供大家参考,具体内容如下

这是一个比较简洁的小游戏,主要有三个类,一个主类,一个食物类,一个贪吃蛇类。

1、首先定义主类,主类中主要用来创建窗口

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

public class Main {

 

  public static final int WIDTH= 600 ;

  public static final int HEIGHT= 600 ;

  public static void main(String[] args) {

   JFrame win = new JFrame();

   win.setVisible( true );

   win.setSize(WIDTH, HEIGHT);

   win.setDefaultCloseOperation( 3 );

   win.setLocationRelativeTo( null );

  

   SnakePanel panle = new SnakePanel();

   win.add(panle);

   SnakePanel.Key l = panle. new Key();

   win.addKeyListener(l);

   panle.addKeyListener(l);

   panle.run();

  }

 

}

2、其次是定义食物类,食物有长和宽,还有在窗口中的位置

?

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

import java.util.Random;

public class Cell {

  protected int x;

  protected int y;

  protected int width;

  protected int height;

  Random ran= new Random();

  public Cell(){

   Random ran= new Random();

   this .x=ran.nextInt( 25 )* 15 + 60 ;

   this .y=ran.nextInt( 25 )* 15 + 50 ;

   this .width= 15 ;

   this .height= 15 ;

  }

  public Cell( int x, int y){

   this ();

   this .x=x;

   this .y=y;

  }

  public int getX() {

   return x;

  }

  public void setX( int x) {

   this .x = x;

  }

  public int getY() {

   return y;

  }

  public void setY( int y) {

   this .y = y;

  }

  public int getWidth() {

   return width;

  }

  public void setWidth( int width) {

   this .width = width;

  }

  public int getHeight() {

   return height;

  }

  public void setHeight( int height) {

   this .height = height;

  }

}

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

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.util.Arrays;

import java.util.Timer;

import java.util.TimerTask;

import javax.swing.JPanel;

public class SnakePanel extends JPanel {

  final int RIGHT= 1 ;

  final int LEFT= 2 ;

  final int UP= 3 ;

  final int DOWN= 4 ;

  int moved= 1 ;

  Cell food;

  Cell[] snake;

  public SnakePanel(){

   food= new Cell();

   snake= new Cell[ 5 ];

   for ( int i= 0 ;i<snake.length;i++){

    snake[i]= new Cell( 210 +i* 15 , 50 );

   }

  }

  class Key extends KeyAdapter{

   @Override

   public void keyPressed(KeyEvent e){

    int code=e.getKeyCode();

    //System.out.println(code);

    if (code== 37 &&moved!=RIGHT){

     moved=LEFT;

    }

    if (code== 39 &&moved!=LEFT){

     moved=RIGHT;

    }

    if (code== 38 &&moved!=DOWN){

     moved=UP;

    }

    if (code== 40 &&moved!=UP){

     moved=DOWN;

    }

   }

  }

  public void paint(Graphics g){

   super .paint(g);

   g.setFont( new Font(Font.SERIF,Font.BOLD, 28 ));

   g.drawRect( 60 , 50 , 450 , 450 );

   for ( int i= 15 ;i<= 450 ;i+= 15 ){

    g.drawLine( 60 +i, 50 , 60 +i, 500 );

   }

   for ( int i= 15 ;i<= 450 ;i+= 15 ){

    g.drawLine( 60 , 50 +i, 510 , 50 +i);

   }

   g.setColor(Color.BLUE);

   g.drawString( "欢迎来到贪吃蛇大战" , 140 , 40 );

   g.fillRect(food.x, food.y, food.width, food.height);

   for ( int i= 0 ;i<snake.length;i++){

    g.fillRect(snake[i].x, snake[i].y, snake[i].width, snake[i].height);

   }

  }

  int speed = 250 ;

  public void run(){

   Timer timer= new Timer();

   TimerTask task= new TimerTask(){

    @Override

    public void run() {

     step();

     repaint();

    }

   };

   if (snake.length>= 10 ){

    speed= 125 ;

   } else if (snake.length>= 20 ){

    speed= 60 ;

   } else if (snake.length>= 30 ){

    speed= 30 ;

   } else if (snake.length>= 40 ){

    speed= 15 ;                                            

   }

   timer.schedule(task, 1000 , speed);

  }

  public void step(){

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

    snake[i- 1 ] = snake[i];

   }

   Cell c = new Cell(snake[snake.length- 1 ].getX(),snake[snake.length- 1 ].getY());

   if (moved == RIGHT){

    c.setX(c.getX()+ 15 );

   }

   if (moved == UP){

    c.setY(c.getY()- 15 );

   }

   if (moved == DOWN){

    c.setY(c.getY()+ 15 );

   }

   if (moved == LEFT){

    c.setX(c.getX()- 15 );

   }

   snake[snake.length- 1 ] = c;

   //System.out.println(c.getX()+","+c.getY());

   if (snake[snake.length- 1 ].getX()> 510 ||

     snake[snake.length- 1 ].getX()< 60 ||

     snake[snake.length- 1 ].getY()> 500 ||

     snake[snake.length- 1 ].getY()< 50 ){

      System.exit( 0 );

     }

   if (snake[snake.length- 1 ].x==food.x &&snake[snake.length- 1 ].y==food.y){

    snake=Arrays.copyOf(snake,snake.length+ 1 );

    snake[snake.length- 1 ]=food;

    food= new Cell();

   }

  }

}

至此,一个简单的贪吃蛇小游戏就完成了。

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

原文链接:https://blog.csdn.net/YMH520ZL/article/details/120458888

查看更多关于Java实现简单版贪吃蛇游戏的详细内容...

  阅读:24次