Πώς να προγραμματίσετε ένα παιχνίδι σε Python με Pygame (με εικόνες)

Πίνακας περιεχομένων:

Πώς να προγραμματίσετε ένα παιχνίδι σε Python με Pygame (με εικόνες)
Πώς να προγραμματίσετε ένα παιχνίδι σε Python με Pygame (με εικόνες)

Βίντεο: Πώς να προγραμματίσετε ένα παιχνίδι σε Python με Pygame (με εικόνες)

Βίντεο: Πώς να προγραμματίσετε ένα παιχνίδι σε Python με Pygame (με εικόνες)
Βίντεο: PYTHON - ΜΑΘΗΜΑ 15 - ΑΡΧΕΙΑ - Μέρος 2 από 10 - Τρόποι Ανοίγματος (modes) Αρχείων 2024, Απρίλιος
Anonim

Αυτή είναι μια εισαγωγή στο Pygame για άτομα που γνωρίζουν ήδη την Python. Αυτό το άρθρο θα σας διδάξει τα βήματα για τη δημιουργία ενός απλού παιχνιδιού που έχει τον παίκτη να αποφεύγει τις αναπηδείς μπάλες.

Βήματα

Μέρος 1 από 8: Εγκατάσταση Pygame

Βήμα 1. Κατεβάστε το Pygame

Βρείτε το για την πλατφόρμα σας από τη διεύθυνση

Βήμα 2. Εκτελέστε το πρόγραμμα εγκατάστασης

Βήμα 3. Βεβαιωθείτε ότι η εγκατάσταση λειτούργησε

Ανοίξτε ένα τερματικό Python. Πληκτρολογήστε "εισαγωγή pygame." Εάν δεν βλέπετε κανένα σφάλμα, τότε το Pygame εγκαταστάθηκε με επιτυχία.

    εισαγωγή pygame

Μέρος 2 από 8: Ρύθμιση βασικού παραθύρου

Βήμα 1. Ανοίξτε ένα νέο αρχείο

Βήμα 2. Εισαγωγή Pygame

Το Pygame είναι μια βιβλιοθήκη που παρέχει πρόσβαση σε λειτουργίες γραφικών. Εάν θέλετε περισσότερες πληροφορίες σχετικά με τον τρόπο λειτουργίας αυτών των λειτουργιών, μπορείτε να τις αναζητήσετε στον ιστότοπο Pygame.

    εισαγωγή pygame από pygame.locals import *

Βήμα 3. Ορίστε την ανάλυση παραθύρου

Θα δημιουργήσετε μια καθολική μεταβλητή για την ανάλυση οθόνης, έτσι ώστε να μπορεί να γίνει αναφορά σε διάφορα μέρη του παιχνιδιού. Είναι επίσης εύκολο να το βρείτε στο επάνω μέρος του αρχείου, ώστε να μπορεί να αλλάξει αργότερα. Για προηγμένα έργα, η τοποθέτηση αυτών των πληροφοριών σε ξεχωριστό αρχείο θα ήταν καλύτερη ιδέα.

    ανάλυση = (400, 300)

Βήμα 4. Ορίστε μερικά χρώματα

Τα χρώματα στο pygame είναι (RBGA που κυμαίνονται σε τιμές μεταξύ 0 και 255. Η τιμή άλφα (Α) είναι προαιρετική, αλλά τα άλλα χρώματα (κόκκινο, μπλε και πράσινο είναι υποχρεωτικά).

    λευκό = (255, 255, 255) μαύρο = (0, 0, 0) κόκκινο = (255, 0, 0)

Βήμα 5. Αρχικοποιήστε την οθόνη

Χρησιμοποιήστε τη μεταβλητή ανάλυσης που ορίστηκε νωρίτερα.

    οθόνη = pygame.display.set_mode (ανάλυση)

Βήμα 6. Κάντε έναν βρόχο παιχνιδιού

Επαναλάβετε ορισμένες ενέργειες σε κάθε πλαίσιο του παιχνιδιού μας. Δημιουργήστε έναν βρόχο που θα επαναλαμβάνεται πάντα για να κυκλώσετε όλες αυτές τις ενέργειες.

    ενώ True:

Βήμα 7. Χρωματίστε την οθόνη

    οθόνη. συμπλήρωση (λευκό)

Βήμα 8. Εμφάνιση της οθόνης

Εάν εκτελέσετε το πρόγραμμα, η οθόνη θα γίνει λευκή και στη συνέχεια το πρόγραμμα θα καταρρεύσει. Αυτό συμβαίνει επειδή το λειτουργικό σύστημα στέλνει συμβάντα στο παιχνίδι και το παιχνίδι δεν κάνει τίποτα μαζί τους. Μόλις το παιχνίδι λάβει πάρα πολλά μη διαχειριζόμενα γεγονότα, θα καταρρεύσει.

    while True:… pygame.display.flip ()

Βήμα 9. Χειριστείτε εκδηλώσεις

Λάβετε μια λίστα με όλα τα συμβάντα που έχουν συμβεί σε κάθε πλαίσιο. Θα νοιαστείτε μόνο για ένα συμβάν, το γεγονός διακοπής. Αυτό συμβαίνει όταν ο χρήστης κλείσει το παράθυρο του παιχνιδιού. Αυτό θα αποτρέψει επίσης την κατάρρευση του προγράμματός μας λόγω πάρα πολλών συμβάντων.

    while True:… για συμβάν στο pygame.event.get (): if event.type == QUIT: pygame.quit ()

ProgramPygamePart1
ProgramPygamePart1

Βήμα 10. Δοκιμάστε το

Δείτε πώς πρέπει να είναι ο κώδικας τώρα:

    εισαγωγή pygame από pygame.locals import * resolution = (400, 300) white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) screen = pygame.display.set_mode (ανάλυση) ενώ True: screen.fill (λευκό) pygame.display.flip () για συμβάν στο pygame.event.get (): if event.type == QUIT: pygame.quit ()

Μέρος 3 από 8: Κάνοντας ένα αντικείμενο παιχνιδιού

Βήμα 1. Δημιουργήστε μια νέα τάξη και έναν κατασκευαστή

Ορίστε όλες τις ιδιότητες του αντικειμένου. Παρέχετε επίσης προεπιλεγμένες τιμές για όλες τις ιδιότητες.

    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 = "μπάλα"

Βήμα 2. Καθορίστε τον τρόπο σχεδίασης του αντικειμένου

Χρησιμοποιήστε τις ιδιότητες που ορίστηκαν στον κατασκευαστή για να σχεδιάσετε την μπάλα ως κύκλο καθώς και για να περάσετε μια επιφάνεια στη συνάρτηση για να σχεδιάσετε το αντικείμενο. Η επιφάνεια θα είναι το αντικείμενο οθόνης που δημιουργήθηκε χρησιμοποιώντας την ανάλυση νωρίτερα.

    def draw (self, επιφάνεια): pygame.draw.circle (επιφάνεια, μαύρο, (self.x, self.y), self.radius)

Βήμα 3. Κάντε ένα παράδειγμα της τάξης καθώς και πείτε στον βρόχο παιχνιδιού να τραβήξει την μπάλα σε κάθε βρόχο

    μπάλα = μπάλα () ενώ αληθινή:… μπάλα.σχεδίαση (οθόνη)

Βήμα 4. Κάντε το αντικείμενο να κινηθεί

Δημιουργήστε μια συνάρτηση που θα ενημερώσει τη θέση του αντικειμένου. Καλέστε αυτήν τη συνάρτηση σε κάθε βρόχο παιχνιδιού.

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

Βήμα 5. Περιορίστε το ρυθμό καρέ

Η μπάλα θα κινηθεί πολύ γρήγορα γιατί ο βρόχος παιχνιδιού τρέχει εκατοντάδες φορές το δευτερόλεπτο. Χρησιμοποιήστε το ρολόι του Pygame για να περιορίσετε τον ρυθμό καρέ στα 60 fps.

    ρολόι = pygame.time. Clock () ενώ True:… clock.tick (60)

Βήμα 6. Κρατήστε την μπάλα στην οθόνη

Προσθέστε ελέγχους στη λειτουργία ενημέρωσης για να αντιστρέψετε την κατεύθυνση της μπάλας εάν χτυπήσει ένα από τα άκρα της οθόνης.

    class Ball:… def update (self):… if (self.x <= 0 or self.x> = resolution [0]): self.dx *= -1 if (self.y <= 0 ή self.y > = ανάλυση [1]): self.dy *= -1

ProgramPygamePart2
ProgramPygamePart2

Βήμα 7. Δοκιμάστε το

Δείτε πώς πρέπει να είναι ο κώδικας τώρα:

    εισαγωγή pygame από pygame.locals import * resolution = (400, 300) white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) screen = pygame.display.set_mode (ανάλυση) 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 = "μπάλα" def draw (self, επιφάνεια): pygame.draw.circle (επιφάνεια, μαύρο, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 ή self.x> = ανάλυση [0]): self.dx *= -1 εάν (self.y <= 0 ή self.y> = ανάλυση [1]): self.dy *= -1 μπάλα = μπάλα () ρολόι = pygame.time. Clock () ενώ True: οθόνη. συμπλήρωση (λευκό) ball.draw (οθόνη) ball.update () pygame.display.flip () clock.tick (60) για συμβάν στο pygame.event.get (): if event.type == QUIT: pygame.quit ()

Μέρος 4 από 8: Οργάνωση του παιχνιδιού

Βήμα 1. Χρησιμοποιήστε μαθήματα για να οργανώσετε τα πάντα

Το παιχνίδι θα γίνει πιο περίπλοκο. Χρησιμοποιήστε αντικειμενοστραφείς τεχνικές για να οργανώσετε τον κώδικά σας.

Βήμα 2. Κάντε το βρόχο του παιχνιδιού σε μια τάξη

Δεδομένου ότι το παιχνίδι μας έχει πλέον δεδομένα, συμπεριλαμβανομένων των αντικειμένων και των λειτουργιών του παιχνιδιού σας, είναι λογικό να μετατρέψετε τον βρόχο του παιχνιδιού σας σε κλάση.

    παιχνίδι τάξης ():

Βήμα 3. Προσθέστε έναν κατασκευαστή

Εδώ θα ενεργοποιήσετε ορισμένα αντικείμενα παιχνιδιού, θα δημιουργήσετε την οθόνη και το ρολόι μας και θα προετοιμάσετε το Pygame. Το Pygame πρέπει να προετοιμαστεί για να χρησιμοποιήσει ορισμένες λειτουργίες, όπως κείμενο ή ήχο.

    παιχνίδι τάξης (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (resolution) self.clock = pygame.time. Clock ()

Βήμα 4. Χειριστείτε συμβάντα σε μια συνάρτηση

    παιχνίδι τάξης ():… def handleEvents (self): για συμβάν στο pygame.event.get (): if event.type == QUIT: pygame.quit ()

Βήμα 5. Κάντε τη θηλιά παιχνιδιού συνάρτηση

Καλέστε τη λειτουργία διαχείρισης συμβάντων σε κάθε βρόχο.

    παιχνίδι τάξης ():… def run (self): while True: self.handleEvents () self.screen.fill (white) self.clock.tick (60) pygame.display.flip ()

Βήμα 6. Χειριστείτε πολλά αντικείμενα παιχνιδιού

Αυτή τη στιγμή αυτός ο κώδικας πρέπει να καλέσει το draw και να ενημερώσει το αντικείμενο μας σε κάθε πλαίσιο. Αυτό θα ήταν ακατάστατο αν είχατε πολλά αντικείμενα. Ας προσθέσουμε το αντικείμενό μας σε έναν πίνακα και, στη συνέχεια, ενημερώνουμε και σχεδιάζουμε όλα τα αντικείμενα στον πίνακα κάθε βρόχο. Τώρα μπορείτε εύκολα να προσθέσετε ένα άλλο αντικείμενο και να του δώσετε διαφορετική αρχική θέση.

    παιχνίδι τάξης (): def _init _ (self):… self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100))… def run (self): while True: self.handleEvents () για το gameObj στο self.gameObjects: gameObj.update () self.screen.fill (λευκό) για gameObj στο self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.αναρρίπτω()

