Racer Programmieren

Racer Programmieren

Beschreibung

In der Session wollen wir ein Rennspiel programmieren, das man an einem Computer mit 2 Spielern spielen kann. Den Racer programmieren wir mit Python und pygame, die Rennstrecke(n) bauen wir mit Tiled. Auf der Rennstrecke gibt es außerdem Hindernisse und die Spieler kollidieren auch untereinander. Nachdem x Runden absolviert wurden, gewinnt ein Spieler.

Ziel

Was sind die Ziele der Session?

  • Python
    • Grundlegende Python-Syntax
    • Einbindung und Verwendung von Bibliotheken
    • Kontrollstrukturen (If-Abfragen, while-Schleifen, for-Schleifen)
    • Aufbau und Verwendung von Klassen inkl. Vererbung
  • PyGame
    • Grundlegende Struktur eines 2D-Spiels mit PyGame
    • Verarbeitung von Benutzereingaben
    • Nutzung von Sprites und deren Interaktion
    • Erstellen von Spielern/Gegnern
    • Grundlegende Einbindung von Tiled Maps in pygame-Programme
  • Tiled
    • Maps erstellen
    • Maps mit PyGame verwenden
  • Git
    • Grundlegende Benutzung von git über die Kommandozeile
      • git add
      • git commit
      • git pull/push
    • Zusammenarbeit mit git
      • Commit-Messages

Art der Session

Welche Format soll die Session haben?

  • Experimentier-Session (alle gemeinsam probieren etwas Neues aus, was noch keiner so richtig kann)

Vorgehen

Termin Themenbereich Was soll gemacht werden?
1. Dezember Python Basics Grundlegende Funktionen (i.e print, input…), Kontrollfunktionen, Klassen/Funktionen schreiben
8. Dezember Pygame Basics & Vorbereitung Campdays Erstellen des Bildschirms, Klassen (Spieler usw.), Update, Bewegung… & Ist noch etwas unklar? Wollen wir etwas bei den Campdays machen?
15. Dezember N/A Ausgefallen
22. Dezember N/A Ausgefallen
5. Januar Programmieren Git-Einführung mit @nik
12. Januar Programmieren Start der Programmierphase
19. Januar Programmieren Programmierphase
26. Januar Programmieren Programmieren, Abfrage: Wie weit sind alle? Wie viel Zeit brauchen wir noch?
2. Februar Programmieren Ursprünglich geplantes Ende, wird ziemlich sicher verschoben
9. Februar Programmieren Programmierphase
16. Februar Programmieren Programmierphase
23. Februar Programmieren Programmierphase, Abfrage: Ist alles soweit klar? Haben wir ein präsentables Ergebnis
2. März Programmieren Ende der Session, Dokumentation, Review, ggf noch ein Feinschliff
9. März Programmieren Bugfixing aller Art, letzte Verbesserungen
30. März Abschluss Abschluss-Session, review der Lernziele, Klärung von Fragen

Zeit und Ort

Wann und wo soll die Session/ die Sessions stattfinden?

Teilnehmende

Bereits erledigt

Was ist bisher passiert? Welche Aufgaben wurden bisher erledigt?

  • Terminabstimmung erledigt
  • Einführung in Python
  • Einführung in Pygam
  • Einführung in git
  • Start der Programmierphase
  • Grundsätzliche Spielmechaniken festlegen und programmieren
  • Planung der Karte/Strecke
  • Einfügen von einem zweiten Spieler
  • Verfeinerung der Spielmechaniken (Kollision der Spieler untereinander, Beschleunigung usw.)
  • Tiled-Karte für Spiel erstellen
  • Die Karte weiter ins Spiel einbinden (mit Objekten, Kollisionen usw)
  • Letzte Feinschliffe

Nächsten Schritte

Was passiert als nächstes? Was sind die nächsten Aufgaben?

  • Abschlussbericht
  • ggf. Sichtung der Lernziele
2 „Gefällt mir“

Wäre es sinnvoll, das mit @greenem’s Wunsch, mehr Python zu lernen, zu verknüpfen?

