Как сделать уровень прокрутки с 'with open (' map.txt ',' r ') как m', где map.txt содержит плитки уровня? - PullRequest
0 голосов
/ 11 марта 2019

Я хотел бы сделать очень большую карту прокрутки для пигмеев.Мой экран определяется 17x11 плитками размером 120 px X 120 px (плитка в рамке обрезается, 60 на 6 пикселей) для мода с низким разрешением).Для создания моей прокрутки у меня появилась идея использовать 'with open (' map.txt ',' r ') как m', чтобы избежать загрузки очень большой картинки, которая приводит к сбою моей программы.Давайте предположим, что я получил это в моем файле (1 = стена и 0 = воздух):

111111111101111111111
100000000000000000001
101000000000000000101
100000000000000000001
100000000000000000001
100000000000000000001
100000000000000000001
100000000000000000001
101000000000000000101
100000000000000000001
111111111111111111111

игрок появляется в (9, 5), слева вверху (0, 0).Итак, я хотел бы, чтобы когда мой игрок шел вверх, влево, вниз или вправо, фоновая перезагрузка для обновления была позицией на карте.Или ... я не знаю, как мне вообще это сделать ...

Я попробовал этот маленький скрипт, но он совсем не работает:

import pygame, os
pygame.init()
os.environ['SDL_VIDEO_CENTERED'] = '1'
w = pygame.display.set_mode(1920,1080),pygame.NOFRAME)

wall = pygame.image.load('wall.png').convert_alpha
player = pygame.image.load('hero.png').convert_alpha

p_x = 9
p_y = 5
continue = True

def scroll(x,y):
     p_x = p_x + x
     p_y = p_y + y
     with open('map.txt','r') as m:
          **On your answer, complete this part  for aloow the code to work properly**
     pygame.display.update()

while continue:
     for event in pygame.event.get():
         if event.type == K_d: # I use a Qwerty keyboard
              scroll(1,0)
         elif event.type == K_a:
              scroll(-1,0)
         elif event.type == K_z:
              scroll(0,-1)
         elif event.type == K_s:
              scroll(0,1)

ТакЯ уже попробовал:

for line in m():
     for sprite in line():
          ....

И я думаю, что это невозможно с этим методом.Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 11 марта 2019

Чтобы продолжить обсуждение в комментариях:

Если ваша карта действительно действительно действительно * действительно * действительно огромна, я бы не сталне беспокойтесь о такой системе (хотя, конечно, это возможно реализовать).

Предполагая, что ваша карта имеет 1000 x 1000 целых чисел, мы можем видеть, что это займет около 8 мегабайт памяти (на моем Python),(Запятые добавлены к выводу для удобства чтения.)

>>> sys.getsizeof([0] * 1000 * 1000)
8,000,064

Если мы расширим до, ну, скажем, 5000 x 5000 целых чисел (так, учитывая ваш размер экрана 1920x1080 px и размер плитки 60x60 px, 156 x 278скриншоты!), мы все еще не видим невозможный объем памяти (а именно 200 мегабайт):

>>> sys.getsizeof([0] * 5000 * 5000)
200,000,064
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...