Lernziele
Wir vertiefen unsere Programmierkenntnisse bei einem grösseren Projekt. Dabei erlernen wir Grundzüge der Softwareentwicklung kennen
# Softwareentwicklung
Bei der Softwareentwicklung wird nicht einfach drauflosprogrammiert. Oft macht das eigentliche «Coden» nur einen geringen Teil der Arbeit aus. Diese wird häufig in die folgenden vier Teile unterteilt:
- Spezifikation
- Was soll unser Programm/Spiel können?
- Design
- Wie können wir das umsetzen?
- Realisierung
- Die Umsetzung in der Programmiersprache – das «Coden»
- Testdurchführung
- Testen und ausprobieren
Im gesamten Prozess geht man auch immer wieder zurück: Wenn man z.B. bei der Realisierung merkt, dass etwas nicht so umsetzbar ist wie im Design festgelegt, so muss man nochmals das Design anpassen. Genauso kann es beim Testen vorkommen, das etwas nicht wie gewünscht funktioniert. Also müssen in der Realisierung, oder sogar im Design Anpassungen vorgenommen werden.
# Spielideen
Es folgen einige umsetzbare Spielideen mit Tipps zum Design als Vorschlag für das Projekt. Es sind auch weitere Spiele denkbar. Diese sollten jedoch mit der Lehrkraft abgesprochen werden, um sicherzustellen, dass sie auch umgesetzt werden können.
# Pong
Der Spieleklassiker aus zwei Schlägern und einem Ball. Die Schläger lassen sich mit der Tastatur steuern. Der Ball bewegt sich von selbst und prallt an den Schlägern und den Rändern oben und unten ab. Wenn er den linken oder rechten Rand erreicht gibt’s Punkte für den Spieler auf der anderen Seite.
https://de.wikipedia.org/wiki/Pong (opens new window)
mögliche Grafiken
Tipp
Elemente:
- 2 Schläger:
- Actor
- können vom Spieler in vertikaler Richtung verschoben werden
- horizontal sind die Positionen fix
- Ball:
- Actor mit Geschwindigkeits-Komponenten
vx
undvy
- prallt oben und unten am Rand ab (
vy = -vy
) - prallt am Schläger ab (
vx = -vx
) - wenn rechter oder linker Rand berührt, Punkt für linken resp. rechten Spieler
- Actor mit Geschwindigkeits-Komponenten
Erweiterungen:
- Anfangsrichtung des Balls zufällig
- Punkte zählen
- Abprallen an Schläger variieren, je nachdem ob in der Mitte oder am Rand
# Asteroids
Der Spieler steuert ein Raumschiff und muss dabei Asteroiden ausweichen. Als Erweiterung können Asteroiden beschossen werden. Sie zerfallen dabei in mehrere kleine Asteroiden.
https://de.wikipedia.org/wiki/Asteroids (opens new window)
mögliche Grafiken
Tipp
Elemente:
- Raumschiff
- Actor
- hat Winkel und Geschwindigkeit
- Bewegung (Verschiebung x- und y-Richtung) mit Sinus und Cosinus berechnen
- kann vom Spieler gedreht, beschleunigt und gebremst werden
- Asteroiden:
- Actors
- entstehen zufällig ausserhalb des Spiels
- Bewegen sich ins Spielfeld hinein
Ausbaustufen:
- Kollision zwischen Raumschiff und Asteroiden
- Raumschiff kann schiessen
- Asteroiden zerfallen bei Treffer in kleinere Asteroiden
# Snake
Der Spieler kontrolliert eine Schlange und sammelt Gegenstände. Dabei wird die Schlange immer länger. Fährt man in ein Hindernis oder in sich selbst, verliert man.
https://de.wikipedia.org/wiki/Snake_(Computerspiel) (opens new window)
mögliche Grafiken
Tipp
Die Schlange als Liste von Actors:
- bei jedem Schritt einen neuen Actor (Schlangenkopf) vorne anhängen
- der Actor wird gar nie bewegt, die Bewegung entsteht durch Hinzufügen eines neuen Elements reps. Entfernen des hintersten Elements
- Kopf braucht Geschwindigkeit in x- und y-Richtung
- mit den Steuerungstasten ändern diese Geschwindigkeiten
Spielschritt, also neuer Kopf nicht in Update, sondern mit clock.schedule_interval
z.B. alle Zehntel-Sekunde.
Erweiterungen:
- Items erscheinen zufällig und lassen sich einsammeln
- Hindernisse erscheinen zufällig und dürfen nicht berührt werden
- eigene Schlange darf nicht berührt werden
- Schlange wächst (mit der Zeit oder dank Einsammeln)
# Tron
Variante von Snake: Zwei Spieler bewegen ihre Figur über die Bühne, die Figur hinterlässt einen Strich. Wenn man in den gegnerischen (oder den eigenen) Strich reinfährt hat man verloren.
https://de.wikipedia.org/wiki/Tron_(Computerspiel) (opens new window)
mögliche Grafiken
Tipp
Das Gefährt hinterlässt eine Spur:
- man könnte z.B. den Bildschirm einfach nicht löschen im update-Unterprogramm
- oder man setzt die Spur aus einer Liste von Actor zusammen (analog zu snake)
- oder man zeichnet die Pixel der Spur auf ein
surface
– dazu braucht man aber einige Befehlt von pygame (ohne zero)
In allen Fällen kann man sich die durchgefahrenen Positionen in einer Liste von Koordinaten merken. So kann eine Kollision einfacher entdeckt werden.
Erweiterungen:
- zweiter Spieler
- Punkte zählen
# Aufgaben
Aufgabe «Spiel auswählen»
Schaue dir die 4 vorgeschlagenen Spielideen an. Kennst du sie bereits? Wähle ein Spiel aus das du programmieren möchtest.
Aufgabe «Spezifikationen»
Notiere stichwortartig was das Spiel können soll. Erstelle ev. Skizzen. Achte darauf, dass du ein simples Minimalprodukt formulierst, und nicht ganz so wichtige Dinge als Zusätze notierst. (Das Spiel sollte spielbar sein. Wenn aber keine Punkte gezählt werden, ist das nicht so schlimm.)
Aufgabe «Design»
Lies deine Spezifikationen durch und überlege dir, wie du das Umsetzen kannst:
- Welche Actor brauchst du?
- Welche Bilder müssen verwendet werden? (einen Startsatz an Bildern ist auf Teams verfügbar)
- Wie kann die Figur gesteuert werden?
- Welche Eigenschaften hat die Figur? (Geschwindigkeit, Richtung, Punkte, Leben, …)
- Wie bewegt sich die Figur?
- …
Mache wiederum einige Notizen zu deinem Vorhaben. Ev. helfen grafische Darstellungen!
Aufgabe «Realisierung»
Programmiere einen ersten kleinen Teil deines Spiels. Beginne z.B. mit der Hauptfigur und deren Steuerung. Füge weitere Figuren und den Hintergrund hinzu. Erstelle Kollisionsabfragen und zähle Punkte, usw.
Aufgabe «Testdurchführung»
Lasse deine Kolleg*innen ans Steuer und lass dir Rückmeldungen zu deinem Spiel geben!