簡體   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