ProgramPygamePart3
ProgramPygamePart3

Βήμα 7. Δοκιμάστε το

Δείτε πώς πρέπει να είναι ο κώδικας τώρα:

    εισαγωγή pygame από pygame.locals import * resolution = (400, 300) white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) screen = pygame.display.set_mode (ανάλυση) 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 = "μπάλα" def draw (self, επιφάνεια): pygame.draw.circle (επιφάνεια, μαύρο, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 ή self.x> = ανάλυση [0]): self.dx *= -1 if (self.y <= 0 ή self.y> = ανάλυση [1]): self.dy *= -1 παιχνίδι τάξης (): 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): για συμβάν στο pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvent s () για gameObj στο self.gameObjects: gameObj.update () self.screen.fill (λευκό) για gameObj στο self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display flip () παιχνίδι (). τρέξτε ()

Μέρος 5 από 8: Προσθήκη αντικειμένου παίκτη

Βήμα 1. Φτιάξτε μια κατηγορία παικτών και κατασκευαστή

Θα κάνετε έναν άλλο κύκλο που ελέγχεται από το ποντίκι. Αρχικοποιήστε τις τιμές στον κατασκευαστή. Η ακτίνα είναι η μόνη σημαντική τιμή.

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

Βήμα 2. Καθορίστε τον τρόπο σχεδίασης του αντικειμένου της συσκευής αναπαραγωγής

Θα είναι με τον ίδιο τρόπο που σχεδιάσατε τα άλλα αντικείμενα του παιχνιδιού.

    class Player:… def draw (self, επιφάνεια): pygame.draw.circle (επιφάνεια, κόκκινο, (self.x, self.y), self.radius)

Βήμα 3. Προσθέστε το στοιχείο ελέγχου ποντικιού για το αντικείμενο της συσκευής αναπαραγωγής

Σε κάθε καρέ, ελέγξτε τη θέση του ποντικιού και ορίστε τη θέση των αντικειμένων των παικτών σε αυτό το σημείο.

    class Player:… def update (self): cord = pygame.mouse.get_pos () self.x = καλώδιο [0] self.y = καλώδιο [1]

Βήμα 4. Προσθέστε ένα αντικείμενο παίκτη στα gameObjects

Δημιουργήστε μια νέα παρουσία παίκτη και προσθέστε τη στη λίστα.

    παιχνίδι κατηγορίας (): def _init _ (self):… self.gameObjects.append (Player ())

ProgramPygamePart4
ProgramPygamePart4

Βήμα 5. Δοκιμάστε το

Δείτε πώς πρέπει να είναι ο κώδικας τώρα:

    εισαγωγή pygame από pygame.locals import * resolution = (400, 300) white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) screen = pygame.display.set_mode (ανάλυση) 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 = "μπάλα" def draw (self, επιφάνεια): pygame.draw.circle (επιφάνεια, μαύρο, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 ή self.x> = ανάλυση [0]): self.dx *= -1 if (self.y <= 0 ή self.y> = ανάλυση [1]): self.dy *= -1 class Παίκτης: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (self, επιφάνεια): pygame.draw.circle (επιφάνεια, κόκκινο, (self.x, self.y), self.radius) def ενημέρωση (εαυτός): cord = pygame.mouse.get_pos () self.x = καλώδιο [0] self.y = καλώδιο [1] παιχνίδι τάξης (): 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): για συμβάν στο pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () για gameObj στον εαυτό.gameObjects: gameObj.update () self.screen.fill (λευκό) για gameObj στο self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () παιχνίδι () τρέξιμο()

