Ye ve Büyü
Coddy'nin Pygame ile Oyun Yap kursunda ders 25 / 40.
Yeni baş oyun üzerine geldiğinde yılan onu yer. Büyüme, zaten sahip olduğun hamlenin bir satır çıkarılmış hâlidir: yemeğin yenildiği adımda çıkarma işlemini atla; kuyruk yerinde kalsın.
body.insert(0, (x, y))
if (x, y) == food:
score += 1
food = new_food(body)
else:
body.pop()Demetler öğe öğe karşılaştırılır; dolayısıyla hem sütun hem satır eşleştiğinde (x, y) == food doğrudur.
Puanı son oyundaki gibi göster: döngüden önce oluşturulmuş bir yazı tipi kullan ve her karede f"Score: {score}" ifadesini (8, 6) konumunda çiz.
Görev
Orta- Döngüden önce
font = pygame.font.Font(None, 32)vescore = 0oluştur. - Yeni başı ekledikten sonra: eğer yiyeceğin üzerindeyse skoru 1 artır ve yeni yiyecek yerleştir; aksi takdirde kuyruğu çıkar.
f"Score: {score}"metnini(240, 240, 240)rengiyle oluştur ve(8, 6)konumuna blit et.
Kendin dene
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()
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)
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))
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))
pygame.display.flip()
clock.tick(10)
pygame.quit()
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Pygame ile Oyun Yap bölümündeki tüm dersler
3Izgaralar ve Listeler
Hücrelerden Oluşan Bir IzgaraAdım AdımKendi başına pratik yap: Pygame playground