如何解决使用Pygame在Python游戏中随机显示图像
我正在做一个迷宫游戏,主要演员必须通过在墙壁之间移动以找到出口来寻找路径。
我做了项目的一部分,但是我不能在迷宫中随意显示对象(注射器,针头和塑料管)(每次开始时都必须改变位置),然后再拿起并显示一个将列出收集到的物品的柜台。
我必须修改我的GENERATE函数,在遍历我的文本文件的循环中,我必须检索空白(sprite == 0),将其放在列表中,然后使用随机数我想检索3个随机数每个对象的位置。例如,对于三个随机位置,存储在列表中的注射器对象我必须将(sprite == 0)替换为(sprite == s),s =注射器。所以最后,我将在show函数中使用三个s位置进行显示。
def generer(self):
"""Method for generating the start based on the file.
we create a general list,containing one list per line to display"""
# We open the file
with open(self.file,"r") as file:
structure_level = []
# We browse the lines of the file
for line in file:
line_level = []
# We browse the sprites (letters) contained in the file
for sprite in line:
# We ignore the end of line "\ n"
if sprite != '\n':
# We add the sprite to the list of the line
line_level.append(sprite)
# Add the line to the level list
structure_level.append(line_level)
# We save this structure
self.structure = structure_level
def show(self,window):
"""Méthode permettant d'afficher le niveau en fonction
de la liste de structure renvoyée par generer()"""
# Chargement des images (seule celle d'arrivée contient de la transparence)
wall = pygame.image.load(wall_image).convert()
departure = pygame.image.load(departure_image).convert_alpha()
arrived = pygame.image.load(Gardien_image).convert_alpha()
syringe = pygame.image.load(syringe_image).convert_alpha()
# We go through the list of the level
number_line = 0
for line in self.structure:
# On parcourt les listes de lignes
num_case = 0
for sprite in line:
# We calculate the real position in pixels
x = num_case * sprite_size
y = number_line * sprite_size
if sprite == 'w': # w = Wall
window.blit(wall,(x,y))
elif sprite == 'd': # d = Départure
window.blit(departure,y))
elif sprite == 'a': # a = Arrived
window.blit(arrived,y))
elif sprite == 's': # s = syringe
window.blit(syringe,y))
num_case += 1
number_line += 1
此后,我必须找到一种方法来比较对象(例如注射器)的位置(例如x和y)与主字符的当前位置,如果两者相等,那么我可以说该字符就是当场。 '对象。
这是一个问题,希望我能解释清楚。
谢谢
解决方法
要随机放置3个注射器,请尝试以下逻辑:
- 计算迷宫中的所有空间
- 将空间计数除以3
- 在三分之一中,将注射器随机放置在一个位置
这应该使注射器位置保持随机,但要均匀分布。
这是更新的代码。它未经测试,因此您可能需要对其进行一些调整。
def generer(self):
"""Method for generating the start based on the file.
we create a general list,containing one list per line to display"""
import random
zerocnt = 0 # counter for empty spaces
# We open the file
with open(self.file,"r") as file:
structure_level = []
# We browse the lines of the file
for line in file:
line_level = []
# We browse the sprites (letters) contained in the file
for sprite in line:
# We ignore the end of line "\ n"
if sprite != '\n':
# We add the sprite to the list of the line
line_level.append(sprite)
if sprite == 0: zerocnt += 1 # another space
# Add the line to the level list
structure_level.append(line_level)
# 3 syringes,distribute evenly
div3 = zerocnt//3 # divide empty spaces by 3
# generate 3 positions,1 syringe per third of maze
poslst = [random.randint(i*div3,(i+1)*div3-1) for i in [0,1,2]]
ctr=0
# scan empty spaces,update 3 spots
for lvl in structure_level:
for i in range(len(lvl)):
if ctr in poslst:
lvl[i]='s' # put syringe here
ctr += 1
# We save this structure
self.structure = structure_level
对于帖子的另一部分,检查玩家是否找到了注射器,我不知道您如何移动玩家,所以我只能猜测。假设玩家具有(x,y)坐标,则可以检查该位置在数组中是否有“ s”。
尝试这样的事情:
Player.X = 5
Player.Y = 5
if self.structure[Player.X][Player.Y] == 's':
print("Found syringe")
Player.Syringes += 1
self.structure[Player.X][Player.Y] = 0 # remove syringe from maze (or set to player)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。