Yiyecek
Coddy'nin Pygame Journey'sinin Projeler bölümünün bir parçası. Ders 6 / 31.
Yiyecek rastgele bir hücrede belirir, asla yılanın üzerinde olmaz. Rastgele bir hücre seçin ve yılanın gövdesine denk gelirse tekrar deneyin:
def new_food(body):
while True:
cell = (random.randrange(COLS), random.randrange(ROWS))
if cell not in body:
return cellrandom.randrange(COLS), 0 ile COLS - 1 arasında bir tam sayıdır: her sütunu kapsar ve hiçbir zaman kenarın bir ötesine geçmez. Boş bir hücre bulunduğu anda return işlevi bitirir ve döngüyü de sonlandırır.
cell not in body tüm listeyi bir kerede kontrol eder.
Görev
Kolay- En üste
import randomekle. - Yukarıdaki gibi
draw_cellfonksiyonunun altınanew_food(body)yaz. directionifadesinden sonrafood = new_food(body)ayarla.- Ekranı doldurduktan sonra yiyeceği kırmızı renkte
(235, 80, 80)çiz.
Kendin dene
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))
body = [(5, 9), (4, 9), (3, 9)]
direction = (1, 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))
body.pop()
screen.fill((30, 30, 46))
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.
Projeler bölümündeki tüm dersler
Kendi başına pratik yap: Pygame playground