Mağaraları İnşa Et
Coddy'nin Pygame Journey'sinin Dünyalar bölümünün bir parçası. Ders 28 / 35.
Moss Caves, kendi platform oyunun: yosunlu bir mağarada koş, paraları topla, dikenlerin ve çukurların üzerinden atla, balçıkları ez, anahtarı bul, kapıyı aç ve bayrağa ulaş. Her adım, bu bölümde yaptıklarından oluşturulan bir parça ekler.
Tüm bölüm, başlangıç projesindeki 64 sütun genişliğindeki haritadır. # zemini, P başlangıç noktasını, diğer harfler ise ekleyeceklerini gösterir: C paraları, ^ dikenleri, E balçıkları, K anahtarı, D kapıyı, F bayrağı. Bir adım ilgili harfi okuyana kadar o karo boş kalır.
Önce zemini oluştur. Harita üzerinde yapılan tek bir geçiş, çarpışmalar için walls listesini Rect nesneleriyle, çizim içinse tiles listesini (image, Rect) çiftleriyle doldurur; Tiles bölümündeki gibi solid() ile çim, toprak veya kenar karosu seçer:
rect = pygame.Rect(col * TILE, row * TILE, TILE, TILE)
if char == "#":
# önceki gibi, solid() ile görseli seç
walls.append(rect)
tiles.append((image, rect))
elif char == "P":
start = rect.midbottomOyuncu, P karosunun alt orta noktası olan start üzerinde durur.
Görev
Orta- Oyun döngüsünden önce
wallsvetilesoluştur, ardından harita üzerinde döngü yap. Her#için Edge Tiles bölümündeki gibisolid()kullanarakdirt_img,grass_left_img,grass_right_imgveyagrass_imgseç ve Rect'iwallslistesine, ikiliyi detileslistesine ekle. Piçinstartdeğerini karonunmidbottomdeğerine ayarla.player = player_img.get_rect(midbottom=start)oluştur.- Oyun döngüsünde, arka planı çizdikten sonra her karoyu kendi Rect'ine, ardından oyuncuyu çiz.
Kendin dene
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()
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Dünyalar bölümündeki tüm dersler
1Metinden Haritalar
Metinde Bir SeviyeSatırlar ve SütunlarAnlam Taşıyan HarflerOyuncunun Başladığı YerHer Seferinde Bir Ekran4Platform Çarpışmaları
Sağ ve Sol DuvarlarPlatformlara İnişBaşını ÇarpSeviyenin Dışına DüşmekHer Seferinde Tek Eksen7Yosunlu Mağaralar
Mağaraları İnşa EtKoş ve Zıpla3Yerçekimi ve Zıplama
Yerçekimiyle DüşmeYerden ZıplamaKısa SıçrayışlarEn Yüksek Düşme HızıZıplama Tamponu6Devriye Gezen Düşmanlar
Devriye Gezen Bir BlobÜzerine Bas ya da Darbe AlYürüme DöngüsüHaritadaki DüşmanlarKendi başına pratik yap: Pygame playground