21xrx.com
2024-12-22 22:52:59 Sunday
登录
文章检索 我的文章 写文章
Java编程实现贪吃蛇游戏
2023-06-15 11:59:53 深夜i     --     --
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语言关于面向对象编程和图形界面的相关知识。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复