Создание карты путем перебора списка в Pygame? - PullRequest
0 голосов
/ 26 апреля 2020

Я создаю свою первую игру с pygame и пытаюсь визуализировать лабиринт, используя список, где он создает плитку с указанным номером. Там, где указатель читается как 1, он напечатает стену, 2, дверь и так далее. Прямо сейчас у меня просто так, что он печатает одно и то же изображение для каждой плитки, но функция draw () берет и печатает только когда индекс достигает 1.

class Maze:
    def __init__(self, x=20, y=20):
        self.x = x
        self.y = y
        self.tile = pygame.image.load("assets/redsquare.png")
        self.tile = pygame.transform.scale(self.tile, (20, 20))
        self.screen = pygame.display.set_mode((800, 700))
        self.background = pygame.Surface(self.screen.get_size()).convert()
        self.maze =  """ 
                         1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
                         1 0 1 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 1 
                         1 0 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 
                         1 0 4 0 1 0 0 0 1 0 0 0 0 0 0 0 0 4 0 1 
                         1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 0 1 
                         1 0 1 0 0 0 1 0 0 0 4 0 0 0 1 0 1 1 0 1 
                         1 4 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 0 1 
                         1 0 0 0 1 0 0 0 4 0 0 0 1 0 1 0 4 0 0 1 
                         1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 0 1 1 0 1 
                         1 0 0 0 1 0 1 0 4 0 1 0 1 0 1 0 1 1 0 1 
                         1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 
                         1 0 0 0 1 0 0 0 1 0 1 0 1 0 1 0 1 1 0 1 
                         1 4 1 1 1 1 1 1 1 0 1 0 1 0 0 0 1 1 0 1 
                         1 0 0 0 0 0 4 0 1 0 1 1 1 1 1 1 1 1 1 1 
                         1 1 1 1 1 0 1 0 1 0 1 0 0 0 4 0 0 0 1 1 
                         1 0 0 0 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1 1 
                         1 0 1 1 1 0 1 0 1 0 0 0 1 0 0 0 1 0 0 3 
                         1 0 0 0 0 0 1 0 1 1 1 1 1 0 1 0 1 0 1 1 
                         1 1 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 0 1 1 
                         1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 """
        self.maze = self.maze.splitlines()

И это моя функция рисования ,

def draw(self):
    print(self.maze)
    for y, line in enumerate(self.maze):
        for x, c in enumerate(line):
            if c == "1":
                self.screen.blit(self.tile, (x * 20, y * 20))
            if c == "2":
                self.screen.blit(self.tile, (x * 20, y * 20))
            if c == "3":
                self.screen.blit(self.tile, (x * 20, y * 20))
            if c == "4":
                self.screen.blit(self.tile, (x * 20, y * 20))

1 Ответ

0 голосов
/ 26 апреля 2020

Строка лабиринта содержит много пробелов, поэтому вы не получите ожидаемого результата.

Я рекомендую создать список строк, где каждая строка представляет одну строку сетки: (Вы splitlines вообще не нужно)

self.maze = ["12111111111111111111", 
             "10100000400000000001", 
             "10101110101111111111", 
             "10401000100000000401", 
             "10111011111111101101", 
             "10100010004000101101", 
             "14111110111110111101", 
             "10001000400010104001", 
             "11101011111010101101", 
             "10001010401010101101", 
             "11101010101010101101", 
             "10001000101010101101", 
             "14111111101010001101", 
             "10000040101111111111", 
             "11111010101000400011", 
             "10001010101011111011", 
             "10111010100010001003", 
             "10000010111110101011", 
             "11111010000000101011", 
             "11111111111111111111"]

В качестве альтернативы вы можете заменить все пробелы на "ничто" (.replace(" ", "")):

self.maze =  """ 
              1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
              1 0 1 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 1 
              1 0 1 0 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 
              1 0 4 0 1 0 0 0 1 0 0 0 0 0 0 0 0 4 0 1 
              1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 0 1 
              1 0 1 0 0 0 1 0 0 0 4 0 0 0 1 0 1 1 0 1 
              1 4 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 0 1 
              1 0 0 0 1 0 0 0 4 0 0 0 1 0 1 0 4 0 0 1 
              1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 0 1 1 0 1 
              1 0 0 0 1 0 1 0 4 0 1 0 1 0 1 0 1 1 0 1 
              1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 
              1 0 0 0 1 0 0 0 1 0 1 0 1 0 1 0 1 1 0 1 
              1 4 1 1 1 1 1 1 1 0 1 0 1 0 0 0 1 1 0 1 
              1 0 0 0 0 0 4 0 1 0 1 1 1 1 1 1 1 1 1 1 
              1 1 1 1 1 0 1 0 1 0 1 0 0 0 4 0 0 0 1 1 
              1 0 0 0 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1 1 
              1 0 1 1 1 0 1 0 1 0 0 0 1 0 0 0 1 0 0 3 
              1 0 0 0 0 0 1 0 1 1 1 1 1 0 1 0 1 0 1 1 
              1 1 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 0 1 1 
              1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 """
self.maze = self.maze.replace(" ", "").splitlines()
...