Murs
Leçon 26 sur 40 du cours Créez des jeux avec Pygame de Coddy.
La partie se termine lorsque la tête sortirait de la grille. Une cellule se trouve sur la grille lorsque sa colonne est comprise entre 0 et COLS - 1 et sa ligne entre 0 et 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:
# insérer, manger ou retirer, comme précédemmentRemarque que c’est x >= COLS, et non x > COLS : les colonnes sont numérotées à partir de 0, donc la colonne COLS est déjà au-delà du bord.
Teste avant de déplacer le serpent. La tête ne sort jamais de la grille et, une fois que alive vaut false, le serpent reste à sa place. Affiche Game over au centre de (240, 180) tant que la valeur est false.
Défi
Moyen- Définis
alive = Trueavant la boucle. - Place tout le déplacement sous
if alive:. Calculexety; si cette case est hors de la grille, définisalive = False, sinon insère, mange ou retire comme avant. - Lorsque
aliveest faux, afficheGame overcentré en(240, 180).
Essayez vous-même
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()
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Créez des jeux avec Pygame
Entraînez-vous par vous-même : Playground Pygame