繁体   English   中英

在弄清楚如何在我的python游戏中提出库存系统时遇到麻烦

[英]Having trouble With figuring out how to come up with a inventory system in my python game

我用python和pygame制作了一个简单的生存游戏,而我想出了一个库存系统。 我一直在试图解决这个问题,没有任何帮助来挑战自己,但是是时候寻求帮助了。 我一直在玩这段代码

物品类别

class item():
   def __init__(self,name,amount):
      self.name = name
      self.amount = amount

资源类别

class wood(pygame.sprite.Sprite):
   def __init__(self):
    self.x = 700
    self.y = 100
    self.cut = False
    self.frame = 0
   def draw(self,display):
    self.rect = pygame.Rect((self.x + 38,self.y + 10,20,80))
    display.blit(Art_lists.trees_list[self.frame], (self.x,self.y))
    if pygame.sprite.collide_rect(self,Global.lion):
        if (pygame.key.get_pressed() [pygame.K_SPACE] != 0):
            if self.cut == False:
                if Global.wood not in Global.inventory:
                    Global.inventory.append(Global.wood)
                    Global.oinventory.append('wood')
                Global.wood.amount += 1
                self.frame = 1
                self.cut = True
            if self.cut == True:
                Global.wood.amount += 0

因此,当您在按下空格的时候与树等节点发生碰撞时,您会砍下这棵树,它将项目类的对象添加到名为清单的列表中,然后将一个字符串添加到清单库存中,然后将库存打印到屏幕,但我不能得到一个int将被字符串bblted,因为它不会接受它。 而且我真的不认为这是制作清单的最佳方法。 我希望库存仅在屏幕上以文本形式显示其项目,并在其旁边显示金额。 就像您玩过辐射一样。 抱歉,如果我的代码看起来不好,或者我的问题对于新手程序员来说是无法理解的。

我将清单设置为数组。 数组的每个值将是一个对象变量,该变量将根据用户库存中的内容而变化。

您需要将问题分解为多个部分。 一部分定义了世界的行为方式(可以砍伐树木,产生x根木头),另一部分定义了玩家在任何特定时间所持有的东西,而最后一部分则获取了该信息并将库存呈现到屏幕上。

这样,您可以执行其他操作,例如:使NPC可以砍柴/拥有自己的清单/等等,而不会在各处散布重复的定义。 除此之外,您将减少每场比赛需要保存的数据量,因为木头的定义不会改变,而玩家携带的木头会改变。

因此,您的GlobalItems将是一本包含如下内容的字典:

{Global.wood: {"Name": "Lumber",
               "Icon": Art_lists.xxx,
               "MaxStack": 20,
               "Portable": True}
 Global.tree: {"Name": "Ash tree"
               "Chop": {Global.wood: 50},
               "Portable": False}
}

并且您的库存成为列表/数组:

[{"Type": Global.wood, "Count": 10},
 {"Type": Global.leather, "Count": 5}]

如果要处理堆栈/保留物料位置,则可以有多个库存条目:

[{"Type": Global.wood, "Count": 20},
 None, # Blank space
 {"Type": Global.wood, "Count": 15}
]

然后,用于绘制库存的代码可以遍历库存列表,计算每个物料的当前图块位置,然后在GobalItems查找Type以确定图标和其他有用信息。

关注点分离具有多个好处:

  • 它允许不同的人在系统的不同部分上工作
  • 进行更改时,使整个事情变得不那么脆弱-您正在更改项目的内容,拥有的人数或绘制方式。
  • 明确指出需要将哪些信息写入磁盘以进行保存
  • 使更新变得更加整洁(如果您决定将木材堆放在25个而不是20个中会发生什么?现在只需要在一个地方进行更换即可)

请注意,可能存在一个论点,用于将可以从世界上获得的东西中分离出来,但这取决于您游戏的工作方式。 使用上述方法,您将在世界上创建一个对象并将其标记为Global.tree 为了避免错误,我添加了“ Portable”标志,以确保您永远不会在清单中遇到一棵树,因为您错误地标记了某些东西,而会得到一个错误。

如果玩家不能将任意物品扔进世界,以后再拿起它们,则没有理由将便携式/非便携式物品混入同一列表中。 列出可能会出现在玩家清单中的物品和可能出现在游戏世界中的物品,可能会更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM