Search Header Logo
Python - Creare un gioco 2D

Python - Creare un gioco 2D

Assessment

Presentation

Computers

9th - 12th Grade

Practice Problem

Hard

Created by

Lucia Intelisano

FREE Resource

40 Slides • 0 Questions

1

media

Creare un gioco

con Python

2

Iniziare con Pygame

Iniziare con Pygame

Pygame è una libreria, o modulo Python . È una raccolta di codice comune che ti impedisce di dover reinventare la ruota con ogni nuovo gioco che scrivi. Hai già utilizzato il modulo Turtle e puoi immaginare quanto sarebbe stato complesso se avessi dovuto scrivere il codice per creare una penna prima di disegnare con essa. Pygame offre vantaggi simili, ma per i videogiochi.

3

Iniziare con Pygame 2

Un videogioco ha bisogno di un'ambientazione, di un mondo in cui si svolge. In Pygame, ci sono due modi diversi per creare la tua impostazione:

  • Imposta un colore di sfondo

  • Imposta un'immagine di sfondo

In ogni caso, lo sfondo sarà o un'immagine o un colore. I tuoi personaggi non possono interagire con gli oggetti sullo sfondo, quindi non mettere nulla di troppo importante lì dietro.

4

Creazione file main.py


Per avviare un nuovo progetto Python, normalmente crei una nuova cartella sul tuo computer e metti tutti i tuoi file di gioco in questa directory. È di vitale importanza conservare tutti i file necessari per eseguire il gioco all'interno della cartella del progetto.

Creare con notepad++ un file e salvarlo con nome main.py

5

importazione librerie


Quindi dì a Python quali moduli vuoi usare.

In questo esempio di codice non è necessario digitare il carattere # o altro su ogni riga.

Il carattere # in Python rappresenta un commento , note nel codice lasciate per te e per altri programmatori.

import pygame # carica la libreria pygame

import sys # libreria per lavorare con il file system del tuo OS

import os # libreria che aiuta python ad identificare il tuo OS

6

sezioni di codice


Poiché lavorerai molto con questo file di script, è utile creare sezioni all'interno del file in modo da sapere dove mettere le cose. Puoi farlo con i commenti di blocco, che sono commenti che sono visibili solo guardando il tuo codice sorgente. Crea quattro blocchi nel tuo codice. Questi sono tutti commenti che Python ignora, ma sono buoni segnaposto per te mentre segui queste lezioni. Uso ancora i segnaposto quando codice, perché mi aiuta a organizzare e pianificare.

''' Variables '''

# put variables here

''' Objects '''

# put Python classes and functions here

''' Setup '''

# put run-once code here

''' Main Loop ''' # put game loop here

7

dimensioni finestra


Successivamente, imposta le dimensioni della finestra per il tuo gioco. Tieni presente che non tutti hanno un monitor grande, quindi è meglio utilizzare una dimensione dello schermo che si adatti alla "maggior parte" dei computer delle persone.

C'è un modo per attivare la modalità a schermo intero, come fanno molti videogiochi moderni, ma dato che hai appena iniziato, mantienilo semplice e imposta solo una dimensione.

''' Variables '''

worldx = 960

worldy = 720

8

impostazioni di base


Il motore Pygame richiede alcune impostazioni di base prima di poterlo utilizzare in uno script.

Devi impostare il frame rate,

avviare il suo orologio interno e

avviare (usando la parola chiave init, per inizializzare ) Pygame.

Aggiungi queste variabili:

fps = 40 # frame rate

ani = 4 # animation cycles

9

orologio interno


Aggiungi le istruzioni per avviare l'orologio interno di Pygame nella sezione Configurazione:

''' Setup '''

clock = pygame.time.Clock()

pygame.init()

10

Impostazione dello sfondo


Prima di continuare, apri un'applicazione grafica e crea uno sfondo per il tuo mondo di gioco.

