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
Last revision Both sides next 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:03]
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):
  • lehrkraefte/snr/informatik/glf22/python/while.txt
  • Last modified: 2022/10/25 12:05
  • by Olaf Schnürer