lehrkraefte:snr:informatik:glf22:python:while

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:snr:informatik:glf22:python:while [2022/10/25 11:38]
Olaf Schnürer [Aufgabe: Zahlenraten]
lehrkraefte:snr:informatik:glf22:python:while [2022/10/25 12:05]
Olaf Schnürer [Sehr nette Bonus-Aufgabe: Game loop oder: Mein erstes Spiel]
Line 236: Line 236:
 ---- ----
  
-  * (4) Das Spiel endet, wenn die Schlange auf das Feld mit der roten Box kommt (die Schlange frisst den Apfel). +  * (4) Wenn die Schlange auf das Feld mit der roten Box kommt (die Schlange frisst den Apfel), soll ein neuer Apfel an einer neuen Position erzeugt werden
   * (5) Drücken der Taste "f" (wie Farbe) zum Farbwechsel der Schlange auf Blau bzw. zurück auf Grün führt.   * (5) Drücken der Taste "f" (wie Farbe) zum Farbwechsel der Schlange auf Blau bzw. zurück auf Grün führt.
 +
 +<hidden Lösungsvorschlag>
 +<code python aepfel-fressen.py>
 +# Strongly inspired by a program by Al Sweigart, see
 +# https://inventwithpython.com/pygame/chapter6.html
 +# Creative Commons BY-NC-SA 3.0 US
 +
 +import random, pygame
 +from pygame.locals import *
 +
 +FRAMES_PER_SECOND = 30
 +
 +ANZAHL_BOXEN_X = 10
 +ANZAHL_BOXEN_Y = 6
 +
 +BOX_BREITE = 60
 +BOX_HOEHE = 60
 +
 +FENSTER_BREITE = ANZAHL_BOXEN_X * BOX_BREITE
 +FENSTER_HOEHE = ANZAHL_BOXEN_Y * BOX_HOEHE
 +
 +# Farben per Rot-, Grün- und Blauwert
 +# (jeweils auf Skala von 0 bis 255).
 +#          rot  grün  blau
 +ROT     = (255,    0,    0)
 +GRUEN   = (  0,  255,    0)
 +BLAU    = (  0,    0,  255)
 +WEISS   = (255,  255,  255)
 +SCHWARZ = (  0,    0,    0)
 +GRAU    = (150,  150,  150)
 +HINTERGRUND_FARBE = SCHWARZ
 +
 +def zeichneBox(x, y, farbe):
 +    rechteck = pygame.Rect(x * BOX_BREITE + 1, y * BOX_HOEHE + 1, BOX_BREITE - 1, BOX_HOEHE - 1)
 +    pygame.draw.rect(leinwand, farbe, rechteck)
 +
 +def zeichneGitter():
 +    for x in range(ANZAHL_BOXEN_X + 1):
 +        pygame.draw.line(leinwand, GRAU, (x * BOX_BREITE, 0), (x * BOX_BREITE, FENSTER_HOEHE))
 +    for y in range(ANZAHL_BOXEN_Y + 1):
 +        pygame.draw.line(leinwand, GRAU, (0, y * BOX_HOEHE), (FENSTER_BREITE, y * BOX_HOEHE))
 +
 +pygame.init()
 +uhr = pygame.time.Clock()
 +leinwand = pygame.display.set_mode((FENSTER_BREITE + 1, FENSTER_HOEHE + 1))
 +pygame.display.set_caption('Green box')
 +
 +xSpieler = random.randint(0, ANZAHL_BOXEN_X - 1)
 +ySpieler = random.randint(0, ANZAHL_BOXEN_Y - 1)
 +farbeSpieler = GRUEN
 +
 +xApfel = random.randint(0, ANZAHL_BOXEN_X - 1)
 +yApfel = random.randint(0, ANZAHL_BOXEN_Y - 1)
 +while (xSpieler == xApfel) and (ySpieler == yApfel):
 +    xApfel = random.randint(0, ANZAHL_BOXEN_X - 1)
 +    yApfel = random.randint(0, ANZAHL_BOXEN_Y - 1)
 +
 +fensterSchliessen = False
 +while not fensterSchliessen:
 +    leinwand.fill(HINTERGRUND_FARBE)
 +    zeichneGitter()
 +    zeichneBox(xApfel, yApfel, ROT)
 +    zeichneBox(xSpieler, ySpieler, farbeSpieler)
 +    pygame.display.update()
 +    uhr.tick(FRAMES_PER_SECOND)
 +
 +    for ereignis in pygame.event.get():
 +        if ereignis.type == QUIT:
 +            print("Button zum Schliessen des Pygame-Fensters angeklickt.")
 +            fensterSchliessen = True
 +        elif ereignis.type == KEYDOWN:
 +            if ereignis.key == K_LEFT:
 +                print("Pfeiltaste links gedrückt.")
 +                if xSpieler > 0:
 +                    xSpieler = xSpieler - 1
 +            elif ereignis.key == K_RIGHT:
 +                print("Pfeiltaste rechts gedrückt.")
 +                if xSpieler < ANZAHL_BOXEN_X - 1:
 +                    xSpieler = xSpieler + 1
 +            elif ereignis.key == K_UP:
 +                print("Pfeiltaste hoch gedrückt.")
 +                if ySpieler > 0:            
 +                    ySpieler = ySpieler - 1
 +            elif ereignis.key == K_DOWN:
 +                print("Pfeiltaste runter gedrückt.")
 +                if ySpieler < ANZAHL_BOXEN_Y - 1:
 +                    ySpieler = ySpieler + 1
 +            elif ereignis.key == K_ESCAPE:
 +                print("Escape-Taste gedrückt.")
 +                fensterSchliessen = True
 +            elif ereignis.key == K_q:
 +                print("Taste 'q' gedrückt.")
 +                fensterSchliessen = True
 +            elif ereignis.key == K_f:
 +                if farbeSpieler == GRUEN:
 +                    farbeSpieler = BLAU
 +                else:
 +                    farbeSpieler = GRUEN 
 +    if xSpieler == xApfel and ySpieler == yApfel:
 +        print("Apfel gefressen.")
 +        xApfel = random.randint(0, ANZAHL_BOXEN_X - 1)
 +        yApfel = random.randint(0, ANZAHL_BOXEN_Y - 1)
 +        while (xSpieler == xApfel) and (ySpieler == yApfel):
 +            xApfel = random.randint(0, ANZAHL_BOXEN_X - 1)
 +            yApfel = random.randint(0, ANZAHL_BOXEN_Y - 1)
 +</code>
 +</hidden>
 +
 +----
 +
  
 Bonus-Aufgaben (such dir aus, was dir gefällt): Bonus-Aufgaben (such dir aus, was dir gefällt):
   * (6) Wenn die grüne Box einen Spielfeldrand erreicht und weiter in diese Richtung gesteuert wird, erscheint sie am gegenüberliegenden Spielfeldrand.   * (6) Wenn die grüne Box einen Spielfeldrand erreicht und weiter in diese Richtung gesteuert wird, erscheint sie am gegenüberliegenden Spielfeldrand.
