Хорошо, это последний шаг в моей разочаровывающей игре. Я работал над игрой, в которой на каждом уровне есть ловушки, которых вы должны избегать, чтобы перейти на следующий уровень. Разобрался во всем, кроме уровней. Вот с чем я работал. Вот мой файл Maps.py:
rage_map = [[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]
de_dirt = [[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]
class Create_level(object):
def load_map(self, Map):
wall = Sprite(pygame.Surface([1,700]), -1,0)
spr.objects_sprites.add(wall)
spr.all_sprites.add(wall)
current_map = list(Map)
y = 0
for layer in current_map:
x = 0
for tile in layer:
if tile == 0:
Terr = Sprite(img.dirt_img, x*32, y*16 + 340)
spr.objects_sprites.add(Terr)
spr.all_sprites.add(Terr)
con.ToClean.append(Terr)
if tile == 1:
Terr = Sprite(img.grass_img, x*32, y*16 + 340)
spr.objects_sprites.add(Terr)
spr.all_sprites.add(Terr)
con.ToClean.append(Terr)
x += 1
y += 1
def clean_level(self):
con.level_no += 1
spr.all_sprites.remove(con.ToClean)
play.reset()
class Level_01(Create_level):
def __init__(self):
self.load_map(current_map[0])
self.trap = AutoHazard(img.lul_img, 1000, con.height - 50)
spr.all_sprites.add(self.trap)
self.trap3 = AutoHazard(img.lul_img, 900, con.height - 50)
self.trap3.make_rect(936,536,500,500)
spr.all_sprites.add(self.trap3)
self.trap4 = AutoHazard(img.lul_img, 1500, 270)
self.trap4.make_rect(596, 380, 156, 34)
spr.all_sprites.add(self.trap4)
self.trap5 = AutoHazard(img.zulul_img, 1400, -50)
spr.all_sprites.add(self.trap5)
self.trap2 = AutoHazard(img.lul_img, 800, con.height - 50)
spr.all_sprites.add(self.trap2)
def set_level(self):
self.trap3.set(20, 0, 'special')
self.trap4.set(-25, 0, 'special')
self.trap5.set(0, 30)
self.trap2.set(0, -20)
self.trap.set(0, -20)
if play.rect.x >= con.width - 50:
self.clean_level()
class Level_02(Create_level):
def __init__(self):
self.load_map(current_map[1])
self.trap = AutoHazard(img.lul_img, 500, con.height - 50)
spr.all_sprites.add(self.trap)
self.trap3 = AutoHazard(img.lul_img, 600, con.height - 50)
self.trap3.make_rect(636,536,500,500)
spr.all_sprites.add(self.trap3)
self.trap2 = AutoHazard(img.lul_img, 300, con.height - 50)
spr.all_sprites.add(self.trap2)
def set_level(self):
self.trap3.set(20, 0, 'special')
self.trap2.set(0, -20)
self.trap.set(0, -20)
if play.rect.x >= con.width - 50:
self.clean_level()
def reset_level():
spr.all_sprites.add(play)
spr.all_sprites.add(con.killed_sprites)
#command to delete all elements in killed_sprites, otherwise it keeps on adding infinitely
del con.killed_sprites[:]
play.change_y = 0
play.is_dead == 0
spr.reset_sprites()
До сих пор я сделал 2 уровня, чтобы мне было легче.
Хорошо, теперь проблема в том, чтобы правильно реализовать его в моем главном file:
#code above not necessary
con.level_no = 0
level_list = []
level_list.append(Level_01())
current_level = level_list[con.level_no]
if con.level_no == 1:
spr.all_sprites.remove(con.ToClean)
level_list.append(Level_02())
GameRunning = True
while GameRunning:
for event in pygame.event.get():
if event.type == pygame.QUIT:
GameRunning = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
play.go_left()
elif event.key == pygame.K_RIGHT:
play.go_right()
elif event.key == pygame.K_UP:
play.yahoo()
play.jumping = True
elif event.key == pygame.K_r:
reset_level()
elif event.key == pygame.K_ESCAPE:
gamerunning = False
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT and play.change_x < 0:
play.stop()
if event.key == pygame.K_RIGHT and play.change_x > 0:
play.stop()
con.screen.blit(img.back_img, [-300,-100])
spr.all_sprites.draw(con.screen)
spr.all_sprites.update()
intro()
death_counter()
for current_level in level_list:
current_level.set_level()
#con.screen.blit(pygame.transform.scale(display, con.window_size),(0,0))
pygame.display.update()
clock.tick(60)
pygame.quit()
Что я не могу понять, как это сделать правильно, так это как на самом деле настроить эти уровни. Поскольку Level_01 и Level_02 являются классами конструктора, они создаются, как только они создаются. У меня много проблем с поиском обходного пути для этого.
Спасибо за помощь.