Come creare un gioco 2D con Python e la libreria Arcade

Python è un linguaggio eccezionale per le persone che imparano a programmare, e perfetto per chiunque voglia “fare cose” e non spendere un sacco di tempo sul codice boilerplate. Arcade è una libreria Python per la creazione di videogiochi 2D che è facile da iniziare a utilizzare, e molto capace come si guadagna esperienza. In questo articolo, vi spiegherò come iniziare a utilizzare Python e Arcade per programmare i videogiochi.

Ho iniziato lo sviluppo su Arcade dopo aver insegnato agli studenti utilizzando la libreria PyGame., Ho insegnato di persona usando PyGame per quasi 10 anni e ho sviluppato ProgramArcadeGames.com per insegnare online. PyGame è fantastico, ma alla fine mi sono sentito come se stessi perdendo tempo a dover coprire i bug che non sono mai stati risolti.

Mi preoccupavo di insegnare cose come il ciclo degli eventi, che non era più il modo in cui codifichiamo. Avevo un’intera sezione in cui spiegavo perché le coordinate y erano invertite. Poiché PyGame è stato aggiornato raramente ed è basato su una vecchia libreria SDL 1, piuttosto che qualcosa di più moderno come OpenGL, non nutrivo molte speranze per il futuro.,

Volevo una libreria che fosse più facile da usare, più potente e utilizzasse alcune delle nuove funzionalità di Python 3, come decoratori e suggerimenti di tipo. Arcade è esso. E questo è come iniziare.

Installazione

Arcade, come molti altri pacchetti, è disponibile tramite PyPi, il che significa che puoi installare Arcade usando il comandopip (o il comando pipenv)., Se hai già installato Python, puoi probabilmente aprire un prompt dei comandi su Windows e digitare:

pip install arcade

O su macOS e Linux digitare:

pip3 install arcade

Per istruzioni di installazione più dettagliate, puoi fare riferimento alla documentazione di installazione di Arcade.

Disegno semplice

È possibile aprire una finestra e creare disegni semplici con poche righe di codice. Creiamo un esempio che disegna una faccina sorridente come la figura seguente:

Lo script qui sotto mostra come è possibile utilizzare i comandi di disegno di Arcade per fare questo., Si noti che non è necessario sapere come utilizzare le classi o persino definire le funzioni. Programmazione con rapido feedback visivo è grande per chi vuole iniziare a imparare a programmare.

Usando le funzioni

Ovviamente, scrivere codice nel contesto globale non è una buona forma. Per fortuna migliorare il vostro programma utilizzando le funzioni è facile. Qui possiamo vedere un esempio di un disegno di un albero di pino in una posizione specifica (x, y) utilizzando una funzione:

Per l’esempio completo, vedere disegno con funzioni.,

Il programmatore più esperto saprà che i programmi grafici moderni caricano prima le informazioni di disegno sulla scheda grafica, quindi chiedono alla scheda grafica di disegnarla in seguito come batch. Arcade supporta anche questo. Disegnare 10.000 rettangoli singolarmente richiede circa 0,800 secondi. Disegnarli come batch richiede meno di 0,001 secondi.

La classe Window

I programmi più grandi in genere derivano dalla classe Window o utilizzano decoratori. Ciò consente a un programmatore di scrivere codice per gestire il disegno, l’aggiornamento e la gestione dell’input da parte dell’utente., Un modello per un avvio di un Window -programma basato è al di sotto.

La classe Window ha diversi metodi che i programmi possono ignorare per fornire funzionalità al programma. Ecco alcuni dei più comunemente usati:

  • on_draw: Tutto il codice per disegnare lo schermo va qui.
  • update: Tutto il codice per spostare i tuoi oggetti ed eseguire la logica di gioco va qui. Questo è chiamato circa 60 volte al secondo.,
  • on_key_press: Gestire gli eventi quando si preme un tasto, come ad esempio dare un giocatore una velocità.
  • on_key_release: Gestire quando viene rilasciato un tasto, qui si potrebbe fermare un giocatore di muoversi.
  • on_mouse_motion: Questo viene chiamato ogni volta che il mouse si muove.
  • on_mouse_press: Chiamato quando viene premuto un pulsante del mouse.
  • set_viewport: Questa funzione viene utilizzata nei giochi a scorrimento, quando si ha un mondo molto più grande di quello che può essere visto su uno schermo., Chiamare set_viewport consente a un programmatore di impostare quale parte di quel mondo è attualmente visibile.

Sprite

Sprite sono un modo semplice per creare un oggetto bitmap 2D in Arcade. Arcade ha metodi che lo rendono facile da disegnare, spostare e animare sprite. È inoltre possibile utilizzare facilmente sprite per rilevare collisioni tra oggetti.

