Advertisement
AtEchoOff

Dungeon Crawler Code for Level and Main File

Jun 28th, 2025 (edited)
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.25 KB | None | 0 0
  1. ########################## Level.py #########################
  2. import pygame, random
  3. from tile import *
  4.  
  5.  
  6. class Level(pygame.sprite.Sprite):
  7.     def __init__(self, player):
  8.         super().__init__()
  9.         # groups
  10.         self.walls = pygame.sprite.Group()
  11.         self.floor = pygame.sprite.Group()
  12.  
  13.     def draw(self, screen):
  14.         self.floor.draw(screen)
  15.         self.walls.draw(screen)
  16.        
  17.        
  18. class RandomLevel(Level):
  19.     def __init__(self, player, images, mult, enemy_num):
  20.         super().__init__(player)
  21.  
  22.         self.generate_level(images, mult, enemy_num)
  23.  
  24.     def draw(self, screen):
  25.         super().draw(screen)
  26.     def generate_level(self, images, mult, enemy_num):
  27.         screen_info = pygame.display.Info()
  28.         game_map = []
  29.         # initialize entire map to walls
  30.         for i in range((screen_info.current_w // 32) + 1):
  31.             game_map.append(["w"] * ((screen_info.current_h // 32) + 1))
  32.         # calculate amount of tiles to convert into floor tiles
  33.         # print(game_map)
  34.         fnum = int((len(game_map) * len(game_map[0])) * mult)
  35.         # current number of floor tiles
  36.         count = 0
  37.         # starting tile for dungeon generation
  38.         tile = [len(game_map) // 2, len(game_map[0]) // 2]
  39.         while count < fnum:
  40.             if game_map[tile[0]][tile[1]] != "f":
  41.                 game_map[tile[0]][tile[1]] = "f"
  42.                 count += 1
  43.             move = random.randint(1, 4)
  44.             if move == 1 and tile[0] > 1:  # move north
  45.                 tile[0] -= 1
  46.             elif move == 2 and tile[0] < (len(game_map) - 3):  # move south
  47.                 tile[0] += 1
  48.             elif move == 3 and tile[1] < (len(game_map[0]) - 3):  # move east
  49.                 tile[1] += 1
  50.             elif move == 4 and tile[1] > 1:  # move west
  51.                 tile[1] -= 1
  52.          # create tiles based on the contents of the map list
  53.         for i in range(len(game_map)):  
  54.             for j in range(len(game_map[i])):
  55.                 if game_map[i][j] == "w":
  56.                     self.walls.add(Tile(images["w"], (i * 32, j * 32)))
  57.                 elif game_map[i][j] == "f":
  58.                     self.floor.add(Tile(images["f"], (i * 32, j * 32)))
  59.  
  60.  
  61.  
  62.  
  63. ########################## main.py ##########################
  64. import pygame
  65. from pygame.locals import *
  66. from tile import *
  67. from level import *
  68. import sys
  69.  
  70. pygame.init()
  71.  
  72. size = (width, height) = (pygame.display.Info().current_w, pygame.display.Info().current_h)
  73.  
  74. screen = pygame.display.set_mode(size)
  75. clock = pygame.time.Clock()
  76. color = (0, 0, 0)
  77. images = {"w": "images/tiles/wall12.gif", "f": "images/tiles/floor13.gif",
  78.           "s": {True: "images/tiles/openDoor31.gif", False: "images/tiles/door31.gif"},
  79.           "e": {True: "images/tiles/openDoor12.gif", False: "images/tiles/door12.gif"}}
  80. levels = []
  81. level_num = 0
  82. current_level = None
  83. font = pygame.font.SysFont('oldenglishtext', 32)
  84. debug = True
  85.  
  86.  
  87. def change_level(change):
  88.     global level_num, current_level
  89.     if change == 1:
  90.         if level_num == len(levels) - 1:
  91.             levels.append(RandomLevel(None, images, .5, 2 + 2 * level_num))
  92.         level_num += 1
  93.         current_level = levels[level_num]
  94.         # player.up_level(current_level)
  95.     elif change == -1:
  96.         if level_num > 0:
  97.             level_num -= 1
  98.             current_level = levels[level_num]
  99.             # player.back_level(current_level)
  100. def restart():
  101.     global player, levels, level_num, current_level
  102.     # player = Player("images/player/superhero.gif", (16, 16), False)
  103.     levels = [RandomLevel(None, images, .5, 2)]
  104.     level_num = 0
  105.     current_level = levels[level_num]
  106.     # player.up_level(current_level)
  107.    
  108. def main():
  109.     global screen, level_num, current_level
  110.     # if not load_game():
  111.     restart()
  112.     # restart_pressed = False
  113.     while True:
  114.         clock.tick(60)
  115.         for event in pygame.event.get():
  116.             # save game and exit
  117.             if event.type == QUIT:
  118.                 # save_game()
  119.                 sys.exit()
  120.             if event.type == KEYDOWN:
  121.                 # confirm/ exit restart if triggered
  122.                 if restart_pressed:
  123.                     if event.key == K_RETURN:
  124.                         restart()
  125.                         restart_pressed = False
  126.                     elif event.key == K_ESCAPE:
  127.                         restart_pressed = False
  128.                     continue
  129.                 # screen controls
  130.                 if event.key == K_f:
  131.                     screen = pygame.display.set_mode(size, FULLSCREEN)
  132.                 elif event.key == K_ESCAPE:
  133.                     screen = pygame.display.set_mode(size)
  134.                     screen.fill(color)
  135.         current_level.draw(screen)
  136.         pygame.display.flip()
  137.  
  138.  
  139. if __name__ == "__main__":
  140.     main()
  141.  
  142.  
  143. ########################## Tile.py ##########################
  144. import pygame
  145.  
  146. class Tile(pygame.sprite.Sprite):
  147.     def __init__(self, path, pos):
  148.         super().__init__()
  149.         self.path = path
  150.         self.image = pygame.image.load(path)
  151.         self.rect = self.image.get_rect()
  152.         self.rect.topleft = pos
  153.  
  154.     def save(self):
  155.         self.image = None
  156.  
  157.     def load(self):
  158.         self.image = pygame.image.load(self.path)
  159.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement