21xrx.com
2025-03-21 04:09:13 Friday
文章检索 我的文章 写文章
Java编程实现贪吃蛇游戏
2023-06-15 11:59:53 深夜i     12     0
Java编程 贪吃蛇 面向对象编程

贪吃蛇游戏是一款经典的游戏,很受玩家喜爱。在Java编程中,我们可以利用图形界面和面向对象编程的思想,实现一个简单的贪吃蛇游戏。

首先,我们需要定义一个Snake类表示蛇,Snake类中包含了蛇的身体部分,以及蛇的移动方法。我们可以使用LinkedList作为蛇身体的容器,利用removeLast()方法来实现蛇尾的移除,利用addFirst()方法来实现蛇头的添加,这样就可以实现蛇的移动了。

public class Snake {
  private LinkedList
  body;
 
  public Snake(int x, int y){
    body = new LinkedList<>();
    body.addFirst(new Point(x, y));
  }
  public void move(Direction direction){
    Point head = body.getFirst();
    int x = head.x, y = head.y;
    switch (direction){
      case UP -> y--;
      case DOWN -> y++;
      case LEFT -> x--;
      case RIGHT -> x++;
    }
    Point newHead = new Point(x, y);
    body.addFirst(newHead);
    body.removeLast();
  }
  public LinkedList
  getBody()
 
    return body;
  
}

接下来,我们需要定义一个Food类表示食物,Food类中包含了食物的位置信息,以及食物的生成方法。为了使食物在画面上随机生成,我们可以使用Random类生成一个随机坐标。

public class Food {
  private Point location;
  public Food(int maxX, int maxY){
    Random random = new Random();
    int x = random.nextInt(maxX);
    int y = random.nextInt(maxY);
    location = new Point(x, y);
  }
  public Point getLocation()
    return location;
  
}

最后,我们需要定义一个Game类来实现整个游戏的逻辑,Game类中包含了蛇和食物的初始化,以及游戏的主循环,在每个循环中更新蛇和食物的位置,并且检测蛇是否撞到边界或者自身,以及蛇是否吃到了食物。

public class Game {
  private Snake snake;
  private Food food;
  private int score;
  public Game(int width, int height){
    snake = new Snake(width/2, height/2);
    food = new Food(width, height);
    score = 0;
  }
  public void update(Direction direction){
    snake.move(direction);
    Point head = snake.getBody().getFirst();
    Point foodLocation = food.getLocation();
    if (head.equals(foodLocation)){
      snake.getBody().addLast(snake.getBody().getLast());
      food = new Food(GameConfig.WIDTH, GameConfig.HEIGHT);
      score++;
    }
    if (head.x < 0 || head.y < 0 || head.x >= GameConfig.WIDTH || head.y >= GameConfig.HEIGHT){
      //游戏结束
      System.out.println("Game Over!");
      System.exit(0);
    }
    for (int i = 1; i < snake.getBody().size(); i++){
      if (head.equals(snake.getBody().get(i))){
        //游戏结束
        System.out.println("Game Over!");
        System.exit(0);
      }
    }
  }
  public Snake getSnake()
    return snake;
  
  public Food getFood()
    return food;
  
  public int getScore()
    return score;
  
}

在Paint类中,我们可以利用Graphics2D类,将蛇和食物绘制出来,并显示得分信息。

public class Paint extends JComponent {
  @Override
  public void paint(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
    Snake snake = GameWorld.getInstance().getGame().getSnake();
    LinkedList
  body = snake.getBody();
 
    Food food = GameWorld.getInstance().getGame().getFood();
    Point location = food.getLocation();
    int blockSize = GameConfig.BLOCK_SIZE;
    int score = GameWorld.getInstance().getGame().getScore();
    //绘制蛇
    g2.setColor(Color.GREEN);
    for (int i = 0; i < body.size(); i++){
      Point p = body.get(i);
      g2.fillRect(p.x*blockSize, p.y*blockSize, blockSize, blockSize);
    }
    //绘制食物
    g2.setColor(Color.RED);
    g2.fillRect(location.x*blockSize, location.y*blockSize, blockSize, blockSize);
    //绘制得分
    g2.setColor(Color.BLACK);
    g2.drawString("Score: "+score, 10, 20);
  }
}

这样,我们就完成了贪吃蛇游戏的Java编程实现。通过这个例子,我们学习了如何使用Java语言实现一个简单的游戏,并且了解了Java语言关于面向对象编程和图形界面的相关知识。

  
  

评论区