So programmieren Sie ein Spiel in Python mit Pygame (mit Bildern)

Inhaltsverzeichnis:

So programmieren Sie ein Spiel in Python mit Pygame (mit Bildern)
So programmieren Sie ein Spiel in Python mit Pygame (mit Bildern)

Video: So programmieren Sie ein Spiel in Python mit Pygame (mit Bildern)

Video: So programmieren Sie ein Spiel in Python mit Pygame (mit Bildern)
Video: Python Datei in EXE umwandeln 2024, April
Anonim

Dies ist eine Einführung in Pygame für Leute, die Python bereits kennen. In diesem Artikel erfahren Sie, wie Sie ein einfaches Spiel erstellen, bei dem der Spieler springenden Bällen ausweicht.

Schritte

Teil 1 von 8: Pygame installieren

Schritt 1. Laden Sie Pygame herunter

Finden Sie es für Ihre Plattform unter

Schritt 2. Führen Sie das Installationsprogramm aus

Schritt 3. Überprüfen Sie, ob die Installation funktioniert hat

Öffnen Sie ein Python-Terminal. Geben Sie "pygame importieren" ein. Wenn keine Fehler angezeigt werden, wurde Pygame erfolgreich installiert.

    Pygame importieren

Teil 2 von 8: Einrichten eines einfachen Fensters

Schritt 1. Öffnen Sie eine neue Datei

Schritt 2. Pygame importieren

Pygame ist eine Bibliothek, die Zugriff auf Grafikfunktionen bietet. Wenn Sie mehr über die Funktionsweise dieser Funktionen erfahren möchten, können Sie sie auf der Pygame-Website nachschlagen.

    pygame von pygame.locals importieren importieren *

Schritt 3. Stellen Sie die Fensterauflösung ein

Sie werden eine globale Variable für die Bildschirmauflösung erstellen, auf die in mehreren Teilen des Spiels verwiesen werden kann. Es ist auch leicht am Anfang der Datei zu finden, damit es später geändert werden kann. Für fortgeschrittene Projekte wäre es besser, diese Informationen in einer separaten Datei abzulegen.

    Auflösung = (400, 300)

Schritt 4. Definieren Sie einige Farben

Farben in Pygame sind (RBGA mit Werten zwischen 0 und 255. Der Alpha-Wert (A) ist optional, aber die anderen Farben (Rot, Blau und Grün sind obligatorisch).

    weiß = (255, 255, 255) schwarz = (0, 0, 0) rot = (255, 0, 0)

Schritt 5. Initialisieren Sie den Bildschirm

Verwenden Sie die zuvor definierte Auflösungsvariable.

    screen = pygame.display.set_mode (Auflösung)

Schritt 6. Erstellen Sie eine Spielschleife

Wiederholen Sie bestimmte Aktionen in jedem Frame unseres Spiels. Erstellen Sie eine Schleife, die sich immer wiederholt, um alle diese Aktionen zu durchlaufen.

    während Wahr:

Schritt 7. Färben Sie den Bildschirm

    screen.fill (weiß)

Schritt 8. Zeigen Sie den Bildschirm an

Wenn Sie das Programm ausführen, wird der Bildschirm weiß und das Programm stürzt ab. Dies liegt daran, dass das Betriebssystem Ereignisse an das Spiel sendet und das Spiel nichts mit ihnen macht. Sobald das Spiel zu viele unbehandelte Ereignisse empfängt, stürzt es ab.

    while True: … pygame.display.flip()

Schritt 9. Behandeln Sie Ereignisse

Rufen Sie eine Liste aller Ereignisse ab, die in jedem Frame aufgetreten sind. Sie werden sich nur um ein Ereignis kümmern, das quit-Ereignis. Dies tritt auf, wenn der Benutzer das Spielfenster schließt. Dadurch wird auch verhindert, dass unser Programm aufgrund zu vieler Ereignisse abstürzt.

    while True: … für Event in pygame.event.get(): if event.type == QUIT: pygame.quit()

ProgrammPygamePart1
ProgrammPygamePart1

Schritt 10. Probieren Sie es aus

So sollte der Code jetzt aussehen:

    import pygame from pygame.locals import * resolution = (400, 300) white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) screen = pygame.display.set_mode(Auflösung) während True: screen.fill(white) pygame.display.flip() für Event in pygame.event.get(): if event.type == QUIT: pygame.quit()

