

Python - Creare un gioco 2D
Presentation
•
Computers
•
9th - 12th Grade
•
Practice Problem
•
Hard
Lucia Intelisano
FREE Resource
40 Slides • 0 Questions
1
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)
Creare un gioco
con Python
Show answer
Auto Play
Slide 1 / 40
SLIDE
Similar Resources on Wayground
36 questions
000 10/21/2025 Dickinson Intro
Presentation
•
9th - 12th Grade
35 questions
Cancer and Cells
Presentation
•
9th - 12th Grade
35 questions
Mutation and Cancer Lesson
Presentation
•
9th - 12th Grade
34 questions
2022 Review of Inheirtance Patterns
Presentation
•
9th - 12th Grade
34 questions
Complex Inheritance Patterns
Presentation
•
9th - 12th Grade
36 questions
SCSS Sec1 KB Lesson 1 (include part of 1b)
Presentation
•
9th - 12th Grade
36 questions
Fall Final - Day 3 Review - 2024
Presentation
•
9th - 12th Grade
35 questions
10.5
Presentation
•
9th - 12th Grade
Popular Resources on Wayground
6 questions
Secondary Safety Quiz
Presentation
•
9th - 12th Grade
10 questions
MyPath Diagnostic Overview
Presentation
•
6th - 8th Grade
20 questions
Lab Safety Quiz
Quiz
•
6th Grade
21 questions
Continents and Oceans
Quiz
•
6th Grade
20 questions
Adding and Subtracting Decimals
Quiz
•
5th Grade
20 questions
Parts of Speech
Quiz
•
5th Grade
16 questions
Subject & Predicate
Quiz
•
5th Grade
21 questions
Lab Safety
Quiz
•
10th Grade
Discover more resources for Computers
20 questions
Early Computing
Quiz
•
7th - 12th Grade
20 questions
Module 1 Topic 1 Vocabulary
Quiz
•
9th - 12th Grade
10 questions
Exploring Computer Hardware and Software Components
Interactive video
•
6th - 10th Grade
14 questions
Introduction to Digital Citizenship
Quiz
•
9th Grade
39 questions
Safety Review
Quiz
•
9th - 12th Grade
20 questions
Digital Citizenship
Quiz
•
8th - 12th Grade
25 questions
OSHA and Lab Safety
Quiz
•
9th Grade
22 questions
Electronic Computing
Quiz
•
8th - 12th Grade