Menu
CoddyTech

Dónde empieza el jugador

Parte de la sección Mundos del Journey de Pygame de Coddy. Lección 4 de 35.

Un nivel determina dónde empieza el jugador, así que ponlo también en el mapa: una P. Mientras los bucles leen el mapa, la casilla P indica la posición inicial del jugador.

elif char == "P":
    player = pygame.Rect(col * TILE + 4, row * TILE + 4, 28, 28)

El jugador es un cuadrado de 28 píxeles, así que empieza a (36 - 28) / 2 = 4 píxeles de la esquina de la casilla, en el centro de esta. Ahora, mover la P en el texto cambia el punto de partida: no hay que hacer cálculos.

El bucle se ejecuta antes que el bucle del juego, así que player ya existe cuando el bucle del juego lo mueve. Asegúrate de que nada después de los bucles vuelva a establecer player, o esa línea posterior prevalecerá.

challenge icon

Desafío

Fácil

El mapa ahora tiene una P. El código inicial coloca al jugador en una posición fija: (40, 40).

  1. En los bucles del mapa, para P, crea player = pygame.Rect(col * TILE + 4, row * TILE + 4, 28, 28).
  2. Elimina la línea que coloca al jugador en (40, 40).

Pruébalo tú mismo

import pygame

TILE = 36
WALL = (120, 90, 60)
COIN = (255, 196, 0)
PLAYER = (80, 200, 120)

LEVEL = [
    "################",
    "#..............#",
    "#.C..####...C..#",
    "#..............#",
    "#....C....##...#",
    "#..##.....##.C.#",
    "#..##..P.......#",
    "#.C.......###..#",
    "#..............#",
    "####..####..####",
]

pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Map from Text")
clock = pygame.time.Clock()

walls = []
coins = []
for row, line in enumerate(LEVEL):
    for col, char in enumerate(line):
        if char == "#":
            walls.append(pygame.Rect(col * TILE, row * TILE, TILE, TILE))
        elif char == "C":
            coins.append(pygame.Rect(col * TILE + 10, row * TILE + 10, 16, 16))
player = pygame.Rect(40, 40, 28, 28)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player.x -= 4
    if keys[pygame.K_RIGHT]:
        player.x += 4
    if keys[pygame.K_UP]:
        player.y -= 4
    if keys[pygame.K_DOWN]:
        player.y += 4

    screen.fill((30, 30, 46))
    for wall in walls:
        pygame.draw.rect(screen, WALL, wall)
    for coin in coins:
        pygame.draw.rect(screen, COIN, coin)
    pygame.draw.rect(screen, PLAYER, player)
    pygame.display.flip()
    clock.tick(60)

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 Mundos

Practica por tu cuenta: Playground de Pygame