Benutzer-Werkzeuge

Webseiten-Werkzeuge


ss2021:project2:dokumentation

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

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
  
  
ss2021/project2/dokumentation.1634134902.txt.gz · Zuletzt geändert: 2021/10/13 16:21 von jana_wing