Τα τυχαία κινούμενα αντικείμενα κάνουν τα παιχνίδια πιο συναρπαστικά και προκλητικά. Μάθετε πώς να το ενσωματώνετε στα έργα σας στο Pygame.
Η Pygame, μια δημοφιλής βιβλιοθήκη Python για ανάπτυξη παιχνιδιών, σας επιτρέπει να δημιουργείτε συναρπαστικά και διαδραστικά παιχνίδια με ευκολία. Ένας τρόπος για να βελτιώσετε τις δημιουργίες σας στο Pygame είναι να προσθέσετε τυχαία κινούμενα αντικείμενα. Αυτά τα αντικείμενα μπορεί να είναι εμπόδια, εχθροί, power-ups ή οτιδήποτε προσθέτει δυναμισμό στον κόσμο του παιχνιδιού σας.
Δημιουργήστε ένα απλό παιχνίδι
Ξεκινήστε ρυθμίζοντας ένα βασικό παράθυρο του Pygame και προσθέτοντας ένα αντικείμενο παίκτη μαζί με ορισμένες πλατφόρμες. Μπορείτε επίσης να εφαρμόσετε τη βασική κίνηση του παίκτη χρησιμοποιώντας τα πλήκτρα βέλους ή χρησιμοποιώντας εισόδους αφής.
Ο κώδικας που χρησιμοποιείται σε αυτό το άρθρο είναι διαθέσιμος σε αυτό Αποθετήριο GitHub και είναι δωρεάν για χρήση βάσει της άδειας MIT.
Δημιουργήστε ένα νέο αρχείο με όνομα simple-game.py και προσθέστε τον κωδικό για το βασικό σας παιχνίδι.
Προσθήκη πολλαπλών κινούμενων αντικειμένων
Τώρα που έχετε ένα απλό παιχνίδι με αντικείμενο παίκτη και πλατφόρμες, προσθέστε πολλά τυχαία κινούμενα αντικείμενα στο παιχνίδι. Αυτά τα αντικείμενα θα κινούνται οριζόντια στην οθόνη με διαφορετικές ταχύτητες.
object_width, object_height = 30, 30
object_speed_range = (2, 7)
objects = []defcreate_random_object():
return {
'x': random.randint(0, screen_width - object_width),
'y': random.randint(0, screen_height - object_height),
'speed': random.randint(*object_speed_range)
}for _ in range(5):
objects.append(create_random_object())defdraw_object(obj):
obj_dim = (obj['x'], obj['y'], object_width, object_height)
pygame.draw.rect(screen, WHITE, obj_dim)# Game loop
while running:
screen.fill((0, 0, 0))#... (previous code)
for obj in objects:
obj['x'] += obj['speed']
if obj['x'] > screen_width:
obj['x'] = -object_widthdraw_object(obj)
pygame.display.update()
clock.tick(60)
pygame.quit()
Παρακάτω είναι η έξοδος:
Εφαρμογή αλγόριθμου τυχαίας κίνησης
Επί του παρόντος, τα τυχαία κινούμενα αντικείμενα κινούνται μόνο σε ευθεία οριζόντια γραμμή. Για να κάνετε την κίνησή τους πιο απρόβλεπτη, μπορείτε να προσθέσετε έναν αλγόριθμο τυχαίας κίνησης.
# Random Movement Algorithm
defupdate_random_movement(obj):
# Change the direction randomly
if random.random() < 0.01:
obj['speed'] = -obj['speed']# Game loop
while running:
#... (previous code)for obj in objects:
obj['x'] += obj['speed']
if obj['x'] > screen_width:
obj['x'] = -object_widthupdate_random_movement(obj)
draw_object(obj)pygame.display.update()
clock.tick(60)
pygame.quit()
Κάντε τα αντικείμενα να κινούνται προς το πρόγραμμα αναπαραγωγής
Για να προσθέσετε περισσότερη πολυπλοκότητα στο παιχνίδι, μπορείτε να εισάγετε ορισμένα αντικείμενα που κινούνται προς τον παίκτη. Μπορείτε να το πετύχετε αυτό υπολογίζοντας τη γωνία μεταξύ του αντικειμένου και της συσκευής αναπαραγωγής και προσαρμόζοντας ανάλογα τη θέση του αντικειμένου.
import math
# Objects Moving Towards Player
defmove_towards_player(obj):
player_center_x = player_x + player_width // 2
player_center_y = player_y + player_height // 2
object_center_x = obj['x'] + object_width // 2
object_center_y = obj['y'] + object_height // 2angle1 = player_center_y - object_center_y
angle2 = player_center_x - object_center_xangle = math.atan2(angle1, angle2)
obj['x'] += obj['speed'] * math.cos(angle)
obj['y'] += obj['speed'] * math.sin(angle)# Game loop
while running:
#... (previous code)for obj in objects:
obj['x'] += obj['speed']
if obj['x'] > screen_width:
obj['x'] = -object_widthmove_towards_player(obj)
draw_object(obj)pygame.display.update()
clock.tick(60)
pygame.quit()
Κάντε τα αντικείμενα να κινούνται μόνο όταν ο παίκτης εισέρχεται στο περιβάλλον
Αντί να έχετε όλα τα αντικείμενα να κινούνται από την αρχή, μπορείτε να επιτρέψετε στα αντικείμενα να αρχίσουν να κινούνται μόνο όταν ο παίκτης εισέλθει στο περιβάλλον τους.
# Objects Start to Move When Player Enters Surroundings
surrounding_distance = 150defshould_start_moving(obj):
surrounded1 = abs(obj['x'] - player_x) < surrounding_distance
surrounded2 = abs(obj['y'] - player_y) < surrounding_distance
return surrounded1 or surrounded2# Game loop
while running:
#... (previous code)for obj in objects:
if should_start_moving(obj):
obj['x'] += obj['speed']
if obj['x'] > screen_width:
obj['x'] = -object_widthupdate_random_movement(obj)
move_towards_player(obj)draw_object(obj)
pygame.display.update()
clock.tick(60)
pygame.quit()
Ανίχνευση σύγκρουσης και αλληλεπίδραση
Για να κάνετε το παιχνίδι ακόμα πιο ελκυστικό, μπορείτε προσθέστε ανίχνευση σύγκρουσης μεταξύ της συσκευής αναπαραγωγής και των κινούμενων αντικειμένων. Για παράδειγμα, μπορείτε να αφαιρέσετε ένα αντικείμενο από την οθόνη όταν η συσκευή αναπαραγωγής συγκρούεται με αυτό.
# Collision Detection and Interaction
defis_collision(obj):condition1 = player_x + player_width > obj['x']
condition2 = player_x < obj['x'] + object_width
condition3 = player_y + player_height > obj['y']
condition4 = player_y < obj['y'] + object_height
return ( condition1 and condition2 and condition3 and condition4)# Game loop
while running:
#... (previous code)for obj in objects:
if should_start_moving(obj):
obj['x'] += obj['speed']
if obj['x'] > screen_width:
obj['x'] = -object_widthupdate_random_movement(obj)
move_towards_player(obj)if is_collision(obj):
objects.remove(obj)draw_object(obj)
pygame.display.update()
clock.tick(60)
pygame.quit()
Συμπεριλαμβανομένων πρόσθετων χαρακτηριστικών
Η προσθήκη τυχαίων κινούμενων αντικειμένων μπορεί να χρησιμεύσει ως βάση για την εφαρμογή διαφόρων συναρπαστικών λειτουργιών στο Pygame σας. Ακολουθούν μερικές πρόσθετες ιδέες για να μεταφέρετε το παιχνίδι σας στο επόμενο επίπεδο:
Βαθμολογία και πρόοδος
Εκχωρήστε διαφορετικές βαθμολογίες σε αντικείμενα με βάση το επίπεδο δυσκολίας ή τη σπανιότητά τους. Μπορείτε να δημιουργήσετε και εμφανίσει ένα σύστημα βαθμολόγησης που ανταμείβει τους παίκτες για την επιτυχή πλοήγηση σε κινούμενα αντικείμενα ή τη συλλογή ειδικών αντικειμένων.
Εφαρμόστε ένα πρόγραμμα παρακολούθησης προόδου που αυξάνει τη δυσκολία του παιχνιδιού καθώς οι παίκτες επιτυγχάνουν υψηλότερα σκορ, κρατώντας τους αφοσιωμένους και παρακινούμενους να βελτιωθούν.
Power-Ups και μπόνους
Δημιουργήστε ειδικά αντικείμενα που παρέχουν στον παίκτη προσωρινά πλεονεκτήματα όταν συλλέγονται. Αυτά τα power-ups θα μπορούσαν να περιλαμβάνουν αυξημένη ταχύτητα, αήττητο ή ακόμα και την ικανότητα να παγώνεις ή να καταστρέφεις άλλα αντικείμενα προσωρινά.
Να είστε δημιουργικοί με τα εφέ αυτών των power-ups για να προσθέσετε στρατηγικό βάθος στο παιχνίδι.
Enemy AI and Behavior
Σχεδιάστε πιο εξελιγμένα μοτίβα κίνησης για εχθρικά αντικείμενα, ώστε να τα αποφύγουν οι παίκτες πιο απαιτητικά. Εφαρμόστε απλούς αλγόριθμους AI για να κάνετε τους εχθρούς να κυνηγήσουν τον παίκτη έξυπνα ή να κινηθούν σε συντονισμένα μοτίβα.
Οι διαφορετικές συμπεριφορές του εχθρού θα κρατήσουν τους παίκτες σε εγρήγορση και θα εμποδίσουν το παιχνίδι να γίνει μονότονο.
Συλλεκτικά αντικείμενα και ανταμοιβές
Διασκορπίστε συλλεκτικά αντικείμενα σε όλο τον κόσμο του παιχνιδιού. Αυτά μπορεί να είναι νομίσματα, πολύτιμοι λίθοι ή οποιαδήποτε άλλα θεματικά αντικείμενα. Όταν ο παίκτης συλλέξει έναν συγκεκριμένο αριθμό από αυτά τα αντικείμενα, μπορεί να ξεκλειδώσει νέα επίπεδα, χαρακτήρες ή ακόμα και μυστικά χαρακτηριστικά στο παιχνίδι.
Βέλτιστες πρακτικές για την προσθήκη τυχαίων κινούμενων αντικειμένων
Όταν ενσωματώνετε τυχαία κινούμενα αντικείμενα στο Pygame σας, ακολουθώντας αυτές τις βέλτιστες πρακτικές θα σας βοηθήσουν να δημιουργήσετε μια ισορροπημένη και εκλεπτυσμένη εμπειρία παιχνιδιού:
Δυσκολία εξισορρόπησης
Τα μοτίβα ταχύτητας και κίνησης των τυχαίων κινούμενων αντικειμένων πρέπει να είναι προσεκτικά ισορροπημένα για να παρέχουν μια δίκαιη πρόκληση. Αποφύγετε να κάνετε τα αντικείμενα να κινούνται πολύ γρήγορα ή ακανόνιστα, καθώς μπορεί να απογοητεύσει τους παίκτες και να κάνει το παιχνίδι να αισθάνεται άδικο.
Από την άλλη πλευρά, τα υπερβολικά αργά αντικείμενα μπορούν να κάνουν το παιχνίδι πολύ εύκολο και λιγότερο ελκυστικό.
Βελτιστοποίηση για απόδοση
Εάν το παιχνίδι σας περιλαμβάνει μεγάλο αριθμό τυχαίων κινούμενων αντικειμένων ή σύνθετους αλγόριθμους κίνησης, σκεφτείτε να βελτιστοποιήσετε τον κώδικα για να βελτιώσετε την απόδοση. Χρησιμοποιήστε αποτελεσματικές δομές δεδομένων και αλγόριθμους για να χειριστείτε συγκρούσεις και υπολογισμούς κίνησης.
Ελαχιστοποιήστε τους περιττούς υπολογισμούς για να εξασφαλίσετε ομαλό παιχνίδι με απόκριση, ειδικά σε παλαιότερες ή λιγότερο ισχυρές συσκευές.
Δοκιμές και προσαρμογές
Δοκιμάστε διεξοδικά το παιχνίδι σας με διάφορα σενάρια για να βεβαιωθείτε ότι τα τυχαία κινούμενα αντικείμενα αλληλεπιδρούν σωστά με άλλα στοιχεία του παιχνιδιού. Δοκιμάστε για συγκρούσεις, αλληλεπιδράσεις με τον παίκτη και τυχόν ειδικές κινητικές συμπεριφορές.
Προσαρμόστε την ταχύτητα, τη συμπεριφορά και τα μοτίβα των αντικειμένων με βάση τα σχόλια του playtesting για να επιτύχετε τη βέλτιστη εμπειρία παιχνιδιού.
Τυχαία με έλεγχο
Αν και ο όρος "τυχαία" χρησιμοποιείται για αυτά τα κινούμενα αντικείμενα, η ύπαρξη πλήρους τυχαίας μπορεί να μην είναι πάντα επιθυμητή. Εξετάστε το ενδεχόμενο να ενσωματώσετε την ελεγχόμενη τυχαιότητα, όπου ορισμένες κινήσεις ή μοτίβα ορίζονται μέσα σε ένα εύρος ή ένα σύνολο δυνατοτήτων.
Η ελεγχόμενη τυχαιότητα διασφαλίζει ότι το παιχνίδι παραμένει προκλητικό και ευχάριστο χωρίς να γίνεται πολύ χαοτικό.
Κάνετε τα παιχνίδια πιο ελκυστικά με τυχαία κινούμενα αντικείμενα
Τα τυχαία κινούμενα αντικείμενα προσθέτουν ένα στοιχείο έκπληξης και απρόβλεπτου στο παιχνίδι σας, καθιστώντας το πιο δυναμικό και ελκυστικό. Διατηρούν τους παίκτες σε εγρήγορση, απαιτώντας γρήγορα αντανακλαστικά και στρατηγική σκέψη. Επιπλέον, η ποικιλία των κινήσεων και των αλληλεπιδράσεων με αυτά τα αντικείμενα διασφαλίζει ότι καμία εμπειρία παιχνιδιού δεν είναι ίδια.