Een spel programmeren in Python met Pygame (met afbeeldingen)

Inhoudsopgave:

Een spel programmeren in Python met Pygame (met afbeeldingen)
Een spel programmeren in Python met Pygame (met afbeeldingen)

Video: Een spel programmeren in Python met Pygame (met afbeeldingen)

Video: Een spel programmeren in Python met Pygame (met afbeeldingen)
Video: THIS Is The Best & Safest Way To Open Files In Python 2024, April
Anonim

Dit is een introductie tot Pygame voor mensen die Python al kennen. Dit artikel leert je de stappen om een eenvoudig spel te bouwen waarbij de speler stuiterende ballen ontwijkt.

Stappen

Deel 1 van 8: Pygame installeren

Stap 1. Download Pygame

Zoek het voor uw platform op

Stap 2. Voer het installatieprogramma uit

Stap 3. Controleer of de installatie werkte

Open een Python-terminal. Typ 'import pygame'. Als u geen fouten ziet, is Pygame met succes geïnstalleerd.

    import pygame

Deel 2 van 8: Een basisvenster instellen

Stap 1. Open een nieuw bestand

Stap 2. Pygame importeren

Pygame is een bibliotheek die toegang biedt tot grafische functies. Wil je meer informatie over hoe deze functies werken, dan kun je deze opzoeken op de website van Pygame.

    importeer pygame van pygame.locals import *

Stap 3. Stel de vensterresolutie in

Je maakt een globale variabele voor de schermresolutie, zodat er in verschillende delen van het spel naar kan worden verwezen. Het is ook gemakkelijk bovenaan het bestand te vinden, zodat het later kan worden gewijzigd. Voor geavanceerde projecten is het een beter idee om deze informatie in een apart bestand te plaatsen.

    resolutie = (400, 300)

Stap 4. Definieer enkele kleuren

Kleuren in pygame zijn (RBGA die variëren in waarden tussen 0 en 255. De alfawaarde (A) is optioneel, maar de andere kleuren (rood, blauw en groen zijn verplicht).

    wit = (255, 255, 255) zwart = (0, 0, 0) rood = (255, 0, 0)

Stap 5. Initialiseer het scherm

Gebruik de resolutievariabele die eerder is gedefinieerd.

    scherm = pygame.display.set_mode(resolutie)

Stap 6. Maak een gameloop

Herhaal bepaalde acties in elk frame van ons spel. Maak een lus die zich altijd herhaalt om door al deze acties te bladeren.

    terwijl waar:

Stap 7. Kleur het scherm in

    scherm.vul (wit)

Stap 8. Geef het scherm weer

Als u het programma uitvoert, wordt het scherm wit en crasht het programma. Dit komt omdat het besturingssysteem gebeurtenissen naar de game verzendt en de game er niets mee doet. Zodra het spel te veel onverwerkte gebeurtenissen ontvangt, zal het crashen.

    terwijl True: … pygame.display.flip()

Stap 9. Gebeurtenissen afhandelen

Krijg een lijst van alle gebeurtenissen die in elk frame hebben plaatsgevonden. Je gaat je maar om één gebeurtenis bekommeren, de quit-gebeurtenis. Dit gebeurt wanneer de gebruiker het spelvenster sluit. Dit zal ook voorkomen dat ons programma crasht door te veel evenementen.

    while True: … voor gebeurtenis in pygame.event.get(): if event.type == QUIT: pygame.quit()

ProgrammaPygamePart1
ProgrammaPygamePart1

Stap 10. Probeer het uit

Zo zou de code er nu uit moeten zien:

    import pygame van pygame.locals import * resolutie = (400, 300) wit = (255, 255, 255) zwart = (0, 0, 0) rood = (255, 0, 0) scherm = pygame.display.set_mode(resolutie) while True: screen.fill(white) pygame.display.flip() voor event in pygame.event.get(): if event.type == QUIT: pygame.quit()

Deel 3 van 8: Een spelobject maken

Stap 1. Maak een nieuwe klasse en constructor

Stel alle eigenschappen van het object in. U geeft ook standaardwaarden op voor alle eigenschappen.

    class Ball: def _init_(zelf, xPos = resolutie [0] / 2, yPos = resolutie [1] / 2, xVel = 1, yVel = 1, rad = 15): zelf.x = xPos zelf.y = yPos zelf.dx = xVel zelf.dy = yVel zelf.radius = rad zelf.type = "bal"

Stap 2. Bepaal hoe het object moet worden getekend

Gebruik de eigenschappen die in de constructor zijn gedefinieerd om de bal als een cirkel te tekenen en om een oppervlak door te geven aan de functie waarop het object wordt getekend. Het oppervlak is het schermobject dat eerder met de resolutie is gemaakt.

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

Stap 3. Maak een instantie van de klas en vertel de spellus om de bal in elke lus te tekenen

    ball = Ball() terwijl True: … ball.draw(scherm)

Stap 4. Laat het object bewegen

Maak een functie die de positie van het object bijwerkt. Roep deze functie in elke spellus aan.

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

Stap 5. Beperk de framesnelheid

De bal zal heel snel bewegen omdat de spellus honderden keren per seconde wordt uitgevoerd. Gebruik de klok van Pygame om de framesnelheid te beperken tot 60 fps.

    klok = pygame.time. Clock() terwijl True: … clock.tick(60)

Stap 6. Houd de bal op het scherm

Voeg vinkjes toe in de update-functie om de richting van de bal om te keren als deze een van de schermranden raakt.

    class Ball: … def update(self): … if (self.x <= 0 of self.x >= resolution[0]): self.dx *= -1 if (self.y <= 0 of self.y >= resolutie [1]): zelf.dy *= -1

ProgrammaPygamePart2
ProgrammaPygamePart2

Stap 7. Probeer het uit

Zo zou de code er nu uit moeten zien:

    import pygame van pygame.locals import * resolutie = (400, 300) wit = (255, 255, 255) zwart = (0, 0, 0) rood = (255, 0, 0) scherm = pygame.display.set_mode(resolutie) klasse Bal: def _init_(zelf, xPos = resolutie [0] / 2, yPos = resolutie [1] / 2, xVel = 1, yVel = 1, rad = 15): zelf.x = xPos zelf.y = yPos zelf.dx = xVel zelf.dy = yVel zelf.radius = rad zelf.type = "bal" 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 of self.x >= resolution[0]): self.dx *= -1 if (self.y <= 0 of 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) voor event in pygame.event.get(): if event.type == QUIT: pygame.quit ()

Deel 4 van 8: Het spel organiseren

Stap 1. Gebruik klassen om alles te organiseren

Het spel wordt ingewikkelder. Gebruik objectgeoriënteerde technieken om uw code te ordenen.

Stap 2. Maak van de game een klas

Aangezien onze game nu gegevens bevat, waaronder je game-objecten en -functies, is het logisch om van je game-loop een klasse te maken.

    klasse spel():

Stap 3. Voeg een constructor toe

Hier zul je enkele game-objecten instantiëren, ons scherm en onze klok maken en Pygame initialiseren. Pygame moet worden geïnitialiseerd om bepaalde functies zoals tekst of geluid te gebruiken.

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

Stap 4. Gebeurtenissen in een functie afhandelen

    class game(): … def handleEvents(self): voor evenement in pygame.event.get(): if event.type == QUIT: pygame.quit()

Stap 5. Maak van de gameloop een functie

Roep de gebeurtenisafhandelingsfunctie elke lus aan.

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

Stap 6. Behandel meerdere game-objecten

Op dit moment moet deze code elk frame tekenen en bijwerken op ons object. Dit zou rommelig worden als je veel voorwerpen had. Laten we ons object aan een array toevoegen en vervolgens elke lus alle objecten in de array bijwerken en tekenen. Nu kun je eenvoudig een ander object toevoegen en het een andere startpositie geven.

    class game(): def _init_(self): … self.gameObjects = self.gameObjects.append(Ball()) self.gameObjects.append(Ball(100)) … def run(self): while True: self.handleEvents() voor gameObj in self.gameObjects: gameObj.update() self.screen.fill(wit) voor gameObj in self.gameObjects: gameObj.draw(self.screen) self.clock.tick(60) pygame.display.omdraaien()

ProgramPygamePart3
ProgramPygamePart3

Stap 7. Probeer het uit

Zo zou de code er nu uit moeten zien:

    import pygame van pygame.locals import * resolutie = (400, 300) wit = (255, 255, 255) zwart = (0, 0, 0) rood = (255, 0, 0) scherm = pygame.display.set_mode(resolutie) klasse Bal: def _init_(zelf, xPos = resolutie [0] / 2, yPos = resolutie [1] / 2, xVel = 1, yVel = 1, rad = 15): zelf.x = xPos zelf.y = yPos zelf.dx = xVel zelf.dy = yVel zelf.radius = rad zelf.type = "bal" 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 of self.x >= resolution[0]): self.dx *= -1 if (self.y <= 0 of self.y >= resolution[1]): self.dy *= -1 class game(): def _init_(self): pygame.init() self.screen = pygame.display.set_mode(resolution) self.clock = pygame.time. Clock() self.gameObjects = self.gameObjects.append(Ball()) self.gameObjects.append(Ball(100)) def handleEvents(self): voor event in pygame.event.get(): if event.type == QUIT: pygame.quit() def run(self): while True: self.handleEvent s() voor gameObj in self.gameObjects: gameObj.update() self.screen.fill(wit) voor gameObj in self.gameObjects: gameObj.draw(self.screen) self.clock.tick(60) pygame.display. flip() spel().run()

Deel 5 van 8: Een spelersobject toevoegen

Stap 1. Maak een spelersklasse en constructor

Je gaat nog een cirkel maken die wordt bestuurd door de muis. Initialiseer de waarden in de constructor. De straal is de enige belangrijke waarde.

    klasse Speler: def _init_(self, rad = 20): self.x = 0 self.y = 0 self.radius = rad

Stap 2. Bepaal hoe het spelerobject moet worden getekend

Het zal op dezelfde manier zijn als waarop je de andere game-objecten hebt getekend.

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

Stap 3. Voeg muisbesturing toe voor het spelerobject

Controleer in elk frame de locatie van de muis en stel de locatie van de spelersobjecten op dat punt in.

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

Stap 4. Voeg een spelerobject toe aan gameObjects

Maak een nieuwe spelerinstantie en voeg deze toe aan de lijst.

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

ProgramPygamePart4
ProgramPygamePart4

Stap 5. Probeer het uit

Zo zou de code er nu uit moeten zien:

    import pygame van pygame.locals import * resolutie = (400, 300) wit = (255, 255, 255) zwart = (0, 0, 0) rood = (255, 0, 0) scherm = pygame.display.set_mode(resolutie) klasse Bal: def _init_(zelf, xPos = resolutie [0] / 2, yPos = resolutie [1] / 2, xVel = 1, yVel = 1, rad = 15): zelf.x = xPos zelf.y = yPos zelf.dx = xVel zelf.dy = yVel zelf.radius = rad zelf.type = "bal" 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 of self.x >= resolution[0]): self.dx *= -1 if (self.y <= 0 of self.y >= resolution[1]): self.dy *= -1 class Speler: def _init_(self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "speler" 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(resolutie) self.clock = pygame.time. Clock() self.gameObjects = self.gameObjects.append(Player()) self.gameObjects.append(Ball()) self.gameObjects.append(Ball(100))) def handleEvents(self): for event in pygame.event.get(): if event.type == QUIT: pygame.quit() def run(self): while True: self.handleEvents() for gameObj in self.gameObjects: gameObj.update() self.screen.fill(wit) voor gameObj in self.gameObjects: gameObj.draw(self.screen) self.clock.tick(60) pygame.display.flip() game(). loop()

Deel 6 van 8: Objecten laten communiceren met de speler

Stap 1. Wijzig de update-functies

Om objecten met elkaar te laten communiceren, moeten ze toegang tot elkaar hebben. Laten we nog een parameter toevoegen aan Update om door te geven aan de gameObjects-lijst. Je moet het toevoegen aan zowel het player-object als de Ball-objecten. Als je veel game-objecten hebt, kan overerving je helpen om al je methode-handtekeningen hetzelfde te houden.

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

Stap 2. Controleer op botsingen tussen de speler en de ballen

Doorloop alle game-objecten en controleer of het type object een bal is. Gebruik vervolgens de stralen van de twee objecten en de afstandsformule om te controleren of ze botsen. Cirkels zijn heel gemakkelijk om botsingen te controleren. Dit is de grootste reden dat je geen andere vorm hebt gebruikt voor dit spel.

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

ProgramPygamePart5
ProgramPygamePart5

Stap 3. Beëindig het spel als de speler "geslagen" wordt

Laten we het spel nu maar stoppen.

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

Stap 4. Probeer het uit

Dit is hoe de code er nu uit zou moeten zien:

    import pygame van pygame.locals import * resolutie = (400, 300) wit = (255, 255, 255) zwart = (0, 0, 0) rood = (255, 0, 0) scherm = pygame.display.set_mode(resolutie) klasse Bal: def _init_(zelf, xPos = resolutie [0] / 2, yPos = resolutie [1] / 2, xVel = 1, yVel = 1, rad = 15): zelf.x = xPos zelf.y = yPos zelf.dx = xVel zelf.dy = yVel zelf.radius = rad zelf.type = "bal" 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 of self.x >= resolution[0]): self.dx *= -1 if (self.y <= 0 of self.y >= resolution[1]): self.dy *= -1 class Speler: def _init_(self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "speler" 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] voor 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(resolution) self.clock = pygame.time. Clock() self.gameObjects = self.gameObjects.append(Player()) self.gameObjects.append(Ball()) self.gameObjects.append(Ball(100)) def handleEvents(self): voor gebeurtenis in pygame.event.get(): if event.type == QUIT: pygame.quit () def run(self): while True: self.handleEvents() voor gameObj in self.gameObjects: gameObj.update(self.gameObjects) self.screen.fill(white) voor gameObj in self.gameObjects: gameObj.draw(zelf.scherm) zelf.klok.tick(60) pygame.display.flip() game().run()

Deel 7 van 8: Een gamecontroller toevoegen om objecten te maken

Stap 1. Maak een gamecontroller-klasse aan

Gamecontrollers zijn verantwoordelijk voor het "runnen" van het spel. Het is anders dan onze gameklasse die verantwoordelijk is voor het tekenen en bijwerken van al onze objecten. De controller zal periodiek een nieuwe bal aan het scherm toevoegen om het spel moeilijker te maken. Voeg een constructor toe en initialiseer enkele basiswaarden. Het interval is de tijd voordat een andere bal wordt toegevoegd.

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

Stap 2. Voeg de update-functie toe

Hiermee wordt gecontroleerd hoeveel tijd er is verstreken sinds het moment dat een bal is toegevoegd of vanaf het begin van het spel. Als de tijd langer is dan het interval, stelt u de tijd opnieuw in en voegt u een bal toe.

    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())

Stap 3. Geef de ballen willekeurige snelheden

Je moet willekeurige getallen gebruiken om het spel elke keer anders te maken. De snelheden van de ballen zijn nu echter een getal met drijvende komma in plaats van een geheel getal.

    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=willekeurig()*2, yVel=willekeurig()*2))

Stap 4. Corrigeer de tekenfunctie

De draw-functie accepteert geen floats. Laten we de positie van de bal converteren naar gehele getallen voordat de ballen worden getrokken.

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

Stap 5. Definieer een tekenmethode voor de gamecontroller

Omdat het een spelobject is, zal de hoofdlus proberen het te tekenen. U moet een tekenfunctie definiëren die niets doet, zodat het spel niet crasht.

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

Stap 6. Voeg de gamecontroller toe aan gameObjects en verwijder de 2 ballen

Het spel zou nu elke vijf seconden een bal moeten spawnen.

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

ProgramPygamePart6
ProgramPygamePart6

Stap 7. Probeer het uit

Zo zou de code er nu uit moeten zien:

    import pygame van willekeurig import willekeurig van pygame.locals import * resolutie = (400, 300) wit = (255, 255, 255) zwart = (0, 0, 0) rood = (255, 0, 0) scherm = 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 zelf.dx = xVel zelf.dy = yVel zelf.radius = rad zelf.type = "bal" 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 of self. x >= resolutie[0]): self.dx *= -1 if (self.y <= 0 of self.y >= resolutie[1]): self.dy *= -1 class Speler: def _init_(self, rad = 20): zelf.x = 0 zelf.y = 0 zelf.straal = rad zelf.type = "speler" 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] voor gameObj in game Objecten: if gameObj.type == "ball": if (gameObj.x - self.x)**2 + (gameObj.y - self.y)**2 <= (gameObj.radius + self.radius)* *2: pygame.quit() class GameController: def _init_(self, interval = 5): self.inter = interval 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=willekeurig) ()*2, yVel=random()*2)) def draw(self, screen): pass class game(): def _init_(self): pygame.init() self.screen = pygame.display.set_mode(resolutie) self.clock = pygame.time. Clock() self.gameObjects = self.gameObjects.append(GameController()) self.gameObjects.append(Player()) def handleEvents(self): voor gebeurtenis in pygame.event.get(): if event.type == QUIT: pygame.quit() def run(self): while True: self.handleEvents() voor gameObj in self.gameObjects: gameObj.update(self.gameObjects) self.screen.fill(wit) voor gameObj in self.gameO bjecten: gameObj.draw(self.screen) self.clock.tick(60) pygame.display.flip() game().run()

Deel 8 van 8: Een score en game-over toevoegen

Stap 1. Voeg een score toe aan de gamecontrollerklasse

Maak een font-object en een scorevariabele. Je tekent het lettertype in elk frame om de score weer te geven en verhoogt de score elk frame in de 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 (zelf, scherm): screen.blit(self.scoreText.render(str(self.score), True, zwart), (5, 5))

Stap 2. Wijzig hoe het spel eindigt

Laten we stoppen met stoppen wanneer de speler een botsing detecteert. In plaats daarvan stel je een variabele in de speler in die het spel kan controleren. Als gameOver is ingesteld, stop je met het bijwerken van objecten. Dit zal alles op zijn plaats bevriezen, zodat de speler kan zien wat er is gebeurd en zijn score kan controleren. Merk op dat de objecten nog steeds worden getekend, alleen niet bijgewerkt.

    klasse Speler: def _init_(self, rad = 20): … self.gameOver = False def update(self, gameObjects): … voor 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() if not self.gameOver: for gameObj in self.gameObjects: gameObj.update(self.gameObjects) if gameObj.type == "player": zelf.gameOver = gameObj.gameOver

ProgramPygameFinal
ProgramPygameFinal

Stap 3. Probeer het uit

Dit is hoe de voltooide code er nu uit zou moeten zien:

    import pygame van willekeurig import willekeurig van pygame.locals import * resolutie = (400, 300) wit = (255, 255, 255) zwart = (0, 0, 0) rood = (255, 0, 0) scherm = pygame. display.set_mode(resolutie) 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 zelf.dx = xVel zelf.dy = yVel zelf.radius = rad zelf.type = "bal" 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 of self. x >= resolutie[0]): self.dx *= -1 if (self.y <= 0 of self.y >= resolutie[1]): self.dy *= -1 class Speler: def _init_(self, rad = 20): zelf.x = 0 zelf.y = 0 zelf.straal = rad zelf.type = "speler" zelf.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] voor 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 = interval 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=willekeurig()*2, yVel=willekeurig()*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(resolution) self.clock = pygame.time. Clock() self.gameObjects = self.gameObjects.append(GameController()) self.gameObjects.append(Player()) self.gameOver = False def handleEvents(self): voor event in pygame.event.get(): if ev ent.type == QUIT: pygame.quit() def run(self): while True: self.handleEvents() if not self.gameOver: voor gameObj in self.gameObjects: gameObj.update(self.gameObjects) als gameObj. type == "speler": self.gameOver = gameObj.gameOver self.screen.fill(wit) voor gameObj in self.gameObjects: gameObj.draw(self.screen) self.clock.tick(60) pygame.display.flip () spel().run()

Aanbevolen: