Indiferent dacă o coliziune oferă o pornire sau duce la terminarea jocului, trebuie să fii capabil să o detectezi. Iată cum se poate face acest lucru cu biblioteca arcade a lui Python.
Coliziunile sunt un aspect fundamental al gameplay-ului în multe genuri de jocuri video. Ele adaugă un strat de provocare și entuziasm la jocuri, cerând jucătorilor să treacă prin obstacole, să evite inamicii și să colecteze recompense.
Implementarea detectării și gestionării coliziunilor în jocurile dvs. este crucială pentru a crea mecanici de joc realiste și dinamice, care să mențină jucătorii implicați și distrați. Puteți detecta cu ușurință coliziunile cu biblioteca arcade, folosind funcțiile sale încorporate.
Crearea unui joc simplu
Înainte de a începe, asigurați-vă că aveți pip instalat pe dispozitivul dvs. Utilizați această comandă pentru a instala biblioteca arcade:
pip install arcade
După aceea, creați un joc în care jucătorul se poate mișca la stânga și la dreapta pentru a evita ciocnirea cu un dreptunghi inamic. Puteți utiliza funcția de desen încorporată pentru sprites.
Puteți găsi complet cod în acest depozit GitHub.
Iată codul jocului:
import arcadă
SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480
MOVEMENT_SPEED = 5clasăJocul meu(arcadă. Fereastră):
def__init__(sine, lățime, înălțime):
super().__init__(lățime, înălțime, "Jocul meu")
arcade.set_background_color (arcade.color. ALB)
self.player = arcade. SpriteSolidColor(50, 50, arcade.color. ALBASTRU)
self.player.center_x = SCREEN_WIDTH // 3
self.player.center_y = 50
self.enemy = arcade. SpriteSolidColor(50, 50, arcade.color. ROȘU)
self.enemy.center_x = SCREEN_WIDTH // 2
self.enemy.center_y = 50defon_draw(de sine):
arcade.start_render()
self.player.draw()
sine.dușman.trage()defon_key_press(sine, cheie, modificatori):
dacă cheie == arcade.key. STÂNGA:
self.player.center_x -= MOVEMENT_SPEED
elif cheie == arcade.key. DREAPTA:
self.player.center_x += MOVEMENT_SPEEDdefActualizați(self, delta_time):
dacă arcade.check_for_collision (self.player, self.enemy):
imprimare("Joc încheiat")defprincipal():
joc = MyGame (SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()
dacă __nume__ == "__principal__":
principal()
Funcțiile de detectare a coliziunilor din Arcade
Biblioteca Arcade oferă o modalitate simplă de a detecta coliziunile între sprite-uri. The check_for_colision funcția ia două sprite-uri ca argumente și returnează o valoare booleană care indică dacă sprite-urile s-au ciocnit. Puteți folosi această funcție pentru a detecta coliziunile dintre jucător și sprite inamici din jocul dvs.
Puteți schimba Actualizați metodă de a verifica dacă există coliziuni între jucător și sprite inamici. Dacă biblioteca detectează o coliziune, puteți imprima Joc încheiat la consolă.
Iată codul actualizat:
defActualizați(self, delta_time):
dacă arcade.check_for_collision (self.player, self.enemy):
imprimare("Joc încheiat")
altfel:
self.player.update()
Cu această modificare, jocul dvs. va detecta coliziunile și va imprima Joc încheiat text dacă jucătorul se ciocnește de inamicul.
Adăugarea mai multor caracteristici
Pentru a vă face jocul mai captivant, puteți adăuga funcții suplimentare, cum ar fi scor, power-up-uri și mai mulți inamici.
De exemplu, puteți crea o listă de inamici și puteți actualiza jocul pentru a genera noi inamici în poziții aleatorii după fiecare coliziune. Puteți mutați jucătorul stânga și dreapta pentru a evita inamicul și a câștiga un punct. Iată un exemplu despre cum puteți implementa aceste caracteristici:
import Aleatoriu
clasăJocul meu(arcadă. Fereastră):
def__init__(sine, lățime, înălțime):
super().__init__(lățime, înălțime, "Jocul meu")
arcade.set_background_color (arcade.color. ALB)
self.player = arcade. SpriteSolidColor(50, 50, arcade.color. ALBASTRU)
self.player.center_x = SCREEN_WIDTH // 2
self.player.center_y = 50
self.enemies = arcade. SpriteList()
self.score = 0
pentru i în gamă(3):
enemy = arcade. SpriteSolidColor(50, 50, arcade.color. ROȘU)
enemy.center_x = random.randint(0, SCREEN_WIDTH)
enemy.center_y = random.randint (SCREEN_HEIGHT // 2, SCREEN_HEIGHT)
self.enemies.append (inamic)defon_draw(de sine):
arcade.start_render()
self.player.draw()
self.enmies.draw()
arcade.draw_text(f"Scor: {self.score}", 10, SCREEN_HEIGHT - 30, arcade.color. NEGRU, 16)
defActualizați(self, delta_time):
dacă arcade.check_for_collision_with_list (self.player, self.enemies):
imprimare("Joc încheiat")
arcade.close_window()
altfel:
self.player.update()
pentru dusman în sine.dușmani:
enemy.center_y -= MOVEMENT_SPEED / 2
dacă inamic.center_y < 0:
enemy.center_x = random.randint(0, SCREEN_WIDTH)
enemy.center_y = random.randint (SCREEN_HEIGHT // 2, SCREEN_HEIGHT)
self.score += 1
Cu aceste modificări, jocul tău are acum mai mulți inamici care apar în poziții aleatorii și se mișcă în jos. Jucătorul câștigă un punct pentru fiecare inamic evitat cu succes, iar jocul se termină dacă jucătorul se ciocnește de vreun inamic.
Îmbunătățiți implicarea utilizatorilor cu coliziunile
Adăugând funcții de detectare și tratare a coliziunilor la jocurile dvs., puteți crea experiențe de joc mai captivante și mai provocatoare pentru jucători. De la simple jocuri de evitare și colectare la jocuri de platformă și împușcături mai complexe, coliziunile joacă un rol crucial în crearea unor mecanici de joc antrenante și satisfăcătoare.
Așadar, dacă doriți să creați jocuri mai captivante și mai captivante, care să-i facă pe jucători să se întoarcă pentru mai multe, luați în considerare încorporarea funcțiilor de detectare a coliziunilor în mecanica dvs. de joc.