Menu
CoddyTech

Cheat Sheet Pygame

Terakhir diperbarui

Persiapan dan game loop

Setiap program pygame membuka jendela, lalu mengulang satu loop sampai pemain keluar.

OperasiKode
Instal pygame-cepython3 -m pip install pygame-ce
Impor dan mulai pygameimport pygame pygame.init()
Buka jendelascreen = pygame.display.set_mode((640, 480))
Atur judul jendelapygame.display.set_caption("My Game")
Buat clockclock = pygame.time.Clock()
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)
Matikan setelah looppygame.quit()

Layar

Layar adalah sebuah Surface; tidak ada yang tampil sampai kamu memanggil flip.

OperasiKode
Tampilkan frame yang sudah jadipygame.display.flip()
Perbarui sebagian area sajapygame.display.update([rect1, rect2])
Bersihkan layarscreen.fill((30, 30, 46))
Ukuran jendelascreen.get_size(), screen.get_width()
Layar sebagai Rectscreen.get_rect()
Jendela yang bisa diubah ukurannyapygame.display.set_mode((640, 480), pygame.RESIZABLE)
Layar penuh seukuran desktoppygame.display.set_mode((0, 0), pygame.FULLSCREEN)

Warna dan menggambar

Fungsi pygame.draw menerima surface, warna, dan posisi. width=0 mengisi bentuknya.

OperasiKode
Warna sebagai RGB(255, 140, 0)
Warna dari nama atau hex"tomato", "#ff8c00", pygame.Color("gold")
Persegi panjangpygame.draw.rect(screen, "red", (x, y, w, h))
Garis tepi dan sudut membulatpygame.draw.rect(screen, "red", rect, width=2, border_radius=8)
Lingkaran (dari titik pusatnya)pygame.draw.circle(screen, "blue", (cx, cy), radius)
Garispygame.draw.line(screen, "white", (x1, y1), (x2, y2), 3)
Poligonpygame.draw.polygon(screen, "green", [(0, 0), (40, 0), (20, 30)])
Elips di dalam kotakpygame.draw.ellipse(screen, "purple", (x, y, w, h))

Rect

Rect menyimpan posisi dan ukuran sebagai bilangan bulat.

OperasiKode
Buat Rectplayer = pygame.Rect(x, y, width, height)
Atur posisi lewat titik mana punplayer.center = (320, 240), player.bottom = 400
Tepi dan sudutleft, right, top, bottom, topleft, midbottom
Geser di tempatplayer.move_ip(dx, dy)
Salinan yang digesermoved = player.move(dx, dy)
Jaga tetap di dalam layarplayer.clamp_ip(screen.get_rect())
Perbesar dari titik tengahbigger = player.inflate(20, 20)
Posisi desimal (pygame-ce)pygame.FRect(10.5, 20.25, 40, 40)

Gambar, Surface, dan blit

Muat gambar sekali sebelum loop, lalu blit di setiap frame.

OperasiKode
Muat gambar dengan transparansiimg = pygame.image.load("player.png").convert_alpha()
Muat gambar tanpa transparansibg = pygame.image.load("sky.png").convert()
Tampilkan gambarscreen.blit(img, (x, y))
Tampilkan di tengahscreen.blit(img, img.get_rect(center=(320, 240)))
Surface kosong barupanel = pygame.Surface((200, 100))
Surface transparanlayer = pygame.Surface((200, 100), pygame.SRCALPHA)
Buat seluruh Surface semi transparanimg.set_alpha(128)
Potong frame dari sprite sheetframe = sheet.subsurface((0, 0, 32, 32))
Simpan screenshotpygame.image.save(screen, "shot.png")

Transformasi

Setiap fungsi mengembalikan Surface baru; ubah yang asli, bukan hasil terakhir.

OperasiKode
Ubah ukuranpygame.transform.scale(img, (64, 64))
Skala dengan faktorpygame.transform.scale_by(img, 2)
Ubah ukuran dengan haluspygame.transform.smoothscale(img, (64, 64))
Putar (berlawanan arah jarum jam, dalam derajat)pygame.transform.rotate(img, 45)
Putar di sekitar titik tengahrotated = pygame.transform.rotate(original, angle) rect = rotated.get_rect(center=rect.center)
Cerminkan secara horizontalpygame.transform.flip(img, True, False)

Event dan keyboard

Pakai event untuk satu kali tekan dan get_pressed() untuk tombol yang ditahan.

OperasiKode
Baca event frame inifor event in pygame.event.get():
Jendela ditutupevent.type == pygame.QUIT
Tombol ditekanevent.type == pygame.KEYDOWN and event.key == pygame.K_SPACE
Tombol dilepasevent.type == pygame.KEYUP
Karakter yang diketikevent.unicode
Tombol yang sedang ditahankeys = pygame.key.get_pressed() if keys[pygame.K_LEFT]: x -= 5
Arah dari dua tomboldx = keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]
Tombol yang ditekan di frame ini (pygame-ce)pygame.key.get_just_pressed()[pygame.K_SPACE]
Konstanta tombolK_a...K_z, K_0...K_9, K_UP, K_RETURN, K_ESCAPE, K_LSHIFT
Nama tombolpygame.key.name(event.key)
Event kustomHIT = pygame.event.custom_type() pygame.event.post(pygame.event.Event(HIT))

Mouse

Tombol: 1 kiri, 2 tengah, 3 kanan.

OperasiKode
Tombol mouse ditekanevent.type == pygame.MOUSEBUTTONDOWN and event.button == 1
Posisi saat ditekanevent.pos
Posisi pointer sekarangx, y = pygame.mouse.get_pos()
Tombol mouse yang sedang ditahanleft, middle, right = pygame.mouse.get_pressed()
Mouse bergerakevent.type == pygame.MOUSEMOTION, event.rel
Roda mouse diputarevent.type == pygame.MOUSEWHEEL, event.y
Klik di dalam tombolbutton_rect.collidepoint(event.pos)
Sembunyikan pointerpygame.mouse.set_visible(False)

Sprite dan grup

Sprite menyimpan image dan rect; grup memperbarui dan menggambar banyak sprite sekaligus.

OperasiKode
Class spriteclass Coin(pygame.sprite.Sprite): def __init__(self, pos): super().__init__() self.image = coin_img self.rect = self.image.get_rect(center=pos)
Buat grupcoins = pygame.sprite.Group()
Tambahkan ke grupcoins.add(Coin((100, 50)))
Perbarui setiap spritecoins.update()
Gambar setiap spritecoins.draw(screen)
Hapus sprite dari semua grupcoin.kill()
Grup berisi satu spriteplayer = pygame.sprite.GroupSingle(Player())

Tabrakan

Rect bertabrakan saat saling tumpang tindih; tepi yang hanya bersentuhan tidak dihitung.

OperasiKode
Dua persegi panjanga.colliderect(b)
Titik di dalamrect.collidepoint(x, y)
Yang pertama dari banyakrect.collidelist(walls) # index or -1
Sprite dengan gruphits = pygame.sprite.spritecollide(player, coins, True)
Ada tabrakan atau tidakpygame.sprite.spritecollideany(player, enemies)
Grup dengan gruppygame.sprite.groupcollide(bullets, enemies, True, True)
Akurat per pikselpygame.sprite.spritecollide(a, group, False, pygame.sprite.collide_mask)
Lingkaranpygame.Vector2(a).distance_to(b) < r1 + r2

Teks dan font

Render teks ke Surface, lalu blit.

OperasiKode
Font bawaanfont = pygame.font.Font(None, 36)
Font sistemfont = pygame.font.SysFont("arial", 24)
File fontfont = pygame.font.Font("pixel.ttf", 32)
Render tekstext = font.render("Score: 10", True, "white")
Tampilkan di tengahscreen.blit(text, text.get_rect(center=(320, 40)))
Bungkus teks panjang (pygame-ce)font.render(story, True, "white", None, 400)
Ukuran tanpa renderfont.size("Hello")
Font yang terpasangpygame.font.get_fonts()

