Skip to content
This repository was archived by the owner on Sep 12, 2025. It is now read-only.

ActiveClientMods/Flappybird-Projekt

Repository files navigation

Projekt: Flappybird

Grading Criteria Programmieren T3INF1004

In jedem Unterbereich werden die Punkte (gerne auch Links ins GIT) erklärt, wie das LO erreicht worden ist. Alle Kriterien betreffen nur die Projektarbeit. Beweismaterial kommt aus dem Gruppenprojekt.

FACHKOMPETENZ (40 Punkte)

Die Studierenden kennen die Grundelemente der prozeduralen Programmierung. (10)

Sie können die Syntax und Semantik von Python (10)

Syntax-of-Code

Dieser Ausschnitt definiert eine Klasse "Bird" in unter Verwendung der Pygame-Bibliothek. Diese Klasse ist eine Unterklasse von "pygame.sprite.Sprite", die eine einfache Basisklasse für sichtbare Spielobjekte in Pygame ist.

Die Methode "__init__" ist der Konstruktor für die Klasse Bird. Sie nimmt zwei Parameter an, x und y, die die Anfangsposition des Vogels darstellen. Innerhalb des Konstruktors ruft die Zeile "pygame.sprite.Sprite.__init__(self)" den Konstruktor der Basisklasse Sprite auf, um sicherzustellen, dass das Bird-Objekt korrekt als Sprite initialisiert wird.

Die Liste "self.images" wird initialisiert, um die verschiedenen Bilder zu speichern, die für die Animation des Vogels verwendet werden sollen. Die Variablen "self.index" und "self.counter" werden auf 0 initialisiert, um zu steuern, welches Bild gerade für den Vogel angezeigt wird, und um den Cooldown zwischen den Bildwechseln zu implementieren.

Die "for-Schleife" lädt drei Bilder aus dem Verzeichnis images mit den Namen bird1.png, bird2.png und bird3.png und fügt sie an die Liste "self.images" an. Das Attribut self.image wird dann zu Beginn, auf das erste Bild in dieser Liste gesetzt.

Das self.rect-Attribut ist ein Pygame Rect-Objekt (Rechteck-Objekt), das für die Kollisionserkennung verwendet wird. Es wird mit den Abmessungen des Bildes initialisiert und sein Mittelpunkt wird auf die dem Konstruktor übergebenen x- und y-Koordinaten gesetzt. Man kann es sich als eine simple 2D Hitbox im Format eines Recheckes vorstellen.

Die Update-Methode wird verwendet, um den Zustand des Vogelobjekts für jedes Bild des Spiels zu aktualisieren. In diesem Fall wird sie verwendet, um die Animation des Vogels zu steuern. Der "self.counter" wird bei jedem Aufruf von update um 1 erhöht. Wenn "self.counter" den Wert flap_cooldown (der auf 5 gesetzt ist) überschreitet, wird "self.counter" auf 0 zurückgesetzt und "self.index" um 1 erhöht. "self.index" wird verwendet, um die Bilder in der Liste "self.images" zu durchlaufen. Wenn "self.index" die Länge von "self.images" überschreitet, wird er auf 0 zurückgesetzt, was zu einer Schleife der Animation führt. Abschließend wird "self.image" auf der Grundlage von "self.index" auf das aktuelle Bild gesetzt, wodurch das Aussehen des Vogels aktualisiert wird.

Sie können ein größeres Programm selbständig entwerfen, programmieren und auf Funktionsfähigkeit testen (Das Projekt im Team) (10)

first-ver second-ver thrid-ver

Sie kennen verschiedene Datenstrukturen und können diese exemplarisch anwenden. (10)

datatypes1

Die erste Variable, white, ist ein Tupel, das die Farbe Weiß im RGB-Format darstellt. Jeder Wert in dem Tupel kann zwischen 0 und 255 liegen, wobei 0 bedeutet, dass diese Farbe keinen Beitrag leistet und 255 den maximalen Beitrag darstellt. (255, 255, 255) steht also für Weiß.

Die Variable ground_scroll wird auf 0 initialisiert und wird verwendet, um das Scrollen des Bodens im Spiel zu steuern. Die Variable scroll_speed ist auf 4 gesetzt und bestimmt die Geschwindigkeit, mit der sich der Boden und die Rohre von rechts nach links bewegen. Die Variablen center_vertical und center_horizontal werden als die Hälfte von screen_width bzw. screen_height berechnet. Diese Variablen stellen wahrscheinlich den Mittelpunkt des Spielbildschirms dar.

Die Variable flying ist ein boolescher Wert, der welcher als Flag dient, um festzustellen, ob der Vogel gerade fliegt. Sie ist zunächst auf False gesetzt, was bedeutet, dass der Vogel zu Beginn des Spiels nicht fliegt.

Die Variable game_over ist ein weiterer boolescher Wert, welcher auch als Flag dient und anzeigt, ob das Spiel zu Ende ist. Dieser Wert ist anfangs ebenfalls auf False gesetzt.

Die Variable pipe_gap ist auf 150 gesetzt, was den vertikalen Abstand zwischen den oberen und unteren Rohren im Spiel angibt.

Die Variable pipe_frequency ist auf 1500 (Millisekunden) gesetzt, was das Zeitintervall zwischen der Erzeugung neuer Rohre darstellt.

Die Variable last_pipe wird auf die aktuelle Zeit minus pipe_frequency gesetzt. Damit wird sichergestellt, dass ein neues Rohrpaar erzeugt wird, wenn 1500 vorüber sind, sowie, wenn das Spiel beginnt.

Die score-Variable wird auf 0 initialisiert und dient dazu, den Punktestand des Spielers festzuhalten.

Die pass_pipe-Variable ist ein weiterer boolescher Wert, der anfangs auf False gesetzt ist. Diese Variable wird verwendet, um zu verfolgen, ob der Vogel ein Rohrpaar erfolgreich durchquert hat.

METHODENKOMPETENZ (10 Punkte)

Die Studierenden können eine Entwicklungsumgebung verwenden um Programme zu erstellen (10)

Copilot verwendet, um sich den Code erklären zu lassen

use-of-copliot copilot

Als Entwicklungsumgebung wurde VS Code verwendet.

use-of-vsc

PERSONALE UND SOZIALE KOMPETENZ (20 Punkte)

Die Studierenden können ihre Software erläutern und begründen. (5)

- Gegenseitiger Support Luis-Vincent

image

- Gegenseitiger Support Philipp-Finn

image

- Gegenseitiger Support Robin-Niklas

Support-Robin-Niklas Support-Robin-Niklas

Sie können existierenden Code analysieren und beurteilen. (5)

Sie können sich selbstständig in Entwicklungsumgebungen und Technologien einarbeiten und diese zur Programmierung und Fehlerbehebung einsetzen. (10)

Wir lernten unglaublich viel über die Pygame Library. Zuerst hat sie uns komplett erschlagen, doch nach etwas recherche und ein paar YouTube Videos haben wir mit der Zeit immer mehr verstanden. Auch über das Arbeiten mit VS Code haben wir noch eine Menge neues erfahren.

ÜBERGREIFENDE HANDLUNGSKOMPETENZ (30 Punkte)

Die Studierenden können eigenständig Problemstellungen der Praxis analysieren und zu deren Lösung Programme entwerfen (30)

Am stolzesten sind wir darauf, dass der Code und somit das Spiel funktioniert. Wenn wir einen Code-Ausschnitt bestimmen müssen wäre es sehr wahrscheinlich schon der, welcher in "Sie können die Syntax und Semantik von Python (10)" als Screenshot dargestellt ist und erklärt ist.

Anfangs hatten wir kaum Ahnung von Pygame, und wussten nicht recht wie wir das schaffen sollen. Wir hatten viele Überlegungen. Zwischendrin kam sogar die Idee auf, nicht vielleicht doch etwas anderes zu machen. Allerdings legte sich die Krise auch wieder. Ein großen Problem war die Implementierung der Animation vom Vogel aber auch wie man am effizientesten die ground-scroll Animation. Schlussendlich haben wir uns für diese Animation des Vogels entschieden, auf welche wir dank eines YT Videos gekommen sind.

Dann blieb nur noch die effiziente ground-scroll Animation das Problem. Diese haben wir aber letztendlich auch in den Griff bekommen. Zuerst haben wir die ganze Zeit die Pipes generiert und diese wurden nach links mit dem Boden gescrollt. Dabei haben wir gemerkt, dass wir deutliche Leistungseinbußen erleiden. Nach etwas Recherche und ein paar Tagen später sind wir auf die glorreiche Idee gekommen, dass man die Pipes, welche den Screen passiert haben wieder rauslöschen kann und diese somit auch nicht mehr geupdated werden müssen. Hier ein Screenshot des Codes:

pipe

Wenn man dies im Nachhinein sieht, kommt es uns fasst schon lächerlich vor, dass ein If-Statement mit 2 Zeilen eine derartig positive Auswirkung haben kann.

Kenntnisse in prozeduraler Programmierung:

- Algorithmenbeschreibung

- Datentypen

datatypes1

- E/A-Operationen und Dateiverarbeitung

input-screen Unter Eingabe versteht man in unserem Projekt die Maus/Tastatur Eingaben, um den Vogel zum fliegen/sprigen zu bringen.

output-screen Unter Ausgabe versteht man in unserem Projekt die Ausgabe des Bildes (screen) als grafische Spieloberfläche.

- Operatoren

Siehe Funktionen.

- Kontrollstrukturen

kontrollstruktur

- Funktionen

function

- Stringverarbeitung

stringverarbeitung

- Strukturierte Datentypen

datatypes1

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages