Pygame - Aufgaben 2
|
In dieser Aufgabe sollst du dein erstes Spiel entwickeln. Vom "Himmel" fallen Bälle herunter, die du möglichst schnell entfernst, indem du mit der Maus darauf klickst. Verschwindet ein Ball aus der Zeichnfläche wird er automatisch wieder nach oben gesetzt und erscheint wieder. Das Spiel soll beendet sein, wenn alle Bälle geklickt wurden. Die Zeit, die du benötigst, wird gemessen (s. Video).
|
|
|
Auf der Zeichenfläche befindet sich eine Röhre in Form eines Rechtecks und ein Kreis. Der Kreis soll mit der Maus bis zum Ende der Röhre bewegt werden, ohne dass der Rand der Röhre berührt wird. Im Falle einer Berührung wird das Programm beendet. Schreibe ein Python-Programm. Der Kreis berührt den Röhrenrand, wenn er nicht vollständig in der Röhre liegt. |
|
Aufgabe 3 |
|
|
Auf der Zeichenfläche befinden sich ein Kreis und ein Quadrat. Der Durchmesser des Kreises ist etwas kleiner als die Seitenlänge des Quadrats. Der Kreis kann mit der Maus verschoben werden. Das Programm ist beendet, wenn der Kreis vollständig im Quadrat liegt.
Verwende Programm 10 als Grundlage Die folgende Funktion prüft, ob ein Kreis vollständig in einem Rechteck liegt. def circle_in_rect(circle, rect): radius = circle["radius"] d1 = circle["x"]-rect["r"][0] d2 = rect["r"][0]+rect["r"][2]-circle["x"] d3 = circle["y"]-rect["r"][1] d4 = rect["r"][1]+rect["r"][2]-circle["y"] return d1 > radius and d2 > radius and d3 > radius and d4 > radius |
|
Aufgabe 4 |
|
|
Auf dem Tablet kann man nicht die rechte Maustaste drücken, um ein Pygame-Programm zu beenden. Dies soll durch einen Button möglich sein.
|
![]() |
|
In dieser Aufgabe sollst du dass Malen-Programm (Programm 12) erweitern
|
![]() |
|
a. Starte das folgende Programm in WebTigerPython und analysiere es sorgfältig. b. Fülle den folgenden Lückentext aus.
Mit dem Programm kann man mit der Maus Linien zeichnen. Eine Linie beginnt an der Position, an der die linke Maustaste wurde und endet an der Postion, an der die Maustaste wurde. Während die Maustaste gedrückt ist, wird eine Linie vom Startpunkt bis zur aktuellen gezeichnet. Wenn die Maustaste losgelassen wird, wird die Linie endgültig in gezeichnet. Die Variable hat als Wert den Anfangspunkt einer Linie und den momentanen Endpunkt. Die Variable wird auf True gesetzt, wenn die Maustaste losgelassen wurde. Die Variable hat solange den Wert wie die linke Maustaste gedrückt ist. Alle diese Variablen erhalten ihre Werte als Rückgabe von der Funktion . Die gezeichneten Linien werden in einer Liste mit dem Namen gespeichert. Jede Linie wird als in die Liste eingefügt. Das Programm wird durch Drücken der Maustaste beendet. gerade gedrückt losgelassen blaue Mausposition rot from_pos to_pos new_line linke drawing True handle_events lines Dictionary rechten krumme c. Verändere das Programm so, das nicht Linien, sondern nicht gefüllte Rechtecke mit der Liniebreite 3 gezeichnet werden. Du musst lediglich die Funktionen get_line, draw_line in get_rect und draw_rect ändern und die Koordinaten des Linienendpunktes durch Breite und Höhe des Rechtecks ersetzen. Außerdem muss du in der Funktion main einige Namen und die Aufrufe dieser Funktionen ändern.
|
Aufgabe 7 |
|
|
Mit folgendem (unvollständigen) Programm, soll sich eine Kugel auf der Zeichenfläche bewegen und an den Rändern abprallen. Den blauen Schläger, an dem die Kugel abprallt, kann man mit der Rechts- und der Linkspfeiltaste bewegen. Es soll verhindert werden, dass die Kugel den unteren Rand berührt.
|
|
import pygame
WIDTH = 650
HEIGHT = 450
WHITE = (255, 255, 255)
BLACK = (0, 0, 0, 0)
RED = (255, 0, 0, 0)
GREEN= (0, 255, 0)
BLUE = (0, 0, 255)
LIGHTGREY = (240, 240, 240)
def init():
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
screen.fill(LIGHTGREY) # Schwarzer Hintergrund
pygame.display.flip()
return screen
def get_circle_dict(x, y, r, col, dx, dy):
return {"x":x, "y":y, "radius": r, "color":col,"dx":dx, "dy":dy}
def draw_circle(screen,c):
pygame.draw.circle(screen, c["color"], ( c["x"],c["y"]), c["radius"])
def get_rect_dict(x, y, w, h, col, dx, dy):
return {"x":x, "y":y, "width": w, "height": h, "color":col,"dx":dx, "dy":dy}
def draw_rect(screen,r):
pygame.draw.rect(screen, r["color"], ( r["x"],r["y"], r["width"], r["height"]))
def move_rect(keys_pressed, rect):
if keys_pressed[pygame.K_LEFT]:
if rect["x"] > 0:
rect["x"] = rect["x"] - rect["dx"]
elif keys_pressed[pygame.K_RIGHT]:
if rect["x"]+rect["width"]<=WIDTH:
rect["x"] = rect["x"] + rect["dx"]
return rect
def move_circle(circle):
circle["x"] = circle["x"] + circle["dx"]
circle["y"] = circle["y"] + circle["dy"]
return circle
def edge_left_right(circle):
if circle["x"] + circle["radius"] >= WIDTH or circle["x"] - circle["radius"] <= 0:
circle["dx"] = circle["dx"] * -1
return circle
def edge_up_down(circle):
if circle["y"] + circle["radius"] > HEIGHT or circle["y"] - circle["radius"] < 0:
circle["dy"] = circle["dy"] * -1
return circle
def handle_events(keys_pressed):
#hier vervollständigen
return True, keys_pressed
def circle_intersects_rect(c, r):
if c["y"]+c["radius"]>=r["y"] and c["x"] >= r["x"] and r["x"]+r["width"]>=c["x"]:
#c["dx"]=c["dx"]* -1
c["dy"]=c["dy"]* -1
return c
def main():
clock = pygame.time.Clock()
screen = init()
circle = get_circle_dict(200, 300, 15, RED,3, 3)
rect = get_rect_dict(WIDTH // 2 - 60, HEIGHT - 30, 120, 15, BLUE, 5, 0)
running = True
keys_pressed = {pygame.K_RIGHT:False, pygame.K_LEFT:False, pygame.K_UP:False,pygame.K_DOWN:False}
while running:
screen.fill(LIGHTGREY)
running, keys_pressed = handle_events(keys_pressed)
draw_rect(screen,rect)
rect = move_rect(keys_pressed,rect)
circle =#vervollständigen
circle = #vervollständigen
circle =#vervollständigen
circle =#vervollständigen
draw_circle(screen, circle)
clock.tick(60)
pygame.display.flip()
pygame.quit()
main()
Tipp
Hinweis 1


Aufgabe 3 