Teil 3 von 8: Ein Spielobjekt erstellen

Schritt 1. Erstellen Sie eine neue Klasse und einen Konstruktor

Legen Sie alle Eigenschaften des Objekts fest. Sie stellen auch Standardwerte für alle Eigenschaften bereit.

    class Ball: def _init_(self, xPos = Auflösung[0] / 2, yPos = Auflösung[1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball"

Schritt 2. Definieren Sie, wie das Objekt gezeichnet werden soll

Verwenden Sie die im Konstruktor definierten Eigenschaften, um die Kugel als Kreis zu zeichnen sowie eine Fläche an die Funktion zu übergeben, auf der das Objekt gezeichnet werden soll. Die Oberfläche ist das Bildschirmobjekt, das mit der vorherigen Auflösung erstellt wurde.

    def draw(self, surface): pygame.draw.circle(surface, black, (self.x, self.y), self.radius)

Schritt 3. Erstellen Sie eine Instanz der Klasse und weisen Sie die Spielschleife an, den Ball in jeder Schleife zu ziehen

    ball = Ball() während True: … ball.draw(screen)

Schritt 4. Bewegen Sie das Objekt

Erstellen Sie eine Funktion, die die Position des Objekts aktualisiert. Rufen Sie diese Funktion in jeder Spielschleife auf.

    class Ball: … def update(self): self.x += self.dx self.y += self.dy

Schritt 5. Begrenzen Sie die Bildrate

Der Ball wird sich sehr schnell bewegen, da die Spielschleife Hunderte Male pro Sekunde läuft. Verwenden Sie die Uhr von Pygame, um die Bildrate auf 60 fps zu begrenzen.

    clock = pygame.time. Clock() während True: … clock.tick(60)

Schritt 6. Halten Sie den Ball auf dem Bildschirm

Fügen Sie Checks in der Update-Funktion hinzu, um die Richtung des Balls umzukehren, wenn er einen der Bildschirmränder trifft.

    class Ball: … def update(self): … if (self.x <= 0 oder self.x >= Resolution[0]): self.dx *= -1 if (self.y <= 0 oder self.y >= Auflösung[1]): self.dy *= -1

ProgrammPygamePart2
ProgrammPygamePart2

Schritt 7. Probieren Sie es aus

So sollte der Code jetzt aussehen:

    import pygame from pygame.locals import * resolution = (400, 300) white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) screen = pygame.display.set_mode(Auflösung) Klasse Ball: def _init_(self, xPos = Auflösung[0] / 2, yPos = Auflösung[1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw(self, surface): pygame.draw.circle(surface, black, (self.x, self.y), self.radius) def update(self): self.x += self.dx self.y += self.dy if (self.x <= 0 oder self.x >= Auflösung[0]): self.dx *= -1 if (self.y <= 0 or self.y >= Resolution[1]): self.dy *= -1 ball = Ball() clock = pygame.time. Clock() while True: screen. fill(white) ball.draw(screen) ball.update() pygame.display.flip() clock.tick(60) für Event in pygame.event.get(): if event.type == QUIT: pygame.quit ()

Teil 4 von 8: Das Spiel organisieren

Schritt 1. Verwenden Sie Klassen, um alles zu organisieren

Das Spiel wird komplizierter. Verwenden Sie objektorientierte Techniken, um Ihren Code zu organisieren.

Schritt 2. Machen Sie die Spielschleife zu einer Klasse

Da unser Spiel jetzt Daten enthält, einschließlich Ihrer Spielobjekte und -funktionen, ist es sinnvoll, Ihre Spielschleife in eine Klasse zu verwandeln.

    Klassenspiel():

Schritt 3. Fügen Sie einen Konstruktor hinzu

Hier werden Sie einige Spielobjekte instanziieren, unseren Bildschirm und unsere Uhr erstellen und Pygame initialisieren. Pygame muss initialisiert werden, um bestimmte Funktionen wie Text oder Sound verwenden zu können.

    class game(): def _init_(self): pygame.init() self.screen = pygame.display.set_mode(resolution) self.clock = pygame.time. Clock()

Schritt 4. Behandeln Sie Ereignisse in einer Funktion

    class game(): … def handleEvents(self): für Event in pygame.event.get(): if event.type == QUIT: pygame.quit()

Schritt 5. Machen Sie die Spielschleife zu einer Funktion

Rufen Sie die Ereignisbehandlungsfunktion in jeder Schleife auf.

    class game(): … def run(self): while True: self.handleEvents() self.screen.fill(white) self.clock.tick(60) pygame.display.flip()

Schritt 6. Behandeln Sie mehrere Spielobjekte

Im Moment muss dieser Code in jedem Frame draw und update für unser Objekt aufrufen. Dies würde unordentlich werden, wenn Sie viele Objekte hätten. Lassen Sie uns unser Objekt zu einem Array hinzufügen und dann alle Objekte im Array in jeder Schleife aktualisieren und zeichnen. Jetzt können Sie ganz einfach ein weiteres Objekt hinzufügen und ihm eine andere Startposition geben.

    class game(): def _init_(self): … self.gameObjects = self.gameObjects.append(Ball()) self.gameObjects.append(Ball(100)) … def run(self): while True: self.handleEvents() für gameObj in self.gameObjects: gameObj.update() self.screen.fill(white) für gameObj in self.gameObjects: gameObj.draw(self.screen) self.clock.tick(60) pygame.display.flip()

ProgrammPygamePart3
ProgrammPygamePart3

Schritt 7. Probieren Sie es aus

So sollte der Code jetzt aussehen:

    import pygame from pygame.locals import * resolution = (400, 300) white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) screen = pygame.display.set_mode(Auflösung) Klasse Ball: def _init_(self, xPos = Auflösung[0] / 2, yPos = Auflösung[1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw(self, surface): pygame.draw.circle(surface, black, (self.x, self.y), self.radius) def update(self): self.x += self.dx self.y += self.dy if (self.x <= 0 oder self.x >= Auflösung[0]): self.dx *= -1 if (self.y <= 0 or self.y >= Resolution[1]): self.dy *= -1 class game(): def _init_(self): pygame.init() self.screen = pygame.display.set_mode(Auflösung) self.clock = pygame.time. Clock() self.gameObjects = self.gameObjects.append(Ball()) self.gameObjects.append(Ball(100)) def handleEvents(self): für Ereignis in pygame.event.get(): if event.type == QUIT: pygame.quit() def run(self): while True: self.handleEvent s() für gameObj in self.gameObjects: gameObj.update() self.screen.fill(white) für gameObj in self.gameObjects: gameObj.draw(self.screen) self.clock.tick(60) pygame.display. flip() game().run()

Teil 5 von 8: Spielerobjekt hinzufügen

Schritt 1. Erstellen Sie eine Spielerklasse und einen Konstruktor

Sie werden einen weiteren Kreis erstellen, der mit der Maus gesteuert wird. Initialisieren Sie die Werte im Konstruktor. Der Radius ist der einzige wichtige Wert.

    class Player: def _init_(self, rad = 20): self.x = 0 self.y = 0 self.radius = rad

Schritt 2. Definieren Sie, wie das Spielerobjekt gezeichnet werden soll

Es wird genauso sein, wie Sie die anderen Spielobjekte gezeichnet haben.

    class Player: … def draw(self, surface): pygame.draw.circle(surface, red, (self.x, self.y), self.radius)

Schritt 3. Fügen Sie die Maussteuerung für das Player-Objekt hinzu

Überprüfen Sie in jedem Frame die Position der Maus und stellen Sie die Position der Spielerobjekte auf diesen Punkt ein.

    class Player: … def update(self): cord = pygame.mouse.get_pos() self.x = cord[0] self.y = cord[1]

Schritt 4. Fügen Sie ein Spielerobjekt zu gameObjects hinzu

Erstellen Sie eine neue Player-Instanz und fügen Sie sie der Liste hinzu.

    Klasse game(): def _init_(self): … self.gameObjects.append(Player())

ProgrammPygamePart4
ProgrammPygamePart4

Schritt 5. Probieren Sie es aus

So sollte der Code jetzt aussehen:

    import pygame from pygame.locals import * resolution = (400, 300) white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) screen = pygame.display.set_mode(Auflösung) Klasse Ball: def _init_(self, xPos = Auflösung[0] / 2, yPos = Auflösung[1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw(self, surface): pygame.draw.circle(surface, black, (self.x, self.y), self.radius) def update(self): self.x += self.dx self.y += self.dy if (self.x <= 0 oder self.x >= Auflösung[0]): self.dx *= -1 if (self.y <= 0 or self.y >= Resolution[1]): self.dy *= -1 Klasse Spieler: def _init_(self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw(self, surface): pygame.draw.circle(surface, red, (self.x, self.y), self.radius) def update (self): cord = pygame.mouse.get_pos() self.x = cord[0] self.y = cord[1] class game(): def _init_(self): pygame.init() self.screen = pygame.display.set_ mode(Auflösung) self.clock = pygame.time. Clock() self.gameObjects = self.gameObjects.append(Player()) self.gameObjects.append(Ball()) self.gameObjects.append(Ball(100.))) def handleEvents(self): für Event in pygame.event.get(): if event.type == QUIT: pygame.quit() def run(self): while True: self.handleEvents() für gameObj in self.gameObjects: gameObj.update() self.screen.fill(white) für gameObj in self.gameObjects: gameObj.draw(self.screen) self.clock.tick(60) pygame.display.flip() game(). Lauf()

Teil 6 von 8: Objekte mit dem Spieler interagieren lassen

Schritt 1. Ändern Sie die Update-Funktionen

Damit Objekte interagieren können, müssen sie aufeinander zugreifen können. Lassen Sie uns einen weiteren Parameter zu Update hinzufügen, um die Liste gameObjects zu übergeben. Sie müssen es sowohl dem Spielerobjekt als auch den Ballobjekten hinzufügen. Wenn Sie viele Spielobjekte haben, kann die Vererbung Ihnen helfen, alle Ihre Methodensignaturen gleich zu halten.

    class Ball: … def update(self, gameObjects): … class Player: … def update(self, gameObjects):

Schritt 2. Auf Kollisionen zwischen Spieler und Bällen prüfen

Gehen Sie alle Spielobjekte durch und prüfen Sie, ob der Typ der Objekte Kugel ist. Verwenden Sie dann die Radien der beiden Objekte und die Abstandsformel, um zu überprüfen, ob sie kollidieren. Kreise sind wirklich einfach, Kollisionen zu überprüfen. Dies ist der Hauptgrund dafür, dass Sie für dieses Spiel keine andere Form verwendet haben.

    class Player: … def update(self, gameObjects): … für gameObj in gameObjects: if gameObj.type == "ball": if (gameObj.x - self.x)**2 + (gameObj.y - self.y)**2 <= (gameObj.radius + self.radius)**2:

ProgrammPygamePart5
ProgrammPygamePart5

Schritt 3. Beende das Spiel, wenn der Spieler "geschlagen" wird

Beenden wir das Spiel erst einmal.

    if (gameObj.x - self.x)**2 + (gameObj.y - self.y)**2 <= (gameObj.radius + self.radius)**2: pygame.quit()

Schritt 4. Probieren Sie es aus

So sollte der Code jetzt aussehen:

    import pygame from pygame.locals import * resolution = (400, 300) white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) screen = pygame.display.set_mode(Auflösung) Klasse Ball: def _init_(self, xPos = Auflösung[0] / 2, yPos = Auflösung[1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw(self, surface): pygame.draw.circle(surface, black, (self.x, self.y), self.radius) def update(self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 oder self.x >= Auflösung[0]): self.dx *= -1 if (self.y <= 0 or self.y >= Auflösung[1]): self.dy *= -1 Klasse Spieler: def _init_(self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw(self, surface): pygame.draw.circle(surface, red, (self.x, self.y), self.radius) def update(self, gameObjects): cord = pygame.mouse.get_pos() self.x = cord[0] self.y = cord[1] für gameObj in gameObjects: if gameObj.type == "ball": if (gameObj.x - self.x)**2 + (gameObj.y - self.y)**2 <= (gameObj.radius + self.radius)**2: pygame.quit() class game(): def _init_(self): pygame.init() self.screen = pygame.display.set_mode(Auflösung) self.clock = pygame.time. Clock() self.gameObjects = self.gameObjects.append(Player()) self.gameObjects.append(Ball()) self.gameObjects.append(Ball(100)) def handleEvents(self): für Event in pygame.event.get(): if event.type == QUIT: pygame.quit () def run(self): while True: self.handleEvents() für gameObj in self.gameObjects: gameObj.update(self.gameObjects) self.screen.fill(white) für gameObj in self.gameObjects: gameObj.draw(self.screen) self.clock.tick(60) pygame.display.flip() game().run()

Teil 7 von 8: Hinzufügen eines Gamecontrollers zum Erstellen von Objekten

Schritt 1. Erstellen Sie eine Gamecontroller-Klasse

Gamecontroller sind für das "Laufen" des Spiels verantwortlich. Es unterscheidet sich von unserer Spielklasse, die für das Zeichnen und Aktualisieren aller unserer Objekte verantwortlich ist. Der Controller fügt dem Bildschirm regelmäßig einen weiteren Ball hinzu, um das Spiel zu erschweren. Fügen Sie einen Konstruktor hinzu und initialisieren Sie einige grundlegende Werte. Das Intervall ist die Zeit, bevor ein weiterer Ball hinzugefügt wird.

    Klasse GameController: def _init_(self, interval = 5): self.inter = Intervall self.next = pygame.time.get_ticks() + (2 * 1000) self.type = "Gamecontroller"

Schritt 2. Fügen Sie die Update-Funktion hinzu

Dadurch wird überprüft, wie viel Zeit seit dem Hinzufügen eines Balls oder seit dem Beginn des Spiels vergangen ist. Wenn die Zeit länger als das Intervall ist, setzen Sie die Zeit zurück und fügen einen Ball hinzu.

    class GameController: … def update(self, gameObjects): if self.next < pygame.time.get_ticks(): self.next = pygame.time.get_ticks() + (self.inter * 1000) gameObjects.append(Ball())

Schritt 3. Geben Sie den Kugeln zufällige Geschwindigkeiten

Sie müssen Zufallszahlen verwenden, um das Spiel jedes Mal anders zu gestalten. Die Geschwindigkeiten der Kugeln sind jetzt jedoch eine Gleitkommazahl statt einer ganzen Zahl.

    class GameController: … def update(self, gameObjects): if self.next < pygame.time.get_ticks(): self.next = pygame.time.get_ticks() + (self.inter * 1000) gameObjects.append(Ball(xVel=zufällig()*2, yVel=zufällig()*2))

Schritt 4. Korrigieren Sie die Zeichenfunktion

Die Draw-Funktion akzeptiert keine Floats. Lassen Sie uns die Position der Kugel in ganze Zahlen umwandeln, bevor die Kugeln gezeichnet werden.

    class Ball: … def draw(self, surface): pygame.draw.circle(surface, black, (int(self.x), int(self.y)), self.radius)

Schritt 5. Definieren Sie eine Draw-Methode für den Gamecontroller

Da es sich um ein Spielobjekt handelt, wird die Hauptschleife versuchen, es zu zeichnen. Sie müssen eine Draw-Funktion definieren, die nichts tut, damit das Spiel nicht abstürzt.

    Klasse GameController: … def draw(self, screen): pass

Schritt 6. Fügen Sie den Gamecontroller zu gameObjects hinzu und entfernen Sie die 2 Kugeln

Das Spiel sollte jetzt alle fünf Sekunden einen Ball spawnen.

    class game(): def _init_(self): … self.gameObjects = self.gameObjects.append(GameController()) self.gameObjects.append(Player())

ProgrammPygamePart6
ProgrammPygamePart6

Schritt 7. Probieren Sie es aus

So sollte der Code jetzt aussehen:

    Import von Pygame von Random Import von Pygame.locals Import * Auflösung = (400, 300) Weiß = (255, 255, 255) Schwarz = (0, 0, 0) Rot = (255, 0, 0) Bildschirm = Pygame. display.set_mode(resolution) class Ball: def _init_(self, xPos = Resolution[0] / 2, yPos = Resolution[1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw(self, surface): pygame.draw.circle(surface, black, (int(self. x), int(self.y)), self.radius) def update(self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 or self. x >= Auflösung[0]): self.dx *= -1 if (self.y <= 0 oder self.y >= Auflösung[1]): self.dy *= -1 Klasse Spieler: def _init_(self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw(self, surface): pygame.draw.circle(surface, red, (self.x, self.y), self.radius) def update(self, gameObjects): cord = pygame.mouse.get_pos() self.x = cord[0] self.y = cord[1] für gameObj im Spiel Objekte: if gameObj.type == "ball": if (gameObj.x - self.x)**2 + (gameObj.y - self.y)**2 <= (gameObj.radius + self.radius)* *2: pygame.quit() Klasse GameController: def _init_(self, interval = 5): self.inter = Intervall self.next = pygame.time.get_ticks() + (2 * 1000) self.type = "Gamecontroller " def update(self, gameObjects): if self.next < pygame.time.get_ticks(): self.next = pygame.time.get_ticks() + (self.inter * 1000) gameObjects.append(Ball(xVel=random ()*2, yVel=random()*2)) def draw(self, screen): pass class game(): def _init_(self): pygame.init() self.screen = pygame.display.set_mode(resolution.)) self.clock = pygame.time. Clock() self.gameObjects = self.gameObjects.append(GameController()) self.gameObjects.append(Player()) def handleEvents(self): für Ereignis in pygame.event.get(): if event.type == QUIT: pygame.quit() def run(self): while True: self.handleEvents() für gameObj in self.gameObjects: gameObj.update(self.gameObjects) self.screen.fill(weiß) für gameObj in self.gameO Objekte: gameObj.draw(self.screen) self.clock.tick(60) pygame.display.flip() game().run()

Teil 8 von 8: Punktzahl hinzufügen und Game Over

Schritt 1. Fügen Sie der Gamecontroller-Klasse eine Punktzahl hinzu

Erstellen Sie ein Font-Objekt und eine Score-Variable. Sie zeichnen die Schriftart in jedem Frame, um die Punktzahl anzuzeigen, und erhöhen die Punktzahl in jedem Frame im Update.

    class GameController: def _init_(self, interval = 5): … self.score = 0 self.scoreText = pygame.font. Font(None, 12) def update(self, gameObjects): … self.score += 1 def draw (self, screen): screen.blit(self.scoreText.render(str(self.score), True, black), (5, 5))

Schritt 2. Ändern Sie, wie das Spiel endet

Lassen Sie uns das Quit loswerden, wenn der Spieler eine Kollision erkennt. Stattdessen legen Sie im Player eine Variable fest, die das Spiel überprüfen kann. Wenn gameOver eingestellt ist, beenden Sie die Aktualisierung von Objekten. Dadurch wird alles an Ort und Stelle eingefroren, sodass der Spieler sehen kann, was passiert ist und seine Punktzahl überprüfen kann. Beachten Sie, dass die Objekte noch gezeichnet, nur nicht aktualisiert werden.

    class Player: def _init_(self, rad = 20): … self.gameOver = False def update(self, gameObjects): … für gameObj in gameObjects: if gameObj.type == "ball": if (gameObj.x - self.x)**2 + (gameObj.y - self.y)**2 <= (gameObj.radius + self.radius)**2: self.gameOver = True class game(): def _init_(self): … self.gameOver = False def run(self): while True: self.handleEvents() wenn nicht self.gameOver: für gameObj in self.gameObjects: gameObj.update(self.gameObjects) if gameObj.type == "player": self.gameOver = gameObj.gameOver

ProgrammPygameFinal
ProgrammPygameFinal

Schritt 3. Probieren Sie es aus

So sollte der fertige Code jetzt aussehen:

    Import von Pygame von Random Import von Pygame.locals Import * Auflösung = (400, 300) Weiß = (255, 255, 255) Schwarz = (0, 0, 0) Rot = (255, 0, 0) Bildschirm = Pygame. display.set_mode(resolution) class Ball: def _init_(self, xPos = Resolution[0] / 2, yPos = Resolution[1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw(self, surface): pygame.draw.circle(surface, black, (int(self. x), int(self.y)), self.radius) def update(self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 or self. x >= Auflösung[0]): self.dx *= -1 if (self.y <= 0 oder self.y >= Auflösung[1]): self.dy *= -1 Klasse Spieler: def _init_(self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" self.gameOver = False def draw(self, surface): pygame.draw.circle(surface, red, (self.x, self.y), self.radius) def update(self, gameObjects): cord = pygame.mouse.get_pos() self.x = cord[0] self.y = cord[1] für gameObj in gameObjects: if gameObj.type == "ball": if (gameObj.x - self.x)**2 + (gameObj.y - self.y)**2 <= (gameObj.radius + self.radius)**2: self.gameOver = True class GameController: def _init_(self, interval = 5): self.inter = Intervall self.next = pygame.time.get_ticks() + (2 * 1000) self. type = "Gamecontroller" self.score = 0 self.scoreText = pygame.font. Font(None, 12) def update(self, gameObjects): if self.next < pygame.time.get_ticks(): self.next = pygame.time.get_ticks() + (self.inter * 1000) gameObjects.append(Ball(xVel=random()*2, yVel=random()*2)) self.score += 1 def draw(self, screen): screen.blit(self.scoreText.render(str(self.score), True, black), (5, 5)) class game(): def _init_(self): pygame.init() self.screen = pygame.display.set_mode(Auflösung) self.clock = pygame.time. Clock() self.gameObjects = self.gameObjects.append(GameController()) self.gameObjects.append(Player()) self.gameOver = False def handleEvents(self): für Ereignis in pygame.event.get(): if ev ent.type == QUIT: pygame.quit() def run(self): while True: self.handleEvents() falls nicht self.gameOver: für gameObj in self.gameObjects: gameObj.update(self.gameObjects) if gameObj. type == "player": self.gameOver = gameObj.gameOver self.screen.fill(white) für gameObj in self.gameObjects: gameObj.draw(self.screen) self.clock.tick(60) pygame.display.flip () Spiel().run()

Empfohlen: