Dinding
Pelajaran 26 dari 40 dalam kursus Buat Game dengan Pygame di Coddy.
Permainan berakhir saat kepala akan keluar dari grid. Sebuah sel berada di grid jika kolomnya dari 0 hingga COLS - 1 dan barisnya dari 0 hingga ROWS - 1.
if alive:
x = body[0][0] + direction[0]
y = body[0][1] + direction[1]
if x < 0 or x >= COLS or y < 0 or y >= ROWS:
alive = False
else:
# insert, eat, atau pop seperti sebelumnyaPerhatikan x >= COLS, bukan x > COLS: kolom diberi nomor mulai dari 0, jadi kolom COLS sudah melewati tepi.
Lakukan pengujian sebelum bergerak. Kepala tidak pernah keluar dari grid, dan setelah alive bernilai false, ular tetap berada di tempatnya. Tampilkan Game over di tengah pada (240, 180) saat nilainya false.
Tantangan
Sedang- Tetapkan
alive = Truesebelum perulangan. - Letakkan seluruh gerakan di dalam
if alive:. Tentukanxdany; jika sel tersebut berada di luar grid, tetapkanalive = False, jika tidak, sisipkan, makan, atau keluarkan seperti sebelumnya. - Saat
alivebernilai false, tampilkanGame overdi tengah pada(240, 180).
Coba sendiri
import random
import pygame
CELL = 20
COLS, ROWS = 24, 18
TURNS = {
pygame.K_LEFT: (-1, 0),
pygame.K_RIGHT: (1, 0),
pygame.K_UP: (0, -1),
pygame.K_DOWN: (0, 1),
}
pygame.init()
screen = pygame.display.set_mode((COLS * CELL, ROWS * CELL))
pygame.display.set_caption("Snake")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)
def draw_cell(cell, color):
col, row = cell
pygame.draw.rect(screen, color, (col * CELL + 1, row * CELL + 1, CELL - 2, CELL - 2))
def new_food(body):
while True:
cell = (random.randrange(COLS), random.randrange(ROWS))
if cell not in body:
return cell
body = [(5, 9), (4, 9), (3, 9)]
direction = (1, 0)
food = new_food(body)
score = 0
running = True
while running:
moving = direction
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN and event.key in TURNS:
turn = TURNS[event.key]
if turn != (-moving[0], -moving[1]):
direction = turn
x = body[0][0] + direction[0]
y = body[0][1] + direction[1]
body.insert(0, (x, y))
if (x, y) == food:
score += 1
food = new_food(body)
else:
body.pop()
screen.fill((30, 30, 46))
draw_cell(food, (235, 80, 80))
for cell in body[1:]:
draw_cell(cell, (120, 220, 120))
draw_cell(body[0], (180, 255, 160))
score_text = font.render(f"Score: {score}", True, (240, 240, 240))
screen.blit(score_text, (8, 6))
pygame.display.flip()
clock.tick(10)
pygame.quit()
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Buat Game dengan Pygame
Latihan sendiri: Playground Pygame