Chapter 4: Sokoban Game

Solutions

SOLUTION TASK 4.01 to 4.09

public class MyKara extends KaraSokoban {
    
    int counter = 0;

    public void act() {
        String key = getKey();

        if (key.equals("right")) {
            setDirectionRight();
            tryToMove();
        }

        if (key.equals("down")) {
            setDirectionDown();
            tryToMove();
        }

        if (key.equals("left")) {
            setDirectionLeft();
            tryToMove();
        }

        if (key.equals("up")) {
            setDirectionUp();
            tryToMove();
        }
    }

    /**
     * Kara makes one step. This method first tests if Kara can move or if he
     * has to move a mushroom first.
     */
    public void tryToMove() {
        if (!treeFront()) {
            if (mushroomFront()) {
                if (canPushMushroom()) {
                    move();
                    counter++;
                    setNumberOfMoves(counter);
                }
            } else {
                move();
                counter++;
                setNumberOfMoves(counter);
            }

            if (testLevelComplete()) {
                saveHighscore();
                levelComplete();
            }
        }
    }

    /**
     * Handles the saving of the highscore.
     */
    public void saveHighscore() {
        // Test if it is in the top 3
        if (isHighscoreTop3(counter)) {
            // Is in top 3 --> add it
            addHighscoreEntry(counter);
        }
    }
}

Comments