Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ss2021:project2:dokumentation [2021/10/13 16:21] jana_wing [4.Termin (17.06.21)] |
ss2021:project2:dokumentation [2021/10/13 16:39] (aktuell) jana_wing [7.Termin (07.10.21)] |
||
---|---|---|---|
Zeile 31: | Zeile 31: | ||
| | ||
#Die Wände um den Screen | #Die Wände um den Screen | ||
- | | ||
linkeWand = pygame.draw.rect(screen, (0,0,0), (0,0,1,600), 0) #(x-Koordinate,y-Koordinate(linke | linkeWand = pygame.draw.rect(screen, (0,0,0), (0,0,1,600), 0) #(x-Koordinate,y-Koordinate(linke | ||
Ecke),Breite,Länge) | Ecke),Breite,Länge) | ||
Zeile 61: | Zeile 60: | ||
====5. Termin (24.06.21)==== | ====5. Termin (24.06.21)==== | ||
* Innenwände vom Labyrinth in pygame erstellt und „undurchdringbar“ für den Spieler gemacht | * Innenwände vom Labyrinth in pygame erstellt und „undurchdringbar“ für den Spieler gemacht | ||
- | ====6. Termin (01.07.21)==== | + | * Klasse für den Spieler erstellt |
- | * Start und Endbildschirm für pygame und Besprechung mit Gruppe 1 | + | |
+ | <code python> | ||
+ | import os #Modul mit Funktionen fürs Betriebssystem | ||
+ | import sys #liefert Funktionen und Variablen | ||
+ | import random | ||
+ | import pygame | ||
+ | | ||
+ | #Klasse für den spieler | ||
+ | class Spieler(object): | ||
+ | | ||
+ | def init(self): | ||
+ | self.rect = pygame.Rect(32, 32, 16, 16) #SpielerRechteck wird erzeugt | ||
+ | | ||
+ | def move(self, dx, dy): | ||
+ | | ||
+ | if dx != 0: | ||
+ | self.move_single_axis(dx, 0) #Spielerrechteck wird in dx Richtung bewegt | ||
+ | if dy != 0: | ||
+ | self.move_single_axis(0, dy) | ||
+ | | ||
+ | def move_single_axis(self, dx, dy): | ||
+ | | ||
+ | self.rect.x += dx | ||
+ | self.rect.y += dy | ||
+ | | ||
+ | #Wandkollisionen abchecken | ||
+ | for wall in walls: | ||
+ | if self.rect.colliderect(wall.rect): | ||
+ | if dx > 0: #Bewegung nach rechts, linke Seite der Wand | ||
+ | self.rect.right = wall.rect.left | ||
+ | if dx < 0: #Bewegung nach links, linke Seite der Wand | ||
+ | self.rect.left = wall.rect.right | ||
+ | if dy > 0: #Bewegung nach untem, obere Seite der Wand | ||
+ | self.rect.bottom = wall.rect.top | ||
+ | if dy < 0: #Bewegung nach oben, untere Seite der Wand | ||
+ | self.rect.top = wall.rect.bottom | ||
+ | | ||
+ | </code> | ||
+ | |||
+ | <code python> | ||
+ | | ||
+ | #Klasse für Wände | ||
+ | class Wall(object): | ||
+ | def __init__(self, pos): | ||
+ | walls.append(self) | ||
+ | self.rect = pygame.Rect(pos[0], pos[1], 16, 16) | ||
+ | |||
+ | #Spiel wird initialisiert | ||
+ | os.environ["SDL_VIDEO_CENTERED"] = "1" #Fenster wird in der Mitte des Bildschirms platziert | ||
+ | pygame.init() | ||
+ | |||
+ | #Display-Einstellungen | ||
+ | pygame.display.set_caption("Finde den Ausgang des Labyrinths!") | ||
+ | screen = pygame.display.set_mode((320,240)) | ||
+ | |||
+ | clock = pygame.time.Clock() | ||
+ | walls = [] #auf die Liste wird in der Klasse zugegriffen | ||
+ | spieler = Spieler() | ||
+ | |||
+ | #Levellayout als string | ||
+ | level = [ | ||
+ | "WWWWWWWWWWWWWWWWWWWW", | ||
+ | "W W", | ||
+ | "W WWW WWW WWWWWWWW", | ||
+ | "W W W W W W W", | ||
+ | "WW WW W W W WWWW W", | ||
+ | "W W W W W W W", | ||
+ | "W WW WWWWWWWW W WW W", | ||
+ | "W W W W W", | ||
+ | "W WWWWWWWWWWWWW W WW", | ||
+ | "W W W W W", | ||
+ | "W WWW W W WW WWW W", | ||
+ | "W WWWWW WWW W", | ||
+ | "W WWW W W WWWWWW", | ||
+ | "W W W W W W", | ||
+ | "WWWWWWWWWWWEWWWWWWWW", | ||
+ | ] | ||
+ | |||
+ | #W als Wand definieren und E als Ausgang | ||
+ | x = y = 0 | ||
+ | for row in level: | ||
+ | for col in row: #einzelnen Einträge in der Reihe werden nach und nach überprüft | ||
+ | if col == "W": | ||
+ | Wall((x, y)) #es wird auf Wall Klasse zugegriffen | ||
+ | if col == "E": | ||
+ | end_rect = pygame.Rect(x, y, 16, 16) | ||
+ | x += 16 #immer 16, da ein Buchstabe 16 Pixel entspricht | ||
+ | y += 16 | ||
+ | x = 0 | ||
+ | |||
+ | running = True | ||
+ | while running: | ||
+ | |||
+ | clock.tick(60) #Zeit wird festgelegt | ||
+ | |||
+ | for e in pygame.event.get(): #alles was der Nutzer macht | ||
+ | if e.type == pygame.QUIT: | ||
+ | running = False | ||
+ | if e.type == pygame.KEYDOWN and e.key == pygame.K_ESCAPE: #spiel beenden mit esc | ||
+ | running = False | ||
+ | |||
+ | #Spieler bewegen | ||
+ | key = pygame.key.get_pressed() | ||
+ | if key[pygame.K_LEFT]: | ||
+ | spieler.move(-2, 0) | ||
+ | if key[pygame.K_RIGHT]: | ||
+ | spieler.move(2, 0) | ||
+ | if key[pygame.K_UP]: | ||
+ | spieler.move(0, -2) | ||
+ | if key[pygame.K_DOWN]: | ||
+ | spieler.move(0, 2) | ||
+ | |||
+ | #Spiel beenden durch berühren des roten Rechtecks | ||
+ | if spieler.rect.colliderect(end_rect): | ||
+ | pygame.quit() | ||
+ | sys.exit() | ||
+ | |||
+ | #Farben und so | ||
+ | screen.fill((0, 0, 0)) | ||
+ | for wall in walls: | ||
+ | pygame.draw.rect(screen, (255, 255, 255),wall.rect) | ||
+ | pygame.draw.rect(screen, (0, 0, 0), end_rect) | ||
+ | pygame.draw.rect(screen, (255, 200, 0), spieler.rect) | ||
+ | pygame.display.flip() #nur Teil des screens wird geupdatet | ||
+ | clock.tick(360) | ||
+ | |||
+ | pygame.quit() | ||
+ | |||
+ | </code> | ||
+ | ====6. Termin (01.07.21)==== | ||
+ | * Start und Endbildschirm für pygame und Besprechung mit Gruppe 1 | ||
+ | <code python> | ||
import os #Modul mit Funktionen fürs Betriebssystem | import os #Modul mit Funktionen fürs Betriebssystem | ||
import sys #liefert Funktionen und Variablen | import sys #liefert Funktionen und Variablen | ||
Zeile 238: | Zeile 367: | ||
| | ||
pygame.quit() | pygame.quit() | ||
+ | </code> | ||
====7.Termin (07.10.21)==== | ====7.Termin (07.10.21)==== | ||
* "Randomizen" des Labyrinths durch Material von Gruppe 1 | * "Randomizen" des Labyrinths durch Material von Gruppe 1 | ||
+ | * Präsentation machen und üben | ||