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:17] jana_wing [4.Termin (17.06.21)] |
ss2021:project2:dokumentation [2021/10/13 16:39] (aktuell) jana_wing [7.Termin (07.10.21)] |
||
---|---|---|---|
Zeile 8: | Zeile 8: | ||
* Bewegtes Viereck in pygame erstellen | * Bewegtes Viereck in pygame erstellen | ||
- | <code python> | ||
- | import pygame | ||
- | import sys | ||
- | import os | ||
- | |||
- | pygame.init() | ||
- | screen = pygame.display.set_mode([600,600]) | ||
- | clock = pygame.time.Clock() #legt fps fest | ||
- | |||
- | def zeichnen(): | ||
- | screen.fill((0,0,0)) #damit Hintergrund schwarz bleibt und nicht angemalt wird | ||
- | pygame.draw.rect(screen, (255,255,0), (x,y,breite,hoehe)) #circle gibts auch | ||
- | pygame.display.update() | ||
- | |||
- | x = 300 | ||
- | y = 300 | ||
- | geschw = 10 | ||
- | breite = 40 | ||
- | hoehe = 40 | ||
- | |||
- | linkeWand = pygame.draw.rect(screen, (0,0,0), (0,0,1,600), 0) #(x-Koordinate,y-Koordinate(linkeEcke),Breite,Länge) | ||
- | rechteWand = pygame.draw.rect(screen, (0,0,0), (599,0,1,600), 0) | ||
- | untereWand = pygame.draw.rect(screen, (0,0,0), (0,599,600,1), 0) | ||
- | obereWand = pygame.draw.rect(screen, (0,0,0), (0,0,600,1), 0) | ||
- | |||
- | |||
- | go = True | ||
- | while go: | ||
- | for event in pygame.event.get(): | ||
- | if event.type == pygame.QUIT: sys.exit() #damit das spiel besser beendet werden kann | ||
- | |||
- | spielerRechteck = pygame.Rect(x,y,breite,hoehe) | ||
- | gedrueckt = pygame.key.get_pressed() | ||
- | if gedrueckt[pygame.K_UP] and not spielerRechteck.colliderect(obereWand): | ||
- | y -= geschw | ||
- | if gedrueckt[pygame.K_RIGHT] and not spielerRechteck.colliderect(rechteWand): | ||
- | x += geschw | ||
- | if gedrueckt[pygame.K_DOWN] and not spielerRechteck.colliderect(untereWand): | ||
- | y += geschw | ||
- | if gedrueckt[pygame.K_LEFT] and not spielerRechteck.colliderect(linkeWand): | ||
- | x -= geschw | ||
- | |||
- | zeichnen() | ||
- | clock.tick(60) | ||
- | </code> | ||
====4. Termin (17.06.21)==== | ====4. Termin (17.06.21)==== | ||
* Äußere Wände erstellt, damit Viereck nicht den screen verlässt* | * Äußere Wände erstellt, damit Viereck nicht den screen verlässt* | ||
Zeile 66: | Zeile 21: | ||
def zeichnen(): | def zeichnen(): | ||
screen.fill((0,0,0)) #damit Hintergrund schwarz bleibt und nicht angemalt wird | screen.fill((0,0,0)) #damit Hintergrund schwarz bleibt und nicht angemalt wird | ||
- | pygame.draw.rect(screen, (255,255,0), (x,y,breite,hoehe)) #circle gibts auch | + | pygame.draw.rect(screen, (255,255,0), (x,y,breite,hoehe)) #der Spieler |
pygame.display.update() | pygame.display.update() | ||
| | ||
Zeile 75: | Zeile 30: | ||
hoehe = 40 | hoehe = 40 | ||
| | ||
+ | #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 104: | 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 281: | 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 | ||
- | * Fertiges Spiel mit allen benötigten Dateien: | + | * Präsentation machen und üben |
- | * {{:ss2021:project2:4d_labyrinth_spiel.zip|}} | + | |
- | Es muss "Spiel" ausgeführt werden | + | |
+ | ==== Fertiges Spiel Zip-Datei ==== | ||
+ | |||
+ | * Es muss "Spiel" ausgeführt werden | ||
+ | |||
+ | {{:ss2021:project2:4d_labyrinth_spiel.zip|}} | ||