-  * (7) Wenn der Apfel gefressen wird, wird er an einer neuen Position erzeugt und die "Schlange" bekommt 100 Punkte gutgeschrieben. Den aktuellen Punktestand kannst du im Terminal ausgeben.+  * (7) Für jeden gefressenen Apfel bekommt die Schlange 100 Punkte gutgeschrieben. Den aktuellen Punktestand kannst du im Terminal ausgeben.
   * (8) Der Apfel kann der Schlange davonlaufen: Steuere den Apfel etwa mit den Tasten "a", "s", "d", "w".   * (8) Der Apfel kann der Schlange davonlaufen: Steuere den Apfel etwa mit den Tasten "a", "s", "d", "w".
   * (9) Sei kreativ und erweitere das Spiel!   * (9) Sei kreativ und erweitere das Spiel!
   * (10) Die Schlange läuft stets mit konstanter Geschwindigkeit (auch wenn keine Taste gedrückt wird). Drücken der Pfeiltasten ändert nur die Richtung.   * (10) Die Schlange läuft stets mit konstanter Geschwindigkeit (auch wenn keine Taste gedrückt wird). Drücken der Pfeiltasten ändert nur die Richtung.
-  * (11) Wenn du Snake programmieren willst, solltest du lernen, was Listen sind! ... vermutlich kommt das im nächsten Abschnitt dran ...+  * (11) Wenn du Snake programmieren willst, solltest du lernen, was Listen sind! ... vermutlich kommt das in einem der folgenden Abschnitte dran ...
 </WRAP> </WRAP>
  
  • lehrkraefte/snr/informatik/glf22/python/while.txt
  • Last modified: 2022/10/25 12:05
  • by Olaf Schnürer