Salvalo come stage.png all'interno di una cartella chiamata images nella directory del tuo progetto.

Se hai bisogno di un punto di partenza, puoi scaricare una serie di sfondi Creative Commons da kenny.nl .

11

Impostazione dello sfondo con immagine


La tua grafica non deve essere complessa e puoi sempre tornare indietro e modificarla in un secondo momento.

Una volta che hai uno sfondo, aggiungi questo codice nella sezione di configurazione del tuo file:

world = pygame.display.set_mode([worldx,worldy])

backdrop = pygame.image.load(os.path.join('images','stage.png')) backdropbox = world.get_rect()

12

Impostazione dello sfondo con colore


Se hai intenzione di riempire lo sfondo del tuo mondo di gioco con un colore, tutto ciò di cui hai bisogno è:

world = pygame.display.set_mode([worldx, worldy])

È inoltre necessario definire un colore da utilizzare. Nella sezione di configurazione, crea alcune definizioni di colore utilizzando i valori per rosso, verde e blu (RGB).

''' Variables '''

BLUE = (25, 25, 200)

BLACK = (23, 23, 23)

WHITE = (254, 254, 254)

13

Looping



Se non diversamente specificato, uno script Python viene eseguito una sola volta. I computer sono molto veloci, quindi il tuo script Python verrà eseguito in meno di un secondo.

Per forzare il tuo gioco a rimanere aperto e attivo abbastanza a lungo da permettere a qualcuno di vederlo (figuriamoci giocarci), usa un whileloop. Per fare in modo che il tuo gioco rimanga aperto, puoi impostare una variabile su un valore true, quindi dire a un while di continuare a farlo finché la variabile rimane true.

Questo è spesso chiamato "ciclo principale" e puoi usare il termine main come variabile. Aggiungi la variabile main nella sezione Variabili:

main = True

14

Looping - tasti per uscire



Durante il ciclo principale, utilizza le parole chiave Pygame per rilevare se i tasti sulla tastiera sono stati premuti o rilasciati. Aggiungi questo alla sezione del ciclo principale:

'''Main loop '''

while main:

for event in pygame.event.get():

if event.type == pygame.QUIT:

pygame.quit()

try: sys.exit()

finally: main = False

if event.type == pygame.KEYDOWN:

if event.key == ord('q'):

pygame.quit()

try: sys.exit()

finally: main = False

15

Looping - aggiornamento sfondo o colore



Anche nel tuo ciclo principale, aggiorna lo sfondo del tuo mondo.

Se utilizzi un'immagine per lo sfondo:

world.blit(backdrop, backdropbox)

Se stai usando un colore per lo sfondo:

world.fill(BLUE)

Infine, dì a Pygame di aggiornare tutto sullo schermo e far avanzare l'orologio interno del gioco.

pygame.display.flip()

clock.tick(fps)


Salva il tuo file ed eseguilo di nuovo per vedere il gioco più noioso mai creato.

Per uscire dal gioco, premi q sulla tastiera.



16

Come aggiungere un giocatore al tuo gioco Python



In Pygame, l'icona o l'avatar che un giocatore controlla è chiamato sprite .

Se non hai ancora alcuna grafica da utilizzare per uno sprite del giocatore, scarica i file walk-0.png, walk-2.png, walk-4.png e walk-5.png dal classico gioco open source Supertux e rinominali hero1.png in hero4.png. In alternativa, puoi creare qualcosa per te usando Krita o Inkscape , o cercare OpenGameArt.org per altre opzioni.

Assegna un nome allo sprite del tuo giocatore hero.png. Se stai creando uno sprite animato per un ciclo di camminata, aggiungi una cifra dopo il nome, iniziando con hero1.png. Salva la tua immagine hero in una directory chiamata images nella directory del tuo progetto Python.

17

Crea una classe Python

In Python, quando crei un oggetto che vuoi che appaia sullo schermo, crei una classe.