Μέρος 6 από 8: Κάνοντας αντικείμενα να αλληλεπιδρούν με το πρόγραμμα αναπαραγωγής

Βήμα 1. Αλλάξτε τις λειτουργίες ενημέρωσης

Για να αλληλεπιδράσουν τα αντικείμενα, θα πρέπει να έχουν πρόσβαση το ένα στο άλλο. Ας προσθέσουμε μια άλλη παράμετρο στο Update για να περάσει στη λίστα gameObjects. Θα πρέπει να το προσθέσετε τόσο στο αντικείμενο του παίκτη όσο και στα αντικείμενα της μπάλας. Εάν έχετε πολλά αντικείμενα παιχνιδιού, η κληρονομικότητα θα σας βοηθήσει να διατηρήσετε όλες τις υπογραφές της μεθόδου σας ίδιες.

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

Βήμα 2. Ελέγξτε για συγκρούσεις ανάμεσα στον παίκτη και τις μπάλες

Περάστε από όλα τα αντικείμενα του παιχνιδιού και ελέγξτε αν ο τύπος των αντικειμένων είναι μπάλα. Στη συνέχεια, χρησιμοποιήστε τις ακτίνες των δύο αντικειμένων και τον τύπο απόστασης για να ελέγξετε αν συγκρούονται. Οι κύκλοι είναι πραγματικά εύκολο να ελεγχθούν σε σύγκρουση. Αυτός είναι ο μεγαλύτερος λόγος που δεν χρησιμοποιήσατε κάποιο άλλο σχήμα για αυτό το παιχνίδι.

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

ProgramPygamePart5
ProgramPygamePart5

Βήμα 3. Τερματίστε το παιχνίδι εάν ο παίκτης "χτυπηθεί"

Ας σταματήσουμε το παιχνίδι προς το παρόν.

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

Βήμα 4. Δοκιμάστε το

Δείτε πώς πρέπει να είναι ο κώδικας τώρα:

    εισαγωγή pygame από pygame.locals import * resolution = (400, 300) white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) screen = pygame.display.set_mode (ανάλυση) 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 = "μπάλα" def draw (self, επιφάνεια): pygame.draw.circle (επιφάνεια, μαύρο, (self.x, self.y), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 ή self.x> = ανάλυση [0]): self.dx *= -1 if (self.y <= 0 ή self.y> = ανάλυση [1]): self.dy *= -1 class Παίκτης: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (self, επιφάνεια): pygame.draw.circle (επιφάνεια, κόκκινο, (self.x, self.y), self.radius) def update (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] for gameObj in gameObjects: if gameObj.type == "μπάλα": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: pygame.quit () παιχνίδι τάξης (): 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): για εκδήλωση στο pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () για gameObj στο self.gameObjects: gameObj.update (self.gameObjects) self.screen.fill (λευκό) για gameObj στο self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () παιχνίδι (). τρέξιμο ()

Μέρος 7 από 8: Προσθήκη ελεγκτή παιχνιδιών στη δημιουργία αντικειμένων

Βήμα 1. Δημιουργήστε μια κατηγορία ελεγκτή παιχνιδιών

