Duvarlar
Coddy'nin Pygame ile Oyun Yap kursunda ders 26 / 41.
Kafa ızgaranın dışına çıkacak olduğunda 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 içindedir.
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 işlemlerini yapx > COLS değil, x >= COLS olduğuna dikkat edin: sütunlar 0'dan başlayarak numaralandırılır, bu nedenle COLS sütunu zaten kenarın dışındadır.
Hareket etmeden önce test edin. Kafa hiçbir zaman ızgaranın dışına çıkmaz ve alive false olduktan sonra yılan bulunduğu yerde kalır. alive false iken Game over yazısını (240, 180) konumunda ortalanmış olarak gösterin.
Görev
OrtaYılan bir duvara çarptığında oyunu bitir.
- Döngüden önce
alive = Trueolarak ayarla ve hareketiif alive:koşulunun altına koy. - Yeni hücre
(x, y)ızgaranın dışındaysaalive = Falseolarak ayarla; aksi takdirde önceki gibi hücreyi ekle, yemi ye veya son hücreyi çıkar. alivefalse olduğunda,Game overmesajını(240, 180)koordinatında ortalanmış şekilde göster.
“Oyna” düğmesine bas ve bir duvara çarp: Game over mesajı görünür ve yılan durur. Ardından “Kontrol et” düğmesine bas.
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()
Pygame ile Oyun Yap bölümündeki tüm dersler
3Izgaralar ve Listeler
Hücrelerden Oluşan IzgaraAdım AdımKendi başına pratik yap: Pygame playground