Ucigame - Gallery - Arrownaut

Home | Getting Started | Reference | Introduction to Java | Gallery

Your browser cannot show Java applets. Use the arrow/WASD keys, sometimes holding down Shift, to move the blinking arrow, and make the arrow run into to house three times to see all the functionality of this demo.

Here's the images/arrows.png file:

and here's images/houses.png:

and here are the four digit image files:
digits-black-0-4.png:    digits-black-5-9.png:
digits-red-0-4.png:    digits-red-5-9.png:

Arrownaut.java
import ucigame.*;

public class Arrownaut extends Ucigame
{
    Sprite arrow;
    Sprite house;
    Sprite digit;
    boolean endOfGame = false;

    public void setup()
    {
        window.size(250, 250);
        window.title("Arrownaut");
        framerate(30);

        canvas.background(180, 180, 255);

        Image arrows = getImage("images/arrows.png", 0, 255, 0);
        arrow = makeSprite(20, 20);
        arrow.addFrames(arrows,
                0, 0,         // #0  <-
                20, 0,        // #1  <-
                40, 0,        // #2  <-
                60, 0,        // #3  <-
                80, 0,        // #4  <-
                0, 20,        // #5  ->
                20, 20,       // #6  ->
                40, 20,       // #7  ->
                60, 20,       // #8  ->
                80, 20,       // #9  ->
                0, 40,        // #10  ^
                20, 40,       // #11  ^
                40, 40,       // #12  ^
                60, 40,       // #13  ^
                0, 60,        // #14  V
                20, 60,       // #15  V
                40, 60,       // #16  V
                60, 60,       // #17  V
                80, 60);      // #18  V

        arrow.defineSequence("Left", 0, 1, 2, 3, 4);
        arrow.defineSequence("Right", 5, 6, 7, 8, 9, 8, 7, 6);
        arrow.defineSequence("Up", 10, 11, 12, 11, 12, 13, 12, 13);
        arrow.defineSequence("Down", 14, 16, 18, 17, 15, 18, 17, 14, 16, 15);
        arrow.position(120, 120);
        arrow.framerate(15);
        // Initially, use default sequence of "All"

        Image houses = getImage("images/houses.png", 0, 255, 0);
        house = makeSprite(30, 30);
        house.addFrames(houses,
                0, 0,         // #0  ok
                0, 30,        // #1  smokey
                30, 30,       // #2  smokey
                60, 30,       // #3  smokey
                90, 30,       // #4  smokey
                0, 60,        // #5  burning
                30, 60,       // #6  burning
                60, 60,       // #7  burning
                90, 60,       // #8  burning
                120, 60,      // #9  burning
                0, 90);       // #10  burned

        house.defineSequence("Standing", 0);
        house.defineSequence("Smokey 1", 1, 2);
        house.defineSequence("Smokey 2", 3, 4);
        house.defineSequence("Burning", 5, 6, 7, 8, 9, 7, 5, 6, 9, 8, 6, 5, 9, 7, 8);
        house.defineSequence("Burned", 10);
        house.play("Standing");
        house.position(180, 180);
        house.framerate(10);

        digit = makeSprite(15, 20);
        Image digits1 = getImage("images/digits-black-0-4.png", 0, 255, 0);
        digit.addFrames(digits1,
                3, 3,         // #0  0
                20, 3,        // #1  1
                37, 3,        // #2  2
                54, 3,        // #3  3
                71, 3);       // #4  4
        Image digits2 = getImage("images/digits-black-5-9.png", 0, 255, 0);
        digit.addFrames(digits2,
                3, 3,         // #5  5
                20, 3,        // #6  6
                37, 3,        // #7  7
                54, 3,        // #8  8
                71, 3);       // #9  9
        Image digits3 = getImage("images/digits-red-0-4.png", 0, 255, 0);
        digit.addFrames(digits3,
                3, 3,         // #10  0
                20, 3,        // #11  1
                37, 3,        // #12  2
                54, 3,        // #13  3
                71, 3);       // #14  4
        Image digits4 = getImage("images/digits-red-5-9.png", 0, 255, 0);
        digit.addFrames(digits4,
                3, 3,         // #15  5
                20, 3,        // #16  6
                37, 3,        // #17  7
                54, 3,        // #18  8
                71, 3);       // #19  9

        digit.defineSequence("0 to 9 black", 0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
        digit.defineSequence("0 to 9 red", 10, 11, 12, 13, 14, 15, 16, 17, 18, 19);
        digit.play("0 to 9 black");
        digit.position(175, 50);
        digit.framerate(3);
    }

    public void draw()
    {
        canvas.clear();

        arrow.stopIfCollidesWith(TOPEDGE, BOTTOMEDGE, LEFTEDGE, RIGHTEDGE);
        arrow.checkIfCollidesWith(house);
        if (arrow.collided())
        {
            if (house.currSequence().equals("Standing"))
            {
                house.play("Smokey 1");
                arrow.position(20, 20);
            }
            else if (house.currSequence().equals("Smokey 1"))
            {
                house.play("Smokey 2");
                arrow.position(10, 210);
            }
            else if (house.currSequence().equals("Smokey 2"))
            {
                house.play("Burning", 8, "Burned");
                arrow.position(120, 120);
                arrow.play("All", ONCE);
                endOfGame = true;
            }
        }

        arrow.draw();
        house.draw();
        digit.draw();
    }

    public void onKeyPress()
    {
        if (endOfGame)
            return;
        // Arrow keys and WASD keys move the arrow sprite.
        // This code uses "else if" because only one key/direction
        // can apply at a time.
        if (keyboard.shift())
        {
            if (keyboard.isDown(keyboard.UP, keyboard.W))
            {
                arrow.play("Up", ONCE);
                arrow.nextY(arrow.y() - 2);
            }
            else if (keyboard.isDown(keyboard.DOWN, keyboard.S))
            {
                arrow.play("Down", ONCE);
                arrow.nextY(arrow.y() + 2);
            }
            else if (keyboard.isDown(keyboard.LEFT, keyboard.A))
            {
                arrow.play("Left", ONCE);
                arrow.nextX(arrow.x() - 2);
            }
            else if (keyboard.isDown(keyboard.RIGHT, keyboard.D))
            {
                arrow.play("Right", ONCE);
                arrow.nextX(arrow.x() + 2);
            }
        }
        else // no Shift
        {
            if (keyboard.isDown(keyboard.UP, keyboard.W))
            {
                arrow.play("Up");
                arrow.nextY(arrow.y() - 2);
            }
            else if (keyboard.isDown(keyboard.DOWN, keyboard.S))
            {
                arrow.play("Down");
                arrow.nextY(arrow.y() + 2);
            }
            else if (keyboard.isDown(keyboard.LEFT, keyboard.A))
            {
                arrow.play("Left");
                arrow.nextX(arrow.x() - 2);
            }
            else if (keyboard.isDown(keyboard.RIGHT, keyboard.D))
            {
                arrow.play("Right");
                arrow.nextX(arrow.x() + 2);
            }
        }
        // R and B restart the digit sequence in Red or Black
        if (keyboard.isDown(keyboard.B))
        {
            digit.play("0 to 9 black");
            digit.restart();
        }
        if (keyboard.isDown(keyboard.R))
        {
            digit.play("0 to 9 red");
            digit.restart();
        }
    }
}