Ejemplo n.º 1
0
 private void processInput() {
   for (KeyEvent event : game.getInput().getKeyPressedEvents()) {
     switch (event.getKeyCode()) {
       case KeyEvent.VK_UP:
         snake.setDirection(Direction.UP);
         break;
       case KeyEvent.VK_RIGHT:
         snake.setDirection(Direction.RIGHT);
         break;
       case KeyEvent.VK_DOWN:
         snake.setDirection(Direction.DOWN);
         break;
       case KeyEvent.VK_LEFT:
         snake.setDirection(Direction.LEFT);
         break;
       case KeyEvent.VK_F5:
         save();
         break;
       case KeyEvent.VK_F6:
         load();
         break;
       case KeyEvent.VK_SPACE:
         if (paused) paused = false;
         else paused = true;
         break;
     }
   }
 }
Ejemplo n.º 2
0
 // метод, который проверяет, пуста ли клетка для отрисовки яблока
 private boolean isCellEmpty(int x, int y) {
   for (BodyPart bodyPart : snake.getBody()) {
     if (bodyPart.getX() == x && bodyPart.getY() == y) {
       return false;
     }
   }
   return true;
 }
Ejemplo n.º 3
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();
          }
        }
      }
    }
  }
Ejemplo n.º 4
0
 private void drawSnake(Graphics2D g) {
   g.setColor(panel.getColor());
   for (BodyPart bodyPart : snake.getBody()) {
     g.fillRect(
         bodyPart.getX() * CELL_SIZE - CELL_SIZE,
         game.getScreenSize().height - (bodyPart.getY() * CELL_SIZE),
         CELL_SIZE,
         CELL_SIZE);
   }
 }
Ejemplo n.º 5
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;
  }