Menu
CoddyTech

Cheat sheet pygame

Ultimo aggiornamento

Setup e game loop

Ogni programma pygame apre una finestra e poi ripete un ciclo finché il giocatore non esce.

OperazioneCodice
Installare pygame-cepython3 -m pip install pygame-ce
Importare e avviare pygameimport pygame pygame.init()
Aprire una finestrascreen = pygame.display.set_mode((640, 480))
Impostare il titolo della finestrapygame.display.set_caption("My Game")
Creare un clockclock = pygame.time.Clock()
Il game looprunning = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False screen.fill("black") pygame.display.flip() clock.tick(60)
Chiudere pygame dopo il ciclopygame.quit()

Display

Lo schermo è una Surface; non si vede nulla finché non chiami flip.

OperazioneCodice
Mostrare il frame completopygame.display.flip()
Mostrare solo alcune areepygame.display.update([rect1, rect2])
Pulire lo schermoscreen.fill((30, 30, 46))
Dimensioni della finestrascreen.get_size(), screen.get_width()
Lo schermo come Rectscreen.get_rect()
Finestra ridimensionabilepygame.display.set_mode((640, 480), pygame.RESIZABLE)
Schermo intero alla risoluzione del desktoppygame.display.set_mode((0, 0), pygame.FULLSCREEN)

Colori e disegno

Le funzioni di pygame.draw prendono una superficie, un colore e una posizione. width=0 riempie.

OperazioneCodice
Colore in RGB(255, 140, 0)
Colore per nome o in esadecimale"tomato", "#ff8c00", pygame.Color("gold")
Rettangolopygame.draw.rect(screen, "red", (x, y, w, h))
Contorno e angoli arrotondatipygame.draw.rect(screen, "red", rect, width=2, border_radius=8)
Cerchio (dal centro)pygame.draw.circle(screen, "blue", (cx, cy), radius)
Lineapygame.draw.line(screen, "white", (x1, y1), (x2, y2), 3)
Poligonopygame.draw.polygon(screen, "green", [(0, 0), (40, 0), (20, 30)])
Ellisse in un riquadropygame.draw.ellipse(screen, "purple", (x, y, w, h))

Rect

Un Rect memorizza una posizione e una dimensione come numeri interi.

OperazioneCodice
Creare un Rectplayer = pygame.Rect(x, y, width, height)
Posizionare da qualsiasi puntoplayer.center = (320, 240), player.bottom = 400
Lati e angolileft, right, top, bottom, topleft, midbottom
Spostare sul postoplayer.move_ip(dx, dy)
Copia spostatamoved = player.move(dx, dy)
Tenere dentro lo schermoplayer.clamp_ip(screen.get_rect())
Ingrandire attorno al centrobigger = player.inflate(20, 20)
Posizioni decimali (pygame-ce)pygame.FRect(10.5, 20.25, 40, 40)

Immagini, Surface e blit

Carica le immagini una volta, prima del ciclo, poi fai il blit a ogni frame.

OperazioneCodice
Caricare un'immagine con trasparenzaimg = pygame.image.load("player.png").convert_alpha()
Caricare un'immagine opacabg = pygame.image.load("sky.png").convert()
Disegnare un'immaginescreen.blit(img, (x, y))
Disegnare centratascreen.blit(img, img.get_rect(center=(320, 240)))
Nuova Surface vuotapanel = pygame.Surface((200, 100))
Surface trasparentelayer = pygame.Surface((200, 100), pygame.SRCALPHA)
Rendere semitrasparente una Surface interaimg.set_alpha(128)
Ritagliare un frame da uno sprite sheetframe = sheet.subsurface((0, 0, 32, 32))
Salvare uno screenshotpygame.image.save(screen, "shot.png")

Trasformazioni

Ogni funzione restituisce una nuova Surface; trasforma l'originale, non l'ultimo risultato.

