Κάντε τα arcade παιχνίδια σας ακόμα πιο ευχάριστα και συναρπαστικά προσθέτοντας τυχαία κινούμενα αντικείμενα.

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

Δημιουργήστε ένα απλό παιχνίδι

Πριν ξεκινήσετε, βεβαιωθείτε ότι έχετε pip εγκατεστημένο στη συσκευή σας. Χρησιμοποιήστε αυτήν την εντολή για να εγκαταστήσετε το στοά βιβλιοθήκη:

pip εγκατάσταση arcade

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

Ο κώδικας που χρησιμοποιείται σε αυτό το άρθρο είναι διαθέσιμος σε αυτό Αποθετήριο GitHub και είναι δωρεάν για χρήση βάσει της άδειας MIT.

Ρυθμίστε τη θέση της συσκευής αναπαραγωγής στη μέση της οθόνης οριζόντια και προσθέστε μια μικρή απόσταση από την κορυφή. Μπορείτε να ελέγξετε την κίνηση του παίκτη χρησιμοποιώντας τα πλήκτρα βέλους.

Εδώ είναι ο κώδικας για το βασικό μας παιχνίδι:

εισαγωγή στοά

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_RADIUS = 15

τάξηMyGame(στοά. Παράθυρο):
def__μέσα σε αυτό__(εαυτός, πλάτος, ύψος):
super().__init__(πλάτος, ύψος)
arcade.set_background_color (arcade.color. ΑΣΠΡΟ)

self.player_x = SCREEN_WIDTH // 2
self.player_y = PLAYER_RADIUS + 10

defon_draw(εαυτός):
arcade.start_render()
arcade.draw_circle_filled (self.player_x, self.player_y, PLAYER_RADIUS, arcade.color. ΜΠΛΕ)

defεκσυγχρονίζω(self, delta_time):
πέρασμα

defon_key_press(αυτο, κλειδί, τροποποιητές):
αν κλειδί == arcade.key. ΑΡΙΣΤΕΡΑ:
self.player_x -= 5
ελιφ κλειδί == arcade.key. ΣΩΣΤΑ:
self.player_x += 5

αν __όνομα__ == "__κύριος__":
παιχνίδι = MyGame (SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()

Προσθήκη πολλαπλών αντικειμένων

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

Στον κώδικα του παιχνιδιού σας, προσθέστε μια λίστα που ονομάζεται αντικείμενα για να αποθηκεύσετε τις θέσεις των τυχαίων κινούμενων αντικειμένων. Μετά από αυτό, δημιουργήστε τον αριθμό των αντικειμένων (NUM_OBJECTS) με τυχαίες συντεταγμένες x και y εντός των ορίων της οθόνης. Τα αντικείμενα σχεδιάζονται ως κόκκινοι κύκλοι χρησιμοποιώντας το arcade.draw_circle_filled λειτουργία.

εισαγωγή στοά
εισαγωγή τυχαίος

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_RADIUS = 15
ΑΝΤΙΚΕΙΜΕΝΟ_ΑΚΤΙΝΑ = 10
NUM_OBJECTS = 10

τάξηMyGame(στοά. Παράθυρο):
def__μέσα σε αυτό__(εαυτός, πλάτος, ύψος):
super().__init__(πλάτος, ύψος)
arcade.set_background_color (arcade.color. ΑΣΠΡΟ)

self.player_x = SCREEN_WIDTH // 2
self.player_y = PLAYER_RADIUS + 10

self.objects = []
Για _ σε εύρος (NUM_OBJECTS):
x = random.randint(0, SCREEN_WIDTH)
y = random.randint(0, SCREEN_HEIGHT)
self.objects.append((x, y))

defon_draw(εαυτός):
arcade.start_render()
arcade.draw_circle_filled (self.player_x, self.player_y, PLAYER_RADIUS, arcade.color. ΜΠΛΕ)

Για αντικ σε self.objects:
x, y = αντικ
arcade.draw_circle_filled (x, y, OBJECT_RADIUS, arcade.color. ΤΟ ΚΟΚΚΙΝΟ)

defεκσυγχρονίζω(self, delta_time):
πέρασμα

defon_key_press(αυτο, κλειδί, τροποποιητές):
αν κλειδί == arcade.key. ΑΡΙΣΤΕΡΑ:
self.player_x -= 5
ελιφ κλειδί == arcade.key. ΣΩΣΤΑ:
self.player_x += 5

αν __όνομα__ == "__κύριος__":
παιχνίδι = MyGame (SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()

Παρακάτω είναι η έξοδος:

Εφαρμογή αλγόριθμου τυχαίας κίνησης

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

Επαναλάβετε σε κάθε αντικείμενο και δημιουργήστε τυχαίες τιμές για dx και dy, που αντιπροσωπεύει την αλλαγή στις συντεταγμένες x και y. Στη συνέχεια, ενημερώστε τη θέση του αντικειμένου προσθέτοντας αυτές τις τιμές. Εδώ είναι ο τροποποιημένος κώδικας:

defεκσυγχρονίζω(self, delta_time):
Για Εγώ σε εύρος (NUM_OBJECTS):
x, y = εαυτός.αντικείμενα[i]
dx = random.randint(-5, 5)
dy = random.randint(-5, 5)
x += dx
y += δυ
self.objects[i] = (x, y)

Παρακάτω είναι η έξοδος:

Αντικείμενα που κινούνται προς τον παίκτη

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

Για αυτό, υπολογίστε τις διαφορές στις συντεταγμένες x και y μεταξύ του αντικειμένου και του προγράμματος αναπαραγωγής. Με την κανονικοποίηση αυτών των τιμών, λαμβάνετε ένα διάνυσμα κατεύθυνσης. Στη συνέχεια, πολλαπλασιάστε αυτό το διάνυσμα με έναν παράγοντα ταχύτητας (3 σε αυτήν την περίπτωση) και προσθέστε το στη θέση του αντικειμένου. Εδώ είναι το ενημερωμένο εκσυγχρονίζω μέθοδος:

defεκσυγχρονίζω(self, delta_time):
Για Εγώ σε εύρος (NUM_OBJECTS):
x, y = εαυτός.αντικείμενα[i]
dx = self.player_x - x
dy = self.player_y - y
απόσταση = math.sqrt (dx ** 2 + dy ** 2)
dx /= απόσταση
dy /= απόσταση
x += dx * 3
y += dy * 3
self.objects[i] = (x, y)

Παρακάτω είναι η έξοδος:

Τα αντικείμενα αρχίζουν να κινούνται όταν ο παίκτης εισέρχεται στο περιβάλλον

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

defεκσυγχρονίζω(self, delta_time):
Για Εγώ σε εύρος (NUM_OBJECTS):
x, y = εαυτός.αντικείμενα[i]
dx = self.player_x - x
dy = self.player_y - y
απόσταση = math.sqrt (dx ** 2 + dy ** 2)

αν απόσταση < 100: # Προσαρμόστε την ακτίνα όπως χρειάζεται
dx /= απόσταση
dy /= απόσταση
x += dx * 3
y += dy * 3
self.objects[i] = (x, y)

Ανίχνευση σύγκρουσης και αλληλεπίδραση

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

defεκσυγχρονίζω(self, delta_time):
Για Εγώ σε εύρος (NUM_OBJECTS):
x, y = εαυτός.αντικείμενα[i]
dx = self.player_x - x
dy = self.player_y - y
απόσταση = math.sqrt (dx ** 2 + dy ** 2)

αν απόσταση < PLAYER_RADIUS + OBJECT_RADIUS:
# εάν σημειώθηκε σύγκρουση, χειριστείτε το εδώ
self.objects.pop (i)
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))