Suara dan musik

Muat suara sekali. Musik memutar satu lagu langsung dari file-nya.

OperasiKode
Muat suarajump = pygame.mixer.Sound("jump.ogg")
Putarjump.play()
Volume suarajump.set_volume(0.5)
Muat musikpygame.mixer.music.load("theme.ogg")
Ulang musik tanpa hentipygame.mixer.music.play(-1)
Jeda dan lanjutkanpygame.mixer.music.pause(), pygame.mixer.music.unpause()
Hentikan musikpygame.mixer.music.stop()

Waktu dan timer

Tick dihitung dalam milidetik.

OperasiKode
Batasi frame rateclock.tick(60)
Delta time dalam detikdt = clock.tick(60) / 1000
Frame rate saat iniclock.get_fps()
Milidetik sejak initpygame.time.get_ticks()
Event timer berulangSPAWN = pygame.event.custom_type() pygame.time.set_timer(SPAWN, 1000)
Timer sekali jalanpygame.time.set_timer(SPAWN, 2000, loops=1)
Hentikan timerpygame.time.set_timer(SPAWN, 0)

Vector2

Bilangan desimal untuk posisi dan kecepatan.

OperasiKode
Buat vektorpos = pygame.Vector2(100, 200)
Gerakkan sesuai kecepatanpos += velocity * dt
Panjangvelocity.length()
Kecepatan sama saat diagonalif direction.length() > 0: direction = direction.normalize()
Jarak antar titikpos.distance_to(target)
Putarvelocity.rotate(90)
Melangkah ke sebuah titik (pygame-ce)pos.move_towards_ip(target, 5)

Kode pygame yang sering kamu butuhkan saat membuat game 2D dengan Python, dikelompokkan per tugas: game loop, layar, warna dan menggambar, Rect, gambar dan blit, mengubah ukuran dan memutar, input keyboard dan mouse, sprite dan grup, tabrakan, teks, suara, timer, dan Vector2. Setiap baris berisi potongan kode pendek yang bisa kamu tempel, di samping penjelasan fungsinya.

Semua di sini ditulis untuk pygame-ce 2.5, edisi komunitas pygame, yang tetap kamu impor dengan import pygame. Baris yang ditandai pygame-ce memakai fitur tambahannya; semua baris lain juga berjalan di pygame asli. Coba potongan kode mana pun di playground pygame, yang menjalankan pygame di browser tanpa perlu instalasi. Baru mulai belajar Python? Mulailah dari cheat sheet Python.

Pertanyaan umum tentang cheat sheet pygame

Apakah cheat sheet pygame ini gratis?

Ya. Gratis dan tanpa perlu daftar. Simpan di bookmark atau cetak ke PDF dari browser, lalu kembali kapan pun kamu butuh pemanggilan yang tepat untuk grup sprite, suara, atau pengecekan tabrakan.

Apakah cheat sheet ini bisa dipakai untuk pygame dan pygame-ce?
Bisa. Keduanya diimpor dengan import pygame dan berbagi hampir seluruh API. Baris yang ditandai pygame-ce (FRect, scale_by, get_just_pressed, pembungkusan teks, dan move_towards_ip) butuh pygame-ce, sedangkan sisanya berjalan di keduanya.
Kenapa jendela pygame-ku tidak merespons?
Game loop-mu tidak membaca event. Panggil pygame.event.get() sekali di setiap frame, meskipun kamu mengabaikan event-nya, dan akhiri setiap frame dengan pygame.display.flip() dan clock.tick(60).
Untuk input, sebaiknya pakai event atau key.get_pressed()?
Pakai event KEYDOWN untuk aksi yang terjadi sekali per tekan, seperti melompat atau membuka menu. Pakai pygame.key.get_pressed() untuk aksi yang berlangsung selama tombol ditahan, seperti berjalan.
Ilustrasi bahasa pemrograman di Coddy

Belajar Pygame bersama Coddy

Mulai