OperazioneCodice
Ridimensionarepygame.transform.scale(img, (64, 64))
Scalare di un fattorepygame.transform.scale_by(img, 2)
Ridimensionare con smussaturapygame.transform.smoothscale(img, (64, 64))
Ruotare (senso antiorario, in gradi)pygame.transform.rotate(img, 45)
Ruotare attorno al centrorotated = pygame.transform.rotate(original, angle) rect = rotated.get_rect(center=rect.center)
Specchiare in orizzontalepygame.transform.flip(img, True, False)

Eventi e tastiera

Usa gli eventi per le singole pressioni e get_pressed() per i tasti tenuti premuti.

OperazioneCodice
Leggere gli eventi del framefor event in pygame.event.get():
Finestra chiusaevent.type == pygame.QUIT
È stato premuto un tastoevent.type == pygame.KEYDOWN and event.key == pygame.K_SPACE
È stato rilasciato un tastoevent.type == pygame.KEYUP
Carattere digitatoevent.unicode
Tasti premuti orakeys = pygame.key.get_pressed() if keys[pygame.K_LEFT]: x -= 5
Direzione da due tastidx = keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]
Tasti premuti in questo frame (pygame-ce)pygame.key.get_just_pressed()[pygame.K_SPACE]
Costanti dei tastiK_a...K_z, K_0...K_9, K_UP, K_RETURN, K_ESCAPE, K_LSHIFT
Nome di un tastopygame.key.name(event.key)
Evento personalizzatoHIT = pygame.event.custom_type() pygame.event.post(pygame.event.Event(HIT))

Mouse

Pulsanti: 1 sinistro, 2 centrale, 3 destro.

OperazioneCodice
È stato premuto un pulsanteevent.type == pygame.MOUSEBUTTONDOWN and event.button == 1
Dove è stato premutoevent.pos
Posizione attuale del puntatorex, y = pygame.mouse.get_pos()
Pulsanti premuti oraleft, middle, right = pygame.mouse.get_pressed()
Il mouse si è mossoevent.type == pygame.MOUSEMOTION, event.rel
La rotella è girataevent.type == pygame.MOUSEWHEEL, event.y
Clic dentro un pulsantebutton_rect.collidepoint(event.pos)
Nascondere il puntatorepygame.mouse.set_visible(False)

Sprite e gruppi

Uno sprite contiene una image e un rect; un gruppo ne aggiorna e disegna molti.

OperazioneCodice
Classe spriteclass Coin(pygame.sprite.Sprite): def __init__(self, pos): super().__init__() self.image = coin_img self.rect = self.image.get_rect(center=pos)
Creare un gruppocoins = pygame.sprite.Group()
Aggiungere a un gruppocoins.add(Coin((100, 50)))
Aggiornare tutti gli spritecoins.update()
Disegnare tutti gli spritecoins.draw(screen)
Togliere uno sprite da tutti i gruppicoin.kill()
Gruppo con un solo spriteplayer = pygame.sprite.GroupSingle(Player())

Collisioni

Due Rect collidono quando si sovrappongono; i bordi che si toccano soltanto non contano.

OperazioneCodice
Due rettangolia.colliderect(b)
Punto all'internorect.collidepoint(x, y)
Il primo di una listarect.collidelist(walls) # index or -1
Sprite contro un gruppohits = pygame.sprite.spritecollide(player, coins, True)
Almeno una collisionepygame.sprite.spritecollideany(player, enemies)
Gruppo contro gruppopygame.sprite.groupcollide(bullets, enemies, True, True)
Al pixelpygame.sprite.spritecollide(a, group, False, pygame.sprite.collide_mask)
Cerchipygame.Vector2(a).distance_to(b) < r1 + r2

Testo e font

Esegui il render del testo su una Surface, poi fai il blit.