Nella parte superiore dello script Python, nella sezione Oggetti, aggiungi il codice per creare un lettore.

Se stai usando un'immagine statica senza ciclo di camminata, usa questo codice (nota che questo codice va nella Objects sezione del tuo file):

18

Crea una classe Python

''' Objects '''

class Player(pygame.sprite.Sprite):

""" Spawn a player """

def init(self):

pygame.sprite.Sprite.__init__(self)

self.images = []

img = pygame.image.load(os.path.join('images', 'hero.png')).convert()

self.images.append(img)

self.image = self.images[0]

self.rect = self.image.get_rect()

19

Crea una classe Python

Questo blocco di codice crea un "oggetto" virtuale che Python può usare quando si fa riferimento al tuo hero sprite.

Nella programmazione orientata agli oggetti, un "oggetto" viene indicato come una classe .

Il modello di oggetto (in particolare, pygame.sprite.Sprite) è fornito da Pygame. Questo è ciò che ti rende possibile definire un'immagine per rappresentare il personaggio del giocatore.

20

Crea una classe Python

Se hai un ciclo di camminata per il tuo personaggio giocabile, salva ogni disegno come un singolo file richiamato hero1.pngnella cartella hero4.pngdel tuo progetto images. Quindi usa un ciclo per dire a Python di scorrere ogni file. Questa è una delle caratteristiche della programmazione orientata agli oggetti: ogni classe può avere compiti assegnati esclusivamente ad essa, il che avviene senza influenzare il "mondo" che la circonda. In questo caso, lo sprite del personaggio del tuo giocatore è programmato per scorrere quattro diverse immagini per creare l'illusione di camminare, e questo può accadere indipendentemente da cos'altro sta accadendo intorno ad esso.

21

Crea una classe Python

''' Objects '''

class Player(pygame.sprite.Sprite):

""" Spawn a player """

def init(self):

pygame.sprite.Sprite.__init__(self)

self.images = []

for i in range(1, 5):

img = pygame.image.load(os.path.join('images', 'hero' + str(i) + '.png')).convert()

self.images.append(img)

self.image = self.images[0]

self.rect = self.image.get_rect()

22

Porta il giocatore nel mondo di gioco

Ora che esiste una classe Player, devi usarla per generare uno sprite giocatore nel tuo mondo di gioco. Se non chiami mai la classe Player, non verrà mai eseguita e non ci sarà alcun giocatore. Puoi provarlo eseguendo il tuo gioco ora.

23

Porta il giocatore nel mondo di gioco

Per portare uno sprite del giocatore nel tuo mondo, devi "chiamare" la classe Player per generare uno sprite e quindi aggiungerlo a un gruppo di sprite di Pygame. Aggiungi queste righe alla tua sezione Setup:

player = Player() # spawn player

player.rect.x = 0 # go to x

player.rect.y = 0 # go to y

player_list = pygame.sprite.Group()

player_list.add(player)

24

Porta il giocatore nel mondo di gioco

Prova ad avviare il gioco per vedere cosa succede. Attenzione: non farà quello che ti aspetti. Quando avvii il tuo progetto, lo sprite del giocatore non si genera. In realtà, si genera, ma solo per un millisecondo. Come si risolve qualcosa che accade solo per un millisecondo?

Per far spawnare il giocatore per più di un millisecondo, dì a Python di disegnarlo una volta per ciclo.

25

Porta il giocatore nel mondo di gioco

Cambia la clausola di disegno del tuo ciclo principale in questo modo:

world.blit(backdrop, backdropbox)

player_list.draw(world) # draw player

pygame.display.flip()

clock.tick(fps)

Avvia subito il tuo gioco. Il tuo giocatore si vede!


26

Impostare le chiavi per controllare lo sprite del tuo giocatore

Per fare in modo che Python monitori le pressioni dei tasti in arrivo, aggiungi questo codice al ciclo principale. Non esiste ancora un codice per far accadere qualcosa, quindi usa print. Questa è una tecnica di debug comune.


