Menu
CoddyTech

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!.

challenge icon

Desafío

Difícil
  1. En cada fotograma, establece level = score // 5 + 1 y muestra f"Level: {level}" en (370, 6).
  2. Actualiza a 8 + 2 * level fotogramas por segundo.
  3. Muévete solo mientras alive and score < 15 y muestra You 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()
quiz iconPonte a prueba

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