OperazioneCodice
Font predefinitofont = pygame.font.Font(None, 36)
Font di sistemafont = pygame.font.SysFont("arial", 24)
File di fontfont = pygame.font.Font("pixel.ttf", 32)
Render del testotext = font.render("Score: 10", True, "white")
Disegnarlo centratoscreen.blit(text, text.get_rect(center=(320, 40)))
Andare a capo nei testi lunghi (pygame-ce)font.render(story, True, "white", None, 400)
Dimensioni senza renderfont.size("Hello")
Font installatipygame.font.get_fonts()

Suoni e musica

Carica i suoni una volta. La musica riproduce una traccia in streaming dal suo file.

OperazioneCodice
Caricare un suonojump = pygame.mixer.Sound("jump.ogg")
Riprodurlojump.play()
Volume del suonojump.set_volume(0.5)
Caricare la musicapygame.mixer.music.load("theme.ogg")
Musica in loop infinitopygame.mixer.music.play(-1)
Pausa e ripresapygame.mixer.music.pause(), pygame.mixer.music.unpause()
Fermare la musicapygame.mixer.music.stop()

Tempo e timer

I tick sono in millisecondi.

OperazioneCodice
Limitare il frame rateclock.tick(60)
Delta time in secondidt = clock.tick(60) / 1000
Frame rate attualeclock.get_fps()
Millisecondi da initpygame.time.get_ticks()
Evento timer ripetutoSPAWN = pygame.event.custom_type() pygame.time.set_timer(SPAWN, 1000)
Timer singolopygame.time.set_timer(SPAWN, 2000, loops=1)
Fermare un timerpygame.time.set_timer(SPAWN, 0)

Vector2

Numeri decimali per posizioni e velocità.

OperazioneCodice
Creare un vettorepos = pygame.Vector2(100, 200)
Muovere in base a una velocitàpos += velocity * dt
Lunghezzavelocity.length()
Stessa velocità in diagonaleif direction.length() > 0: direction = direction.normalize()
Distanza tra due puntipos.distance_to(target)
Ruotarevelocity.rotate(90)
Avanzare verso un punto (pygame-ce)pos.move_towards_ip(target, 5)

Il codice pygame che ti serve mentre crei un gioco 2D in Python, diviso per attività: il game loop, il display, colori e disegno, Rect, immagini e blit, ridimensionamento e rotazione, input da tastiera e mouse, sprite e gruppi, collisioni, testo, suoni, timer e Vector2. Ogni riga è un breve frammento da incollare, accanto a quello che fa.

Tutto è scritto per pygame-ce 2.5, l'edizione della community di pygame, che si importa sempre con import pygame. Le righe con pygame-ce usano le sue aggiunte; tutte le altre funzionano anche nel pygame originale. Prova qualsiasi frammento nel playground di pygame, che esegue pygame nel browser senza installare nulla. Sei alle prime armi con Python? Parti dal cheat sheet di Python.

Domande frequenti sul cheat sheet di pygame

Questo cheat sheet di pygame è gratuito?

Sì. È gratuito e non serve registrarsi. Salvalo nei preferiti, o stampalo in PDF dal browser, e torna quando ti serve la chiamata esatta per un gruppo di sprite, un suono o un controllo di collisione.

Questo cheat sheet funziona con pygame e pygame-ce?
Sì. Entrambi si importano con import pygame e condividono quasi tutta l'API. Le righe con pygame-ce (FRect, scale_by, get_just_pressed, l'a capo del testo e move_towards_ip) richiedono pygame-ce, e tutto il resto funziona con entrambi.
Perché la mia finestra pygame non risponde?
Il game loop non legge gli eventi. Chiama pygame.event.get() una volta a ogni frame, anche se ignori gli eventi, e chiudi ogni frame con pygame.display.flip() e clock.tick(60).
Meglio usare gli eventi o key.get_pressed() per l'input?
Usa un evento KEYDOWN per le azioni che avvengono una volta per pressione, come saltare o aprire un menu. Usa pygame.key.get_pressed() per le azioni che durano finché un tasto resta premuto, come camminare.
Illustrazione dei linguaggi di programmazione di Coddy

Impara Pygame con Coddy

Inizia