Пример #1
0
  // метод, проверяющий не закончилась ли игра (победой или проигрышем - не важно)
  private boolean isGameOver() {
    if (snake.head().getX() == 0
        || snake.head().getX() == WORLD_WIDTH
        || snake.head().getY() == 0
        || snake.head().getY() == WORLD_HEIGHT) return true;

    for (BodyPart bodyPart : snake.getBody()) {
      if (bodyPart != snake.head()
          && snake.head().getX() == bodyPart.getX()
          && snake.head().getY() == bodyPart.getY()) {
        return true;
      }
    }

    return false;
  }
Пример #2
0
  // змейка будет двигаться как только нужная задержка была достигнута
  // обрабатывает внесенные изменения и обновляет игровое поле
  @Override
  public void update(long nanosPassed) {

    processInput();
    if (!paused) {
      if (isGameOver()) {
        game.setScene(new GameOverScence(game, panel, delay));
        return;
      }

      if (snakeMoveDelay.updateAndCheck(nanosPassed)) {
        stepsCount++;
        mlSeconds += 200;
        String seconds = Clock.getTime(mlSeconds);
        panel.setData(seconds, stepsCount, appleCount);

        snake.move(); // удлинение змейки, при поедании яблока
        BodyPart head = snake.head();
        if (head.getX() < 1) {
          head.setX(WORLD_WIDTH);
        }
        if (head.getX() > WORLD_WIDTH) {
          head.setX(1);
        }
        if (head.getY() < 1) {
          head.setY(WORLD_HEIGHT);
        }
        if (head.getY() > WORLD_HEIGHT) {
          head.setY(1);
        }
        if (head.getX() == apple.getX() && head.getY() == apple.getY()) {
          List<BodyPart> body = snake.getBody();
          BodyPart lastPart = body.get(body.size() - 1);
          body.add(new BodyPart(lastPart.getX(), lastPart.getY()));
          ++appleCount;
          if (isGameOver()) {
            game.setScene(new GameOverScence(game, panel, delay));
          } else {
            placeApple();
          }
        }
      }
    }
  }