Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
talit:python_pygame [2022-08-24 11:53] scatalit:python_pygame [2024-08-08 12:37] (aktuell) – [2.1 Tutorial] sca
Zeile 42: Zeile 42:
 Für dein/euer PyGame-Projekt ist es Pflicht, dieses **objektorientiert** zu programmieren. Verwende dafür das **Template** unten. Theoretisch kann man das ganze Game in einem einzigen File programmieren. Gerade für grössere Projekte und wenn man zusammen am gleichen Code arbeitet, so lohnt es sich, das Projekt auf mehrere Files aufzuteilen. Wir verfolgen hier den Grundsatz: **für jede Klasse ein eigenes File**. Für dein/euer PyGame-Projekt ist es Pflicht, dieses **objektorientiert** zu programmieren. Verwende dafür das **Template** unten. Theoretisch kann man das ganze Game in einem einzigen File programmieren. Gerade für grössere Projekte und wenn man zusammen am gleichen Code arbeitet, so lohnt es sich, das Projekt auf mehrere Files aufzuteilen. Wir verfolgen hier den Grundsatz: **für jede Klasse ein eigenes File**.
  
-{{ :talit:template_pygame_2022.zip |Template herunterladen}}+{{ :talit:template_pygame_2022_v02.zip |Template herunterladen}}
  
 <nodisp 1> <nodisp 1>
 ++++Template anzeigen| ++++Template anzeigen|
 +
 <code python main.py> <code python main.py>
 from settings import Settings from settings import Settings
Zeile 57: Zeile 58:
 - for VSC: template includes launch.json file which includes line '"program": "main.py",' -> always launch this file - for VSC: template includes launch.json file which includes line '"program": "main.py",' -> always launch this file
 """ """
- 
-os.chdir(sys.path[0]) # changes current working directory to file directory 
  
 if __name__ == "__main__": if __name__ == "__main__":
 +    os.chdir(sys.path[0]) # changes current working directory to file directory
 +
     # define some settings     # define some settings
     settings_default = Settings()     settings_default = Settings()
     settings_slow = Settings(speed=1)     settings_slow = Settings(speed=1)
  
-    print(Settings.__doc__) # use .__doc__ to access doc string of class +    # create game object and play
- +
-    # create game object +
     game = Game(settings_default)     game = Game(settings_default)
-    # and play 
     game.play()     game.play()
 </code> </code>
Zeile 80: Zeile 78:
     """     """
     def __init__(self,win_height=800,win_width=500,bg_color=(255,255,255),fps=30,speed=12):     def __init__(self,win_height=800,win_width=500,bg_color=(255,255,255),fps=30,speed=12):
 +        self.NAME = "sloppy bird"
 +
         # WINDOWS SIZE         # WINDOWS SIZE
         self.WIN_HEIGHT = win_height         self.WIN_HEIGHT = win_height
         self.WIN_WIDTH = win_width         self.WIN_WIDTH = win_width
                  
 +        # COLOR SETTINGS
         self.BG_COLOR = bg_color         self.BG_COLOR = bg_color
          
Zeile 110: Zeile 111:
         self.settings = settings         self.settings = settings
         self.time_delay = self.settings.TIME_DELAY         self.time_delay = self.settings.TIME_DELAY
-        self.screen pygame.display.set_mode((self.settings.WIN_WIDTH, self.settings.WIN_HEIGHT)) # create screen which will display everything +        size = (self.settings.WIN_WIDTH, self.settings.WIN_HEIGHT) 
-        self.win = pygame.display.set_mode((self.settings.WIN_WIDTH, self.settings.WIN_HEIGHT)+        self.screen = pygame.display.set_mode(size) # create screen which will display everything 
-        pygame.display.set_caption("Bouncing Balls") # Game title+        self.win = pygame.display.set_mode(size
 +        pygame.display.set_caption(self.settings.NAME) # Game title
    
     def quit(self):     def quit(self):
Zeile 146: Zeile 148:
             if keys[pygame.K_UP]:             if keys[pygame.K_UP]:
                 player.rect.top -= self.settings.SPEED                 player.rect.top -= self.settings.SPEED
 +            if keys[pygame.K_DOWN]:
 +                player.rect.top += self.settings.SPEED
             # and so on ...             # and so on ...
    
Zeile 237: Zeile 241:
         pass         pass
 </code> </code>
 +
  
 ++++ ++++
 </nodisp> </nodisp>
 +
 +
 +==== - Tutorial ====
 +
 +Ziel von diesem Tutorial ist, dich in PyGame anhand des Templates von oben einzuarbeiten.
 +
 +   1. **Installiere** PyGame (mit pip)
 +   1. Lade das **Template-Spiel** herunter und stelle sicher, dass du es ausführen kannst. Du solltest ein Flugzeug und ein paar farbige Bälle sehen.
 +   1. Verschaffe dir einen **Überblick** über das Projekt. Es geht nicht darum, jede einzelne Code-Zeile zu verstehen, sondern darum, das Big Picture zu verstehen:
 +      1. Welches File muss man ausführen, wenn man das Spiel starten möchte? Was passiert darin?
 +      1. Das Herzstück ist die `play`-Methode in der Game-Klasse. Darin befindet sich der **Game-Loop** - eine Endlosschleife (`while True`). In dieser steht der Code, der während dem Spiel in der Dauerschleife ausgeführt wird. Verschaffe dir darin eine Übersicht.
 +      1. Es gibt noch weitere Files wie `setting.py` oder `ball.py`. Wozu sind diese da?
 +      1. In `player.py` und `ball.py` gibt es zwei Methoden: Update und Collide. Wozu?
 +   1. **Erweitere** das Spiel nun wie folgt:
 +      1. Füge noch **zwei rote Bälle** hinzu. Dazu muss zuerst ein Bild von einem roten Ball erstellt werden und in den `data`-Ordner abgelegt werden. Beachte, dass das gleiche Bild dann für beide roten Bälle im Spiel verwendet wird.
 +      1. Ändere das **Bild des Players** (aktuell Flugzeug). Finde ein lustiges Bild im Internet. Wichtig: Das Bild soll einen transparenten Hintergrund haben. Z.B. kann man man mit Photoshop den Hintergrund transparent machen.
 +      1. Füge dem Game ein **Hintergrundbild** hinzu.
 +      1. Den Player soll man nun auch noch nach **links und rechts** bewegen. Implementiere dies in der `play`-Methode, da hier die ganzen Inputs verarbeitet werden sollen.
 +      1. Der Player soll aber nicht aus dem Bild verschwinden können. Erreicht er z.B. den linken Rand, soll er sich nicht weiter nach links bewegen. Implementiere dies in der `update`-Methode des Players. Diese wird bei jedem Durchgangs Game-Loops ausgeführt.
 +      1. Implementiere eine **Collision**: Sobald der Player mit einem Ball kollidiert, soll dieser Ball verschwinden.
 +   
 +
  
 ===== - Projekt ===== ===== - Projekt =====
  • talit/python_pygame.1661341980.txt.gz
  • Zuletzt geändert: 2022-08-24 11:53
  • von sca