ελιφ απόσταση < 100:
dx /= απόσταση
dy /= απόσταση
x += dx * 3
y += dy * 3
self.objects[i] = (x, y)

Εξισορρόπηση Τυχαίας

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

Περιορισμός μέγιστης ταχύτητας

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

defεκσυγχρονίζω(self, delta_time):
Για Εγώ σε εύρος (NUM_OBJECTS):
x, y = εαυτός.αντικείμενα[i]
dx = self.player_x - x
dy = self.player_y - y
απόσταση = math.sqrt (dx ** 2 + dy ** 2)

αν απόσταση < PLAYER_RADIUS + OBJECT_RADIUS:
self.objects.pop (i)
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))
ελιφ απόσταση < 100:
dx /= απόσταση
dy /= απόσταση

ταχύτητα = 3# Προσαρμόστε την τιμή της ταχύτητας όπως απαιτείται
dx = min (μέγ. (dx * ταχύτητα, -MAX_SPEED), MAX_SPEED)
dy = ελάχ. (μέγ. (δύο * ταχύτητα, -MAX_SPEED), MAX_SPEED)

x += dx
y += δυ
self.objects[i] = (x, y)

Έλεγχος του ρυθμού αναπαραγωγής

Μπορείτε επίσης να ελέγξετε τον ρυθμό με τον οποίο γεννιούνται νέα αντικείμενα στο παιχνίδι. Προσαρμόστε τον κώδικα ώστε να περιλαμβάνει μια καθυστέρηση μεταξύ της δημιουργίας νέων αντικειμένων:

εισαγωγή χρόνος

τάξηMyGame(στοά. Παράθυρο):
def__μέσα σε αυτό__(εαυτός, πλάτος, ύψος):
super().__init__(πλάτος, ύψος)
arcade.set_background_color (arcade.color. ΑΣΠΡΟ)

self.player_x = SCREEN_WIDTH // 2
self.player_y = PLAYER_RADIUS + 10

self.objects = []
self.last_spawn_time = time.time()

defεκσυγχρονίζω(self, delta_time):
# ελέγξτε τον ρυθμό ωοτοκίας εδώ
αν time.time() - self.last_spawn_time > SPAWN_DELAY:
αν len (self.objects) < MAX_OBJECTS:
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))
self.last_spawn_time = time.time()

Για Εγώ σε εύρος (len (self.objects)):
x, y = εαυτός.αντικείμενα[i]
dx = self.player_x - x
dy = self.player_y - y
απόσταση = math.sqrt (dx ** 2 + dy ** 2)

αν απόσταση < PLAYER_RADIUS + OBJECT_RADIUS:
self.objects.pop (i)
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))
ελιφ απόσταση < 100:
dx /= απόσταση
dy /= απόσταση

x += dx * 3
y += dy * 3
self.objects[i] = (x, y)

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

Κάντε τα παιχνίδια πιο διασκεδαστικά χρησιμοποιώντας κινούμενα αντικείμενα

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