Den abstrakta klassen GameTemplate
import se.lth.cs.pt.game.graphics.GameTemplate;

Klassen GameTemplate är en mall för händelsestyrda program i ett GraphicsWindow - den som utvidgar klassen GameTemplate behöver bara implementera några få operationer (se nedan) för att få ett fungerande program.

De operationer som kan överskuggas dokumenteras nedan - ett enkelt exempel på program är följande:

import se.lth.cs.pt.graphics.*;
import se.lth.cs.pt.graphics.events.*;
import se.lth.cs.pt.game.graphics.*;
import java.util.Random;

class SampleGame extends GameTemplate {

    protected final int
        LEFT_ARROW = 37,
        UP_ARROW = 38,
        RIGHT_ARROW = 39,
        DOWN_ARROW = 40,
        QUIT_KEY = 81;

    protected Sprite sprite;
    protected int width, height;
    protected double x, y;
    protected Random rng = new Random();

    public void setup() {
        width = 500;
        height = 500;
        x = width/2;
        y = height/2;
        w = new GraphicsWindow(width,height);
        sprite = new Sprite("ball.png", x, y);
        w.add(sprite);
        w.checkKeys(true,false,false);
        w.checkMouse(true,false,false,false,false);
        w.timeStep(1000);
    }

    public void keyPressed(char key, int code) {
        // Om vi vill använda pil-tangenter bryr vi oss
        // inte om key-värdet:
        switch (code) {
        case LEFT_ARROW:
            x -= 10;
            break;
        case RIGHT_ARROW:
            x += 10;
            break;
        case UP_ARROW:
            y -= 10;
            break;
        case DOWN_ARROW:
            y += 10;
            break;
        case QUIT_KEY:
            quit();
            break;
        }
        redraw();
    }

    public void mouseClicked(double xPos, double yPos, int button) {
        if (button == 1) {   // vänsterknappen
            x = xPos;
            y = yPos;
            redraw();
        }
    }

    public void tick() {
        x += rng.nextDouble()*20-10;
        y += rng.nextDouble()*20-10;
        redraw();
    }

    protected void redraw() {
        sprite.moveTo(x,y);
    }
}
 

Programmet ovan kan startas med anropet:

new SampleGame().run();

Några viktiga saker att lägga märke till:

Metoder
void run()
Startar programmet (kan inte överskuggas).
void quit()
Gör att programmet avslutas.
boolean timeToQuit()
Avgör om det är dags att avsluta (kan överskuggas, om du inte hellre vill anropa quit(), se ovan). Denna metod skall du inte anropa själv, den anropas automatiskt i händelseloopen -- den skall returnera true när det är dags att avsluta programmet, false annars.
void setup()
Initierar attribut. Måste skapa ett fönster w, och meddela vilka händelser som skall hanteras. Skall även starta klockan (w.timeStep), om vi vill ha diskreta tiddsteg. Observera att du inte får ha något eget fönster w i din subklass (ett sådant fönster skulle 'överskugga' det fönster som GameTemplate använder för att vänta på händelser).
void tick()
Anropas när ett tidssteg har gått (initieras genom att skriva w.timeStep(tidssteg) i setup).
void keyPressed(char ch, int code)
Anropas när en tangent har tryckts ned (kräver att w.checkKeys har initierats på rätt sätt i setup()).
Parametrar:
key:'tecknet' på den tangent som trycktes ned.
code:tangent-kod för den aktuella tangenten.
void keyReleased(char ch, int code)
Anropas när en tangent har släppts upp (kräver att w.checkKeys har initierats på rätt sätt i setup()).
Parametrar:
key:'tecknet' på den tangent som trycktes ned.
code:tangent-kod för den aktuella tangenten.
void keyTyped(char ch, int code)
Anropas efter fullbordad tangent-tryckning (kräver att w.checkKeys har initierats på rätt sätt i setup()).
Parametrar:
key:'tecknet' på den tangent som trycktes ned.
code:tangent-kod för den aktuella tangenten.
void mouseClicked(double x, double y, int button)
Anropas när användaren har klickat med musen (kräver att w.checkMouse har initierats på rätt sätt i setup()).
Parametrar:
x:x-koordinat
y:y-koordinat
button:musknapp (1 = vänsterknappen)
void mousePressed(double x, double y, int button)
Anropas när användaren har tryckt ned musen (kräver att w.checkMouse har initierats på rätt sätt i setup()).
Parametrar:
x:x-koordinat
y:y-koordinat
button:musknapp (1 = vänsterknappen)
void mouseReleased(double x, double y, int button)
Anropas när användaren har släppt upp musen (kräver att w.checkMouse har initierats på rätt sätt i setup()).
Parametrar:
x:x-koordinat
y:y-koordinat
button:musknapp (1 = vänsterknappen)
void mouseDragged(double x, double y, int button)
Anropas när användaren har släpat musen (kräver att w.checkMouse har initierats på rätt sätt i setup()).
Parametrar:
x:x-koordinat
y:y-koordinat
button:musknapp (1 = vänsterknappen)
void mouseMoved(double x, double y)
Anropas när användaren har flyttat musen (kräver att w.checkMouse har initierats på rätt sätt i setup()).
Parametrar:
x:x-koordinat
y:y-koordinat