如何使用“with open”(打开)按钮创建滚动级别地图.txt','r')作为m'其中地图.txt包含级别的平铺?

2024-03-29 01:44:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做一个非常大的pygame游戏滚动地图。 我的屏幕是由17x11块120像素X 120像素的瓷砖定义的(边框中的瓷砖被切割,60像素X 6像素表示低分辨率模式)。为了创建我的滚动,我想到了使用'with open'地图.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():
          ....

我认为用这种方法是不可能的。有人能帮我吗?你知道吗


Tags: intxteventforostypewithdisplay
1条回答
网友
1楼 · 发布于 2024-03-29 01:44:57

在评论中展开讨论:

除非你的地图真的很大,否则我不会为这样的系统费心(当然也可以实现)。你知道吗

假设您的映射是1000 x 1000个整数,我们可以看到它需要大约8兆的内存(在我的Python上)。(为了便于阅读,在输出中添加了逗号。)

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

如果我们扩展到,哦,比如说,5000 x 5000个整数(所以假设你的屏幕大小是1920x1080像素,而磁贴大小是60x60像素,156 x 278个屏幕!),我们仍然没有看到不可能的内存量(即200兆字节):

>>> sys.getsizeof([0] * 5000 * 5000)
200,000,064

相关问题 更多 >