Duvarlar
Coddy'nin Pygame Journey'sinin Projeler bölümünün bir parçası. Ders 8 / 31.
Kafa ızgaranın dışına çıktığında oyun sona erer. Bir hücrenin sütunu 0 ile COLS - 1 arasında ve satırı 0 ile ROWS - 1 arasında olduğunda hücre ızgaranın üzerindedir.
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:
# önceki gibi insert, eat veya pop uygulax > COLS değil, x >= COLS olduğuna dikkat et: sütunlar 0'dan başlayarak numaralandırılır, bu yüzden COLS sütunu zaten sınırın dışındadır.
Hareket etmeden önce kontrol et. Kafa hiçbir zaman ızgaranın dışına çıkmaz ve alive false olduktan sonra yılan bulunduğu yerde kalır. Değeri false iken Game over yazısını (240, 180) konumunda ortalanmış şekilde göster.
Görev
Orta- Döngüden önce
alive = Trueayarlayın. - Tüm hareketi
if alive:koşulunun içine alın.xveydeğerlerini hesaplayın; bu hücre ızgaranın dışındaysaalive = Falseayarlayın, aksi takdirde önceki gibi hücreyi ekleyin, yemi yiyin veya hücreyi çıkarın. alivefalse olduğunda,Game overmesajını(240, 180)konumunda ortalanmış olarak gösterin.
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()
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()
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