Οι ελεγκτές παιχνιδιών είναι υπεύθυνοι για το "τρέξιμο" του παιχνιδιού. Είναι διαφορετικό από την κατηγορία παιχνιδιών μας που είναι υπεύθυνη για τη σχεδίαση και την ενημέρωση όλων των αντικειμένων μας. Ο ελεγκτής θα προσθέτει περιοδικά μια άλλη μπάλα στην οθόνη για να κάνει το παιχνίδι πιο δύσκολο. Προσθέστε έναν κατασκευαστή και αρχικοποιήστε μερικές βασικές τιμές. Το διάστημα θα είναι ο χρόνος πριν από την προσθήκη μιας άλλης μπάλας.

    class GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "game controller"

Βήμα 2. Προσθέστε τη λειτουργία ενημέρωσης

Αυτό θα ελέγξει πόσος χρόνος έχει περάσει από την ώρα που προστέθηκε μια μπάλα ή από την έναρξη του παιχνιδιού. Εάν ο χρόνος είναι μεγαλύτερος από το διάστημα, θα επαναφέρετε τον χρόνο και θα προσθέσετε μια μπάλα.

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

Βήμα 3. Δώστε στις μπάλες τυχαίες ταχύτητες

Θα χρειαστεί να χρησιμοποιήσετε τυχαίους αριθμούς για να κάνετε το παιχνίδι διαφορετικό κάθε φορά. Ωστόσο, οι ταχύτητες των σφαιρών είναι πλέον ένας αριθμός κυμαινόμενου σημείου αντί ενός ακέραιου αριθμού.

    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 = τυχαίο ()*2, yVel = τυχαίο ()*2))

Βήμα 4. Διορθώστε τη λειτουργία σχεδίασης

Η συνάρτηση σχεδίασης δεν δέχεται πλωτήρες. Ας μετατρέψουμε τη θέση της μπάλας σε ακέραιους αριθμούς προτού κληρωθούν οι μπάλες.

    class Ball:… def draw (self, επιφάνεια): pygame.draw.circle (επιφάνεια, μαύρο, (int (self.x), int (self.y)), self.radius)

Βήμα 5. Ορίστε μια μέθοδο κλήρωσης για τον ελεγκτή παιχνιδιού

Δεδομένου ότι είναι ένα αντικείμενο παιχνιδιού, ο κύριος βρόχος θα προσπαθήσει να το σχεδιάσει. Θα χρειαστεί να ορίσετε μια λειτουργία κλήρωσης που δεν κάνει τίποτα, ώστε το παιχνίδι να μην καταρρεύσει.

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

Βήμα 6. Προσθέστε τον ελεγκτή παιχνιδιού στο gameObjects και αφαιρέστε τις 2 μπάλες

Το παιχνίδι πρέπει τώρα να γεννά μια μπάλα κάθε πέντε δευτερόλεπτα.

    παιχνίδι τάξης (): def _init _ (self):… self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ())

ProgramPygamePart6
ProgramPygamePart6

Βήμα 7. Δοκιμάστε το

Δείτε πώς πρέπει να είναι ο κώδικας τώρα:

    εισαγωγή pygame από τυχαία εισαγωγή τυχαία από pygame.locals import * resolution = (400, 300) white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) screen = 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 = "μπάλα" def draw (self, επιφάνεια): pygame.draw.circle (επιφάνεια, μαύρο, (int (εαυτός x), int (self.y)), self.radius) def ενημέρωση (self, gameObjects): self.x += self.dx self.y += self.dy εάν (self.x <= 0 ή εαυτός x> = ανάλυση [0]): self.dx *= -1 εάν (self.y <= 0 ή self.y> = ανάλυση [1]): self.dy *= -1 class Παίκτης: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (self, επιφάνεια): pygame.draw.circle (επιφάνεια, κόκκινο, (self.x, self.y), self.radius) def ενημέρωση (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] για gameObj στο παιχνίδι Αντικείμενα: if gameObj.type == "μπάλα": 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 = "game controller "def update (self, gameObjects): if self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Μπάλα (xVel = τυχαία ()*2, yVel = τυχαίο ()*2)) def draw (self, screen): pass class game (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (ανάλυση) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ()) def handleEvents (self): για εκδήλωση στο pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () για gameObj στο self.gameObjects: gameObj.update (self.gameObjects) self.screen.γεμίστε (λευκό) για gameObj στο self.gameO bjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () παιχνίδι () τρέξιμο ()

