ابنِ الكهوف
جزء من قسم العوالم في رحلة Pygame على Coddy. الدرس 28 من 35.
لعبة «كهوف الطحالب» هي لعبة منصات من صنعك: اركض عبر كهف مغطى بالطحالب، واجمع العملات، واقفز فوق الأشواك والحفر، واسحق الكتل الهلامية، واعثر على المفتاح، وافتح الباب، واصل إلى العلم. تضيف كل خطوة جزءًا واحدًا، مبنيًا مما أنجزته في هذا القسم.
المستوى بأكمله هو الخريطة الموجودة في المشروع الابتدائي، وعرضها 64 عمودًا. يرمز # إلى الأرض، ويمثل P نقطة البداية، أما الأحرف الأخرى فهي عناصر ستضيفها: C للعملات، و^ للأشواك، وE للكتل الهلامية، وK للمفتاح، وD للباب، وF للعلم. يظل المربع فارغًا إلى أن تقرأ إحدى الخطوات حرفه.
ابدأ ببناء الأرض. تمريرة واحدة على الخريطة تملأ walls بمستطيلات للتصادمات، وtiles بأزواج (image, Rect) للرسم، مع اختيار العشب أو التراب أو مربع الحافة باستخدام solid()، كما في فصل المربعات:
rect = pygame.Rect(col * TILE, row * TILE, TILE, TILE)
if char == "#":
# اختر الصورة باستخدام solid()، كما في السابق
walls.append(rect)
tiles.append((image, rect))
elif char == "P":
start = rect.midbottomيقف اللاعب على start، في منتصف الحافة السفلية لمربع P.
التحدي
متوسط- قبل حلقة اللعبة، أنشئ
wallsوtiles، ثم مرّر على الخريطة. لكل#، اخترdirt_imgأوgrass_left_imgأوgrass_right_imgأوgrass_imgباستخدامsolid()كما في البلاطات الطرفية، وأضف Rect إلىwallsوالزوج إلىtiles. - بالنسبة إلى
P، عيّنstartإلىmidbottomللبلاطة. - أنشئ
player = player_img.get_rect(midbottom=start). - في حلقة اللعبة، بعد الخلفية، ارسم كل بلاطة عند Rect الخاص بها، ثم اللاعب.
جرّب بنفسك
import pygame
TILE = 36
WIDTH, HEIGHT = 576, 360
LEVEL = [
"................................................................",
"................................................................",
"................................................................",
"................................................................",
"#..............................................................#",
"#....................C.........................#####...........#",
"#......CC...C................CC.....CC.........#####.....CC....#",
"#....................#.........................D...............#",
"#.P.........#...E....#...^.......K......E......D.C....^......F.#",
"#######..####################..##########################..#####",
]
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Moss Caves")
clock = pygame.time.Clock()
def load(name):
return pygame.image.load("assets/images/" + name).convert_alpha()
background = pygame.image.load("assets/backgrounds/forest.png").convert_alpha()
grass_img = load("grass.png")
grass_left_img = load("grass_left.png")
grass_right_img = load("grass_right.png")
dirt_img = load("dirt.png")
player_img = load("player.png")
def solid(row, col):
if row < 0 or row >= len(LEVEL) or col < 0 or col >= len(LEVEL[0]):
return False
return LEVEL[row][col] == "#"
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
for y in range(0, HEIGHT, 72):
for x in range(0, WIDTH, 72):
screen.blit(background, (x, y))
pygame.display.flip()
clock.tick(60)
pygame.quit()
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس العوالم
تدرّب بنفسك: Playground لـ Pygame