Menu
CoddyTech

Dove inizia il giocatore

Fa parte della sezione Mondi del percorso Pygame di Coddy. Lezione 4 di 35.

Un livello determina dove inizia il giocatore, quindi aggiungi anche questo alla mappa: una P. Mentre i cicli leggono la mappa, la casella P indica la posizione iniziale del giocatore.

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

Il giocatore è un quadrato di 28 pixel, quindi inizia a 4 pixel dall'angolo della casella, al centro della casella: (36 - 28) / 2 = 4. Ora basta spostare la P nel testo per cambiare il punto di partenza: non devi calcolare alcun numero.

Il ciclo viene eseguito prima del ciclo di gioco, quindi player esiste quando il ciclo di gioco lo sposta. Assicurati che nulla dopo i cicli assegni di nuovo un valore a player, altrimenti prevarrà quella riga successiva.

challenge icon

Sfida

Facile

La mappa ora ha una P. Il codice iniziale posiziona il giocatore in un punto fisso, (40, 40).

  1. Nei cicli della mappa, per P, crea player = pygame.Rect(col * TILE + 4, row * TILE + 4, 28, 28).
  2. Rimuovi la riga che posiziona il giocatore in (40, 40).

Provalo tu

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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Mondi

Esercitati da solo: Playground Pygame