Creare uno sprite

Creare un’istanza della classe Sprite di Arcade da una grafica è facile. Un programmatore ha bisogno solo del nome del file di un’immagine per basare lo sprite su, e facoltativamente un numero per scalare l’immagine verso l’alto o verso il basso., Ad esempio:

SPRITE_SCALING_COIN = 0.2
coin = arcade.Sprite("coin_01.png", SPRITE_SCALING_COIN)

Questo codice creerà uno sprite usando l’immagine memorizzata in coin_01.png. L’immagine verrà ridotta al 20% dell’altezza e della larghezza originali.

Liste di sprite

Gli sprite sono normalmente organizzati in liste. Questi elenchi rendono più facile gestire gli sprite. Gli sprite in un elenco useranno OpenGL per disegnare in batch gli sprite come gruppo. Il codice qui sotto imposta un gioco con un giocatore, e un mazzo di monete per il giocatore di raccogliere. Usiamo due liste, una per il giocatore e una per le monete.,

Possiamo facilmente disegnare tutte le monete nelle liste delle monete:

def on_draw(self):
""" Draw everything """
arcade.start_render()
self.coin_list.draw()
self.player_list.draw()

Rilevare collisioni sprite

La funzionecheck_for_collision_with_list ci permette di vedere se uno sprite si imbatte in un altro sprite in una lista. Possiamo usare questo per vedere tutte le monete il giocatore sprite è in contatto con. Usando un semplice ciclofor, possiamo sbarazzarci della moneta dal gioco e aumentare il nostro punteggio.

Per l’esempio completo, vedere collect_coins.py.

Gioco fisica

Molti giochi includono una sorta di fisica., I più semplici sono i programmi top-down che impediscono al giocatore di camminare attraverso i muri. I platform aggiungono più complessità con la gravità e le piattaforme che si muovono. Alcuni giochi utilizzano un motore fisico 2D completo con massa, attrito, molle e altro ancora.

Giochi top-down

Per semplici giochi basati top-down, un programma Arcade ha bisogno di un elenco di pareti che il giocatore (o qualsiasi altra cosa) non può muoversi attraverso. Di solito chiamo questo wall_list., Quindi viene creato un motore fisico nel Window codice di configurazione della classe con:

self.physics_engine = arcade.PhysicsEngineSimple(self.player_sprite, self.wall_list)

Il player_sprite viene dato un vettore di movimento con i suoi due attributi change_x e change_y. Un semplice esempio di ciò sarebbe quello di far muovere il giocatore con la tastiera. Ad esempio, questo potrebbe essere nel figlio personalizzato della classe Window:

Anche se quel codice imposta la velocità del giocatore, non sposta il giocatore., Nel metodoupdate della classeWindow, chiamandophysics_engine.update() si sposta il lettore, ma non attraverso i muri.

def update(self, delta_time):
""" Movement and game logic """
self.physics_engine.update()

Per un esempio completo vedere sprite_move_walls.py.

Platform

Passare a un platform vista laterale è piuttosto facile. Un programmatore deve solo cambiare il motore fisico in PhysicsEnginePlatformer e aggiungere la costante di gravità.

self.physics_engine = arcade.PhysicsEnginePlatformer(self.player_sprite,
self.wall_list,
gravity_constant=GRAVITY)

Puoi usare un programma come Tiled per posare le tessere / i blocchi che compongono il tuo livello.

Per un esempio, vedere sprite_tiled_map.,py.

Per la fisica completa 2D è possibile integrare la libreria PyMunk.

Impara con l’esempio

Uno dei modi migliori per imparare è con l’esempio. La libreria Arcade ha una lunga lista di programmi di esempio a cui una persona può attingere per creare giochi. Questi esempi mostrano ciascuno un concetto di gioco che gli studenti hanno chiesto nelle mie classi o online nel corso degli anni.

Eseguire una di queste demo è facile una volta che Arcade è stato installato., Ognuno dei campioni ha un commento all’inizio del programma con un comando che puoi digitare sulla riga di comando per eseguire il campione, ad esempio:

python -m arcade.examples.sprite_moving_platforms

Riepilogo

Arcade consente di avviare la programmazione di grafica e giochi con codice di facile comprensione. Molti nuovi programmatori hanno creato grandi giochi non molto tempo dopo aver iniziato. Fare un tentativo!

Per saperne di più, partecipa a Paul Vincent Craven’s talk, Easy 2D Game Creation With Arcade, a PyCon Cleveland 2018.

Share

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *