Niveles
Lección 28 de 40 del curso Crea juegos con Pygame de Coddy.
Cada 5 unidades de comida, la serpiente alcanza un nuevo nivel y se mueve más rápido. El nivel se calcula a partir de la puntuación: la división entera score // 5 da 0 para puntuaciones de 0 a 4, 1 para puntuaciones de 5 a 9, y así sucesivamente.
level = score // 5 + 1
clock.tick(8 + 2 * level)La serpiente se mueve una celda por fotograma, así que más fotogramas por segundo significan una serpiente más rápida: 10 pasos por segundo en el nivel 1, 12 en el nivel 2, 14 en el nivel 3.
Al alcanzar 15 unidades de comida, se gana. El juego se detiene cuando alive and score < 15 es falso y muestra You win!.
Desafío
Difícil- En cada fotograma, establece
level = score // 5 + 1y muestraf"Level: {level}"en(370, 6). - Actualiza a
8 + 2 * levelfotogramas por segundo. - Muévete solo mientras
alive and score < 15y muestraYou win!centrado en(240, 180)cuando la puntuación sea 15.
Pruébalo tú mismo
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
alive = True
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
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 or (x, y) in body[:-1]:
alive = False
else:
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))
if not alive:
message = font.render("Game over", True, (240, 240, 240))
screen.blit(message, message.get_rect(center=(240, 180)))
pygame.display.flip()
clock.tick(10)
pygame.quit()
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Crea juegos con Pygame
Practica por tu cuenta: Playground de Pygame