Was meinst du @greenem, wäre das was für dich, hier mitzumachen, statt eines separaten Workshops?

Session-Redaktion: Ziele, Format, usw. definieren

Können wir machen.

Terminabstimmung

Bitte stimmt hier ab, wann ihr Zeit hättet, euch für eine regelmäßige Session (ca. 1h, vllt. mal mehr mal weniger)zu treffen. Der Starttermin richtet sich dann danach, wie lange ich die Abstimmung offen halte.

  • Montag, 17:30
  • Mittwoch, 17:30
  • Donnerstag, 16:30
  • Donnerstag, 18:30
  • Freitag, 16:00
  • Freitag, 17:00
  • Freitag, 17:30

0 Teilnehmer

Hallo @robert,
schau mal, dass du den ersten Beitrag basierend auf dem neuen Template anpasst.

Hi @justus ,

was hast Du denn am Montag und Donnerstag für einen Termin? Wäre es möglich, dass Du ggf. ein paar Minuten später kommst?

Donnerstags habe ich Klavier-Unterricht, da ginge es bei mir eher als montags. Es könnte nur sein, dass ich etwas später komme.

Dann machen wir unsere Session immer am Donnerstag um 17:30 (d Den erste Termin würde ich für nächste Woche, den 2022-11-24T16:30:00Z2022-11-24T17:30:00Z ansetzen.

Hallo,
ich kann am 15.12 leider nicht teilnehmen da wir an dem Tag in Kur fahren.
Aber am 22.12 bin ich wieder dabei.

Hi,

sorry für die verspätete Information. Gestern fand kein Meeting statt, weil ich da leider verhindert war. Der neue Starttermin ist der, der im Originalpost steht (also der 1. Dezember). Entschuldigung, dass das für Verwirrung gesorgt hat!

Einführung in Python

Heute haben wir uns mit den Python-Grundlagen beschäftigt. Dazu gab es zwei Teile.

Lotto

Zuerst haben wir ein ‘Lotto-Spiel’ programmiert. Es werden 6 zufällige Zahlen zwischen 1 und 49 gezogen und 6 Nutzereingaben abgefragt. Aus den beiden Datensets wurde die Übereinstimmung ermittelt. Da haben wir uns unter anderem beschäftigt mit:

  • Random
  • Eingaben & Values
  • Kontrollstrukturen (Schleife [for/while], if-Abfragen)
  • Datentypen
    • Speziell Listen/Sets

Der kommentierte Code findet sich hier:

# Lotto
# Generieren von zufällige Zahlen ohne Duplikate
# Abfrage, ob die Zahlen stimmen
# Userinput 
import random

print("Hallo. Heute spielen wir Lotto (6 aus 49)! Bitte gib 6 Zahlen zwischen 1 und 49 ein")
# Datenmengen für Userinput und Loesungsmenge
# Eingabe als Liste -> Duplikate sind theoretisch zulässig, die Liste ist geordnet (in dem Fall egal)
eingabe = []
# Die Loesungsmenge ist ein Set. -> es gibt keine Duplikate, die Liste ist ungeordnet (in dem Fall egal)
loesung = set()
# Die Anzahl der richtigen Antworten
richtige_zahlen = 0

# Der Code wird 6 mal ausgeführt -> for-Schleife
for i in range(1,7):
    # Fragen wir eine Zahl ab
    inp = int(input(f"Zahl {i}:"))
    # Einfügen in die Liste
    eingabe.append(inp)
    
# Da Sets keine Dopplungen zulassen, müssen wir überprüfen, wie lang das Set ist
# und die Operation so oft durchführen bis es 6 Zahlen sind
while len(loesung) != 6:
    #Generieren von Zufallszahlen
    richtig = random.randint(1, 49)
    #Die Zufallszahl wird hinzugefügt.
    loesung.add(richtig)

for glueckszahl in loesung:
    for zahl in eingabe:
        #Wir checken jede Zahl in den Lösungen gegen jede Eingabe
        if zahl == glueckszahl:
            #Falls es eine Übereinstimmung gibt, erhöhe Score um 1
            richtige_zahlen += 1
print(richtige_zahlen)
print(loesung)

Klassen und Funktionen

Danach haben wir uns noch mit Klassen und Funktionen beschäftigt und wie Funktionen von Klassen erben. Wir haben ein Auto ‘gebauen’ mit den Attributen Marke, Modell und Farbe und einer Funktion, die die Farbe individuell setzen kann.
Der Code findet sich hier:

#Erstellen der Klasse
class Auto():
    #Zuweisung der Originalattribute
    def __init__(self, farbe):
        self.marke = "VW"
        self.model = "Käfer"
        self.farbe = farbe
   #Eine Funktion, die die Marke nachträglich setzen kann 
   def set_marke(self, marke):
        self.marke = input("Was soll die Marke sein?")

# Beispiel einer alleinstehenden Funktion
def drucken(text):
    print(text)

# Erstellen von 3 Objekten
auto1 = Auto("Silber")
auto2 = Auto("Rot")
auto3 = Auto("Gelb")

Ich gehe Donnerstags immer zum Sport, und das Endet um 17:30 (manchmal endet das Training aber auch früher), daher würde ich an den Terminen etwas später hinzustoßen (spätestens 18:00 Uhr). Geht das klar?

Hi lian,
sorry ich hab deine Nachricht gerade erst gesehen. Das geht klar so und ist notiert!

Gestern haben wir damit begonnen das eigentliche Spiel zu programmieren. Um das zu machen gibt es im wesentlichen zwei verschiedene ToDos:

  1. Wir müssen uns überlegen, wie man das Spiel aufbauen sollte und das dann umsetzen (wollen wir ein “Rennen gegen die Zeit” oder doch lieber Mehrspieler? Wir zählen wir die Runden? usw usw.)
  2. Wir brauchen eine Tiled-Karte als Strecke und müssen diese entsprechend in das Spiel einbinden (bspw. falls der Spieler gegen eine Wand fährt, muss diese Wand auch solide sein)

Dazu haben wir uns in Gruppen aufgeteilt, damit das gleichzeitig angegangen werden kann. In Tiled haben wir uns schonmal entsprechende Ressourcen herausgesucht und begonnen, die Karte zu bauen. Andererseits haben wir auch schon die ersten paar Zeilen Code geschrieben um einen Bildschirm und einen Spieler zu erstellen (der Hintergrund dieses Bildschirms wird erstmal Einfarbig sein, da er eh ersetzt wird).

da wir aus der Kur zurück fahren kann ich leider am 21.1. nich teilnehmen :frowning:

Wir haben uns heute darauf geeinigt, dass wir uns nächste Woche nochmal treffen um Bugfixing zu betreiben und den diesmal wirklich letzten Schliff zu machen ;).

