Differences
This shows you the differences between two versions of the page.
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 " | * (5) Drücken der Taste " | ||
+ | |||
+ | <hidden Lösungsvorschlag> | ||
+ | <code python aepfel-fressen.py> | ||
+ | # Strongly inspired by a program by Al Sweigart, see | ||
+ | # https:// | ||
+ | # 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, | ||
+ | rechteck = pygame.Rect(x * BOX_BREITE + 1, y * BOX_HOEHE + 1, BOX_BREITE - 1, BOX_HOEHE - 1) | ||
+ | pygame.draw.rect(leinwand, | ||
+ | |||
+ | def zeichneGitter(): | ||
+ | for x in range(ANZAHL_BOXEN_X + 1): | ||
+ | pygame.draw.line(leinwand, | ||
+ | for y in range(ANZAHL_BOXEN_Y + 1): | ||
+ | pygame.draw.line(leinwand, | ||
+ | |||
+ | pygame.init() | ||
+ | uhr = pygame.time.Clock() | ||
+ | leinwand = pygame.display.set_mode((FENSTER_BREITE + 1, FENSTER_HOEHE + 1)) | ||
+ | pygame.display.set_caption(' | ||
+ | |||
+ | xSpieler = random.randint(0, | ||
+ | ySpieler = random.randint(0, | ||
+ | farbeSpieler = GRUEN | ||
+ | |||
+ | xApfel = random.randint(0, | ||
+ | yApfel = random.randint(0, | ||
+ | while (xSpieler == xApfel) and (ySpieler == yApfel): | ||
+ | xApfel = random.randint(0, | ||
+ | yApfel = random.randint(0, | ||
+ | |||
+ | fensterSchliessen = False | ||
+ | while not fensterSchliessen: | ||
+ | leinwand.fill(HINTERGRUND_FARBE) | ||
+ | zeichneGitter() | ||
+ | zeichneBox(xApfel, | ||
+ | zeichneBox(xSpieler, | ||
+ | pygame.display.update() | ||
+ | uhr.tick(FRAMES_PER_SECOND) | ||
+ | |||
+ | for ereignis in pygame.event.get(): | ||
+ | if ereignis.type == QUIT: | ||
+ | print(" | ||
+ | fensterSchliessen = True | ||
+ | elif ereignis.type == KEYDOWN: | ||
+ | if ereignis.key == K_LEFT: | ||
+ | print(" | ||
+ | if xSpieler > 0: | ||
+ | xSpieler = xSpieler - 1 | ||
+ | elif ereignis.key == K_RIGHT: | ||
+ | print(" | ||
+ | if xSpieler < ANZAHL_BOXEN_X - 1: | ||
+ | xSpieler = xSpieler + 1 | ||
+ | elif ereignis.key == K_UP: | ||
+ | print(" | ||
+ | if ySpieler > 0: | ||
+ | ySpieler = ySpieler - 1 | ||
+ | elif ereignis.key == K_DOWN: | ||
+ | print(" | ||
+ | if ySpieler < ANZAHL_BOXEN_Y - 1: | ||
+ | ySpieler = ySpieler + 1 | ||
+ | elif ereignis.key == K_ESCAPE: | ||
+ | print(" | ||
+ | fensterSchliessen = True | ||
+ | elif ereignis.key == K_q: | ||
+ | print(" | ||
+ | fensterSchliessen = True | ||
+ | elif ereignis.key == K_f: | ||
+ | if farbeSpieler == GRUEN: | ||
+ | farbeSpieler = BLAU | ||
+ | else: | ||
+ | farbeSpieler = GRUEN | ||
+ | if xSpieler == xApfel and ySpieler == yApfel: | ||
+ | print(" | ||
+ | xApfel = random.randint(0, | ||
+ | yApfel = random.randint(0, | ||
+ | while (xSpieler == xApfel) and (ySpieler == yApfel): | ||
+ | xApfel = random.randint(0, | ||
+ | yApfel = random.randint(0, | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | |||
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 | + | * (7) Für jeden gefressenen |
* (8) Der Apfel kann der Schlange davonlaufen: | * (8) Der Apfel kann der Schlange davonlaufen: | ||
* (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 | + | * (11) Wenn du Snake programmieren willst, solltest du lernen, was Listen sind! ... vermutlich kommt das in einem der folgenden Abschnitte |
</ | </ | ||