موضع بداية اللاعب
جزء من قسم العوالم في رحلة 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، وإلا فسيكون لهذا السطر اللاحق الأثر.
التحدي
سهلتحتوي الخريطة الآن على P. يضع البرنامج المبدئي اللاعب عند إحداثيات ثابتة (40, 40).
- في حلقات الخريطة، عند
P، اجعلplayer = pygame.Rect(col * TILE + 4, row * TILE + 4, 28, 28). - أزل السطر الذي يضع اللاعب عند
(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()
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس العوالم
تدرّب بنفسك: Playground لـ Pygame