27

Impostare le chiavi per controllare lo sprite del tuo giocatore

while main:

for event in pygame.event.get():

if event.type == pygame.QUIT:

pygame.quit();

sys.exit()

main = False

if event.type == pygame.KEYDOWN:

if event.key == pygame.K_LEFT or event.key == ord('a'):

print('left')

if event.key == pygame.K_RIGHT or event.key == ord('d'):

print('right')

if event.key == pygame.K_UP or event.key == ord('w'):

print('jump')

if event.type == pygame.KEYUP:

if event.key == pygame.K_LEFT or event.key == ord('a'):

print('left stop')

if event.key == pygame.K_RIGHT or event.key == ord('d'):

print('right stop')

if event.key == ord('q'):

pygame.quit()

sys.exit()

main = False


28

Codificare la funzione di movimento del giocatore


Per far muovere il tuo sprite, devi creare una proprietà per il tuo sprite che rappresenti il ​​movimento. Quando il tuo sprite non si muove, questa variabile è impostata su 0.

Se stai animando il tuo sprite, o se decidi di animarlo in futuro, devi anche tenere traccia dei fotogrammi in modo che il ciclo di camminata rimanga in pista.

Crea queste variabili nella classe Player. Le prime due righe sono per il contesto (le hai già nel tuo codice, se le hai seguite), quindi aggiungi solo le ultime tre:

def init(self):

pygame.sprite.Sprite.__init__(self)

self.movex = 0 # move along X

self.movey = 0 # move along Y

self.frame = 0 # count frames

29

Codificare la funzione di movimento del giocatore


Per far muovere il tuo sprite, devi creare una proprietà per il tuo sprite che rappresenti il ​​movimento. Quando il tuo sprite non si muove, questa variabile è impostata su 0.

Se stai animando il tuo sprite, o se decidi di animarlo in futuro, devi anche tenere traccia dei fotogrammi in modo che il ciclo di camminata rimanga in pista.

Crea queste variabili nella classe Player. Le prime due righe sono per il contesto (le hai già nel tuo codice, se le hai seguite), quindi aggiungi solo le ultime tre:

def init(self):

pygame.sprite.Sprite.__init__(self)

self.movex = 0 # move along X

self.movey = 0 # move along Y

self.frame = 0 # count frames

30

Codificare la funzione di movimento del giocatore


Crea una funzione nella tua classe Player per aggiungere un certo numero di pixel alla posizione del tuo sprite sullo schermo. Non preoccuparti di quanti pixel aggiungi ancora; ciò sarà deciso nel codice successivo.

def control(self,x,y):

""" control player movement """

self.movex += x

self.movey += y

31

Codificare la funzione di movimento del giocatore


Per spostare uno sprite in Pygame, devi dire a Python di ridisegnare lo sprite nella sua nuova posizione e dove si trova quella nuova posizione. Poiché lo sprite Player non è sempre in movimento, rendi questi aggiornamenti una funzione dedicata all'interno della classe Player. Aggiungi questa funzione dopo la control funzione che hai creato in precedenza.

32

Codificare la funzione di movimento del giocatore


Per far sembrare che lo sprite stia camminando (o volando, o qualunque cosa il tuo sprite dovrebbe fare), devi cambiare la sua posizione sullo schermo quando viene premuto il tasto appropriato.

Per farlo muovere sullo schermo, ridefinisci la sua posizione, designata dalle proprietà self.rect.x e self.rect.y, nella sua posizione corrente più qualsiasi quantità di movex o movey applicata. (Il numero di pixel richiesti dallo spostamento viene impostato successivamente.)

def update(self):

""" Update sprite position """

self.rect.x = self.rect.x + self.movex

self.rect.y = self.rect.y + self.movey

33

Codificare la funzione di movimento del giocatore


Per l'animazione, fai avanzare i fotogrammi dell'animazione ogni volta che il tuo sprite si muove e usa il fotogramma dell'animazione corrispondente come immagine del giocatore:

# moving left

if self.movex < 0:

self.frame += 1

if self.frame > 3*ani:

self.frame = 0

self.image = self.images[self.frame//ani] # moving right

if self.movex > 0:

self.frame += 1

if self.frame > 3*ani:

self.frame = 0

self.image = self.images[self.frame//ani]

34

Codificare la funzione di movimento del giocatore


Dì al codice quanti pixel aggiungere alla posizione del tuo sprite impostando una variabile, quindi usa quella variabile quando attivi le funzioni del tuo sprite Player.

Innanzitutto, crea la variabile nella sezione di configurazione. In questo codice, le prime due righe sono per il contesto, quindi aggiungi semplicemente la terza riga al tuo script:

player_list = pygame.sprite.Group()

player_list.add(player)

steps = 10 # how many pixels to move

35

Codificare la funzione di movimento del giocatore


Ora che hai la funzione e la variabile appropriate, usa i tasti premuti per attivare la funzione e inviare la variabile al tuo sprite.

Fai questo sostituendo le printistruzioni nel tuo ciclo principale con il nome dello sprite del giocatore (giocatore), la funzione (.control) e quanti passi lungo l'asse X e l'asse Y vuoi che lo sprite del giocatore si muova con ogni ciclo.

36

Codificare la funzione di movimento del giocatore


if event.type == pygame.KEYDOWN:

if event.key == pygame.K_LEFT or event.key == ord('a'):

player.control(-steps,0)

if event.key == pygame.K_RIGHT or event.key == ord('d'):

player.control(steps,0)

if event.key == pygame.K_UP or event.key == ord('w'):

print('jump')

if event.type == pygame.KEYUP:

if event.key == pygame.K_LEFT or event.key == ord('a'):

player.control(steps,0)

if event.key == pygame.K_RIGHT or event.key == ord('d'):

player.control(-steps,0)

if event.key == ord('q'):

pygame.quit()

sys.exit()

main = False

37

Codificare la funzione di movimento del giocatore


Ricorda, stepsè una variabile che rappresenta di quanti pixel si muove il tuo sprite quando viene premuto un tasto. Se aggiungi 10 pixel alla posizione dello sprite del tuo giocatore quando premi D o la freccia destra, quando smetti di premere quel tasto devi sottrarre 10 ( -steps) per riportare lo slancio dello sprite a 0. Prova subito il tuo gioco. Attenzione: non farà quello che ti aspetti.


38

Aggiornamento della grafica dello sprite



Perché il tuo sprite non si muove ancora? Perché il ciclo principale non chiama la funzione update .

Aggiungi codice al tuo ciclo principale per dire a Python di aggiornare la posizione dello sprite del tuo giocatore. Aggiungi la riga con il commento:

player.update() # update player position

player_list.draw(world)

pygame.display.flip()

clock.tick(fps)


39

Aggiornamento della grafica dello sprite



Hai solo bisogno della trasformazione sull'istanza quando la tua grafica sta camminando nella direzione opposta rispetto a quella per impostazione predefinita.

La mia grafica è rivolta verso destra, quindi applico la trasformazione al blocco di codice sinistro.

La pygame.transform.flip accetta tre argomenti, secondo la documentazione di Pygame : cosa capovolgere, se capovolgere orizzontalmente e se capovolgere verticalmente.

In questo caso, quelli sono la grafica (che hai già definito nel codice esistente), True per l'orizzontale e False per un capovolgimento verticale.


40

Aggiornamento della grafica dello sprite



# moving left

if self.movex < 0:

self.frame += 1

if self.frame > 3*ani:

self.frame = 0

self.image = pygame.transform.flip(self.images[self.frame // ani], True, False)


media

Creare un gioco

con Python

Show answer

Auto Play

Slide 1 / 40

SLIDE