Когда я запускаю игру, то понимаю, что змейка просто проползает СКВОЗЬ яблоко. Яблоко не пропадает, змейка не увеличивается. У меня есть метод, который при "Яблоко не живое" создает новое и увеличивает змейку. Есть метод, который проверяет столкновение змейки с яблоком (т.е. яблоко съедено и стало не живым). Однако змейка НЕ ЕСТ ЯБЛОКИ. У меня есть только 1 идея: я не нашел в программе, в какой момент у меня именно проверяется, что ЗМЕЙКА СТОЛКНУЛАСЬ С ЯБЛОКОМ. Но даже если я нашел проблему, то не знаю, как ее исправить - в каком месте нужно сделать, чтобы checkCollision(apple) проверяло столкновение с яблоком. ПОМОГИТЕ!!! Методы OnTurn, createGame, drawScene, OnKeyPress и createNewApple класса SnakeGame:
@Override
    public void onTurn(int step){
        snake.move(apple);
        if (!apple.isAlive) {
            score += 5;
            setScore(score);
            turnDelay -= 10;
            setTurnTimer(turnDelay);
            createNewApple();
        }
        if (!snake.isAlive) {
            gameOver();
        }
        if (snake.getLength() > GOAL) {
            win();
        }
        drawScene();

    }

    // Метод, отвечающий за действия в начале игры
    private void createGame () {
        snake = new Snake(WIDTH/2, HEIGHT/2);
        turnDelay = 300;
        setTurnTimer(turnDelay);
        createNewApple();
        isGameStopped = false;
        score = 0;
        setScore(score);
        drawScene();
    }

    // Метод, который отрисовывает игровое поле
    private void drawScene () {
        for (int x = 0; x < WIDTH; x++) {
            for (int y = 0; y < HEIGHT; y++) { // Проходимся по всем клеткам поля
                setCellValueEx(x, y, Color.LIGHTGREEN, ""); // Перекрашиваем в светло-зеленый
            }
        }

        snake.draw(this);
        apple.draw(this);
    }

    @Override
    public void onKeyPress(Key key) {
        switch (key) {
            case DOWN:
                snake.setDirection(Direction.DOWN);
                break;
            case UP:
                snake.setDirection(Direction.UP);
                break;
            case RIGHT:
                snake.setDirection(Direction.RIGHT);
                break;
            case LEFT:
                snake.setDirection(Direction.LEFT);
                break;
            case SPACE:
                if (isGameStopped)
                    createGame();
        }
    }

    private void createNewApple() {
        do {
            apple = new Apple(getRandomNumber(WIDTH), getRandomNumber(HEIGHT));
        } while (snake.checkCollision(apple));
    }
Класс змейки:
package com.javarush.games.snake;

import java.util.ArrayList;
import java.util.List;
import com.javarush.engine.cell.*;

public class Snake {
    private List<GameObject> snakeParts = new ArrayList<>();
    private static final String HEAD_SIGN = "\uD83D\uDC7E";
    private static final String BODY_SIGN = "\u26AB";
    public boolean isAlive = true;
    private Apple apple;

    public Snake(int x, int y){
        GameObject first = new GameObject(x, y);
        GameObject second= new GameObject(x + 1, y);
        GameObject third = new GameObject(x + 2, y);

    snakeParts.add(first);
    snakeParts.add(second);
    snakeParts.add(third);

}
    public void draw (Game game){
        Color snakeColor;
        if (isAlive) snakeColor = Color.GREEN;
        else snakeColor = Color.RED;

        game.setCellValueEx(snakeParts.get(0).x, snakeParts.get(0).y, Color.NONE, HEAD_SIGN, snakeColor, 75);
        for (int i = 1; i != snakeParts.size(); i++) {
            game.setCellValueEx(snakeParts.get(i).x, snakeParts.get(i).y, Color.NONE, BODY_SIGN, snakeColor, 75);
        }
    }
    private Direction direction = Direction.LEFT;
    public void setDirection(Direction direction) {
        switch (this.direction) {
            case LEFT:
            case RIGHT:
                if (snakeParts.get(0).x == snakeParts.get(1).x) return;
                break;
            case UP:
            case DOWN:
                if (snakeParts.get(0).y == snakeParts.get(1).y) return;
                break;
        }
        this.direction = direction;
    }

  public void move(Apple apple) {
        GameObject head = createNewHead();
        if (checkCollision(head)) {
            isAlive = false;
            if (head.x < 0 && head.y < 0 || head.x >= SnakeGame.WIDTH && head.y >= SnakeGame.HEIGHT) {
                isAlive = false;
            }
        }
        else {
            snakeParts.add(0, head);
            removeTail();
        }
    }


    public GameObject createNewHead () {
        int HeadX = snakeParts.get(0).x, HeadY = snakeParts.get(0).y;
        GameObject newElem;
        if (direction == Direction.LEFT) {
            newElem = new GameObject(HeadX-1, HeadY);
        }
        else if (direction == Direction.RIGHT) {
            newElem = new GameObject(HeadX+1, HeadY);
        }
        else if (direction == Direction.DOWN) {
            newElem = new GameObject(HeadX, HeadY+1);
        }
        else {
            newElem = new GameObject(HeadX, HeadY-1);
        }
        return newElem;
    }

    public void removeTail () {
        snakeParts.remove(snakeParts.size() - 1);
    }

    public boolean checkCollision(GameObject obj){
    for(int i = 0; i < snakeParts.size(); i++){
        if(snakeParts.get(i).x == obj.x && snakeParts.get(i).y == obj.y){
            return true;
        }
    }
    return false;
    }

    public int getLength() {
        return snakeParts.size();
    }
}
Класс яблока:
package com.javarush.games.snake;

import com.javarush.engine.cell.*;

public class Apple extends GameObject {
    private static final String APPLE_SIGN = "\uD83C\uDF4E";
    public boolean isAlive = true;

    public Apple(int x, int y) {
        super(x, y);
    }

    public void draw (Game game) {
        game.setCellValueEx(x, y, Color.NONE, APPLE_SIGN, Color.GREEN, 75);
    }
}
Очень жду вашей помощи. Заранее спасибо!!!