Menu
CoddyTech

موضع بداية اللاعب

جزء من قسم العوالم في رحلة Pygame على Coddy. الدرس 4 من 35.

يحدّد المستوى مكان بدء اللاعب، لذا أضِف ذلك إلى الخريطة أيضًا: حرف P واحد. أثناء قراءة الحلقات للخريطة، يحدّد المربع P الموضع الأول للاعب.

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

اللاعب مربع طول ضلعه 28 بكسلًا، لذا يبدأ على بُعد (36 - 28) / 2 = 4 بكسلات من زاوية المربع، في منتصفه. والآن، يؤدي تحريك حرف P في النص إلى تحريك نقطة البداية: دون الحاجة إلى إجراء أي حسابات.

تُنفَّذ الحلقة قبل حلقة اللعبة، لذا يكون player موجودًا عند تحريكه في حلقة اللعبة. تأكّد من أن لا شيء بعد الحلقات يعيد تعيين player، وإلا فسيكون لهذا السطر اللاحق الأثر.

challenge icon

التحدي

سهل

تحتوي الخريطة الآن على P. يضع البرنامج المبدئي اللاعب عند إحداثيات ثابتة (40, 40).

  1. في حلقات الخريطة، عند P، اجعل player = pygame.Rect(col * TILE + 4, row * TILE + 4, 28, 28).
  2. أزل السطر الذي يضع اللاعب عند (40, 40).

جرّب بنفسك

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 iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس العوالم

تدرّب بنفسك: Playground لـ Pygame