Entschuldigung dass ich bei den letzten zwei malen nicht dabei war: beim ersten mal hab ich es vergessen und beim zweiten mal war ich beim Probetraining vom Judo. Am 9.März feiert meine Schwester Geburtstag und da habe ich leider auch keine Zeit

Leider haben wir eigentlich schon das Ende unseres Programmierprojektes erreicht. Das Spiel ist auf Edugit zu finden und auch ganz gut gelungen.

Jetzt ist die Frage wie wir weiter verfahren wollen. Nehmt dazu bitte einmal an der Umfrage teil.

  • Ich möchte das Projekt noch weiter fortführen (Neue Features gehen immer, dann wird das hier eben der voellig overengineerte Racer)
  • Ich möchte ein neues Projekt starten (In der ersten Session hatten wir die Idee mit dem Jump’n’Run. Das wieder aufgreifen?)
  • Ich finde wir sollten hier einen Cut setzen und später weitermachen (entweder mit diesen oder dann einem neuen Projekt).

0 Teilnehmer

Bei der Frage ob wir sofort mit einem neuen Projekt wieder durchstarten haben natürlich auch noch die Sessionleiter ein Wörtchen mitzureden, die explizit darauf gewartet haben, dass diese Session endet. Ich denke da vorallem an die Gameshow-Inputs (@mwinter) und den selbstgebauten Computer (@krfl9500).