======Projekt 4 - Catch the Grinch====== In diesem Projekt soll die Aufgabe 3 des ersten Projekts verbessert werden. Im Spiel durchlaufen verschiedene Spielfiguren das Spielfeld von oben nach unten. Ziel ist es dabei, mit der Maus auf den Grinch zu klicken. Zunächst wird mit zwei Figuren gestartet. Bei jedem korrekten Klick erhöht sich im neuen Level die Anzahl der Figuren um 1 und die Geschwindigkeit. Wenn man auf die falsche Figur klickt oder den Grinch nicht trifft, bevor er durchgelaufen ist, hat man verloren. Wenn man den Grinch im letzten Level trifft, hat man gewonnen. {{ :python:pgzero:grinchspiel.png?direct&600 |}} \\ =====Erklärvideo===== {{youtube>fCrF7s74kWI}} \\ =====Quelltext===== Im Ordner der Programmdatei muss sich ein Ordner images mit den Bildern genie.png, homer,png, jerry.png, kermit.png, ninja-turtle.png, und grinch.png befinden. Die Bilder kannst du dir hier: https://icons8.de/icon/set/characters/color herunterladen. Weiterhin muss sich in images ein und ein Hintergrundbild background.png der Größe 800x600 Pixel befinden. Unter dem Quelltextbereich auf dieser Seite kannst du dir noch eine Quelltextdatei mit Erklärkommentaren herunterladen. Es ist trotzdem günstig, wenn du dir vor dem Lösen der Aufgaben das Erklärvideo anschaust. # Catch the Grinch import random FONT_COLOUR = (255, 255, 255) WIDTH = 800 HEIGHT = 600 CENTRE_X = WIDTH // 2 CENTRE_Y = HEIGHT // 2 CENTRE = (CENTRE_X, CENTRE_Y) FINAL_LEVEL = 6 START_SPEED = 10 PLAYFIGURES = ["genie", "homer", "jerry", "kermit", "ninja-turtle"] game_over = False game_complete = False current_level = 1 figures = [] animations = [] def draw(): global figures, current_level, game_over, game_complete screen.clear() screen.blit("background", (0, 0)) if game_over: display_message("GAME OVER!", "Versuche es erneut.") elif game_complete: display_message("DU HAST GEWONNEN!", "Gut gemacht.") else: for figur in figures: figur.draw() def update(): global figures if len(figures) == 0: figures = make_figures(current_level) def make_figures(number_of_extra_figures): playfigures_to_create = get_playfigures_to_create(number_of_extra_figures) new_figures = create_figures(playfigures_to_create) layout_figures(new_figures) animate_figures(new_figures) return new_figures def get_playfigures_to_create(number_of_extra_figures): playfigures_to_create = ["grinch"] for i in range(0, number_of_extra_figures): random_playfigur = random.choice(PLAYFIGURES) playfigures_to_create.append(random_playfigur) return playfigures_to_create def create_figures(playfigures_to_create): new_figures = [] for playfigur in playfigures_to_create: figur = Actor(playfigur) new_figures.append(figur) return new_figures def layout_figures(figures_to_layout): number_of_gaps = len(figures_to_layout) + 1 gap_size = WIDTH // number_of_gaps random.shuffle(figures_to_layout) for index, figur in enumerate(figures_to_layout): new_x_pos = (index + 1) * gap_size figur.x = new_x_pos def animate_figures(figures_to_animate): for figur in figures_to_animate: duration = START_SPEED - current_level figur.anchor = ("center", "bottom") animation = animate(figur, duration=duration, on_finished = handle_game_over, y=HEIGHT) animations.append(animation) def handle_game_over(): global game_over game_over = True def on_mouse_down(pos): global figures, current_level for figur in figures: if figur.collidepoint(pos): if "grinch" in figur.image: grinch_figur_click() else: handle_game_over() def grinch_figur_click(): global current_level, figures, animations, game_complete stop_animations(animations) if current_level == FINAL_LEVEL: game_complete = True else: current_level = current_level + 1 figures = [] animations = [] def stop_animations(animations_to_stop): for animation in animations_to_stop: if animation.running: animation.stop() def display_message(heading_text, sub_heading_text): screen.draw.text(heading_text, fontsize=60, center=CENTRE, color=FONT_COLOUR) screen.draw.text(sub_heading_text, fontsize=30, center=(CENTRE_X, CENTRE_Y + 30), color=FONT_COLOUR) {{ :python:pgzero:grinch-kommentare.zip |Download des Quelltextes mit Kommentaren}} =====Aufgaben===== **Aufgabe 1** Teste das Programm! Verändere dabei die Parameter: * Anzahl Level * Startgeschwindigkeit * Bildschirmgröße und Hintergrund **Aufgabe 2** Verwende eigene Bilder für dein Programm für dein Programm! tausche den Grinch gegen eine andere Figur aus! **Aufgabe 3** Verändere die Animation: Die Bilder können von unten nach oben oder auch von links nach rechts über das Bild laufen.