Μέρος 8 από 8: Προσθήκη βαθμολογίας και Game Over

Βήμα 1. Προσθέστε ένα σκορ στην κατηγορία ελεγκτή παιχνιδιού

Δημιουργήστε ένα αντικείμενο γραμματοσειράς και μια μεταβλητή βαθμολογίας. Θα σχεδιάσετε τη γραμματοσειρά σε κάθε πλαίσιο για να εμφανίσετε τη βαθμολογία και να αυξήσετε τη βαθμολογία κάθε καρέ στην ενημέρωση.

    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 ισοπαλία (self, screen): screen.blit (self.scoreText.render (str (self.score), True, black), (5, 5))

Βήμα 2. Τροποποιήστε τον τρόπο λήξης του παιχνιδιού

Ας απαλλαγούμε από το τερματισμό όταν ο παίκτης εντοπίσει μια σύγκρουση. Αντ 'αυτού, θα ορίσετε μια μεταβλητή στο πρόγραμμα αναπαραγωγής που μπορεί να ελέγξει το παιχνίδι. Όταν έχει οριστεί το gameOver, σταματήστε να ενημερώνετε αντικείμενα. Αυτό θα παγώσει τα πάντα στη θέση τους, ώστε ο παίκτης να δει τι συνέβη και να ελέγξει το σκορ του. Σημειώστε ότι τα αντικείμενα εξακολουθούν να σχεδιάζονται, απλά δεν ενημερώνονται.

    class Player: def _init _ (self, rad = 20):… self.gameOver = False def update (self, gameObjects):… για gameObj στο gameObjects: if gameObj.type == "μπάλα": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: self.gameOver = Αληθινό παιχνίδι τάξης (): def _init _ (self): … Self.gameOver = Λάθος απενεργοποίηση (εαυτός): ενώ True: self.handleEvents () αν όχι self.gameOver: για gameObj στο self.gameObjects: gameObj.update (self.gameObjects) εάν gameObj.type == "παίκτης": self.gameOver = gameObj.gameOver

ProgramPygameFinal
ProgramPygameFinal

Βήμα 3. Δοκιμάστε το

Δείτε πώς πρέπει να είναι ο τελικός κώδικας τώρα:

    εισαγωγή pygame από τυχαία εισαγωγή τυχαία από pygame.locals import * resolution = (400, 300) white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) screen = 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 = "μπάλα" def draw (self, επιφάνεια): pygame.draw.circle (επιφάνεια, μαύρο, (int (εαυτός x), int (self.y)), self.radius) def ενημέρωση (self, gameObjects): self.x += self.dx self.y += self.dy εάν (self.x <= 0 ή εαυτός x> = ανάλυση [0]): self.dx *= -1 εάν (self.y <= 0 ή self.y> = ανάλυση [1]): self.dy *= -1 class Παίκτης: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" self.gameOver = Falευδής ισοπαλία def (εαυτός, επιφάνεια): pygame.draw.circle (επιφάνεια, κόκκινο, (self.x, self.y), self.radius) def ενημέρωση (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] για gameObj στο gameObjects: if gameObj.type == "μπάλα": 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 = "game controller" 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 ισοπαλία (εαυτός, οθόνη): screen.blit (self.scoreText.render (str (self.score), True, black), (5, 5)) class 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): για συμβάντα στο pygame.event.get (): εάν ev ent.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () if not self.gameOver: for gameObj in self.gameObjects: gameObj.update (self.gameObjects) if gameObj. type == "player": self.gameOver = gameObj.gameOver self.screen.fill (λευκό) για gameObj στο self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () παιχνίδι (). τρέξτε ()

Συνιστάται: