9.1.8 Mobile Gaming


Viele Smartphones werden heute als Spielgerät verwendet. Das allererste Handy-Spiel war das Spiel "Snake" aus dem Jahr 1997: Nokia-6110 Snake-Game. In Erinnerung daran soll dem Calliope das Spiel Snake auf dem 5x5 LED Bildschirm beigebracht werden.

Das Spiel wird die Knöpfe A, B als Eingabebauteile, die 5x5 LED Lampe als Ausgabebauteil und Prozessor und Speicher als Verarbeitungsbauteile verwendet:


Übertragung des Programms auf den Calliope

Für ProgrammieranfängerInnen ist der Programmcode für das Spiel "Snake" sehr anspruchsvoll. Deswegen wird der Code nicht erklärt, sondern du sollst das Programm auf den Calliope übertragen, es dort ausführen und das Spiel spielen.

Führe dazu die folgenden Schritte aus:

  • Lade folgende Datei herunter: mini-snake.hex.zip

  • Suche die Datei im Ordner "Downloads".

  • Entpacke die Datei, indem du mit der rechten Maustaste auf die Datei klickst und "Hier entpacken..." anklickst oder das 7-Zip-Programm zum Entpacken verwendest.

  • Ziehe die entpackte Datei "mini-snake.hex" im Datei-Manager auf den Calliope-Mini:

  • Starte das Programm, indem du auf den Reset-Knopf klickst.

Wenn dich der Programm-Code des Snake-Programms interessiert, kannst du die Programm-Datei in den MakeCode-Editor importieren:

  • Öffne den Calliope Editor.

  • Klicke auf "Importieren", dann auf "Datei importieren" und ziehe die entpackte Datei "mini-snake.hex" vom Datei-Manager in den Dialog.


Programm im Block-Code:


Programm in JavaScript:

Im Informatik-Grundkurs (Jahrgang 12/13) wird nicht mehr mit Blöcken programmiert, sondern man schreibt ein Computerprogramm als Text in einem Text-Editor. Das Snake-Programm sieht als Text in der Programmiersprache JavaScript wie folgt aus:

let futter: game.LedSprite = null
let snakeKopf: game.LedSprite = null
let futterDa = false
snakeKopf = game.createSprite(0, 2)
let snakeKoerper: game.LedSprite[] = []
let spielStop = 0
let spielStand = 0

input.onButtonEvent(Button.A, input.buttonEventClick(), function () {
    snakeKopf.turn(Direction.Left, 90)
})

input.onButtonEvent(Button.B, input.buttonEventClick(), function () {
    snakeKopf.turn(Direction.Right, 90)
})

basic.forever(function () {
    basic.pause(500)
    if (futterDa == false) {
        futter = game.createSprite(randint(0, 4), randint(0, 4))
        futter.set(LedSpriteProperty.Blink, 120)
        futterDa = true
    }
    if (snakeKopf.isTouching(futter)) {
        snakeKoerper.push(game.createSprite(snakeKopf.get(LedSpriteProperty.X), snakeKopf.get(LedSpriteProperty.Y)))
        futter.delete()
        futterDa = false
        spielStand += 1
    } else {
        snakeKoerper.push(game.createSprite(snakeKopf.get(LedSpriteProperty.X), snakeKopf.get(LedSpriteProperty.Y)))
        snakeKoerper.shift().delete()
    }
    snakeKopf.move(1)
    if (snakeKoerper.length > 0) {
        for (let Index = 0; Index <= snakeKoerper.length - 1; Index++) {
            if (snakeKopf.isTouching(snakeKoerper[Index])) {
                spielStop = 1
            }
        }
    }
    if (spielStop) {
        game.setScore(spielStand)
        game.gameOver()
    }
})

Spiel-Anleitung

  • Drücke den Reset-Knopf neben dem USB-Anschluss um das Spiel zu starten.

  • Steuere die Schlange (Snake) auf das blinkende Futter, indem du die Richtung mit dem Knopf A (nach links) und Knopf B (nach rechts) änderst.

  • Wenn die Schlange noch kein Futter gegessen hat, kann sie noch nicht sterben.

  • Sobald die Schlange das erste Futter gefressen hat, kann sie sterben, wenn sie die Welt verlässt oder auf ihren eigenen Körper läuft.

  • Die Schlange wird 1 Element länger, wenn sie das blinkende Futter gefressen hat. Für jede Verlängerung des Körpers bekommt man einen Punkt.

  • Sobald das Spiel beendet ist, wird die Meldung "Game over" angezeigt, gefolgt von der erreichten Punktzahl ("Score").


Wer schafft am meisten Punkte mit dem Calliope Snake-Spiel?