[Ren'Py 進階教程] 商店/物品/背包(后端部分)
效果展示:

代碼下載地址見評論
使用規(guī)則
教程中的代碼可以用于非商用/商用的游戲,不需要和本人聯(lián)系,但是需要在發(fā)布的時候署名。
署名信息:
Black Pineapple
blue.pepper.2019@gmail.com
禁止事項
非代碼素材,比如美術(shù),聲音等,未經(jīng)過本人許可,都禁止使用。
代碼禁止用于非游戲的商用場合,比如在付費的教程中使用本代碼,再比如加工后單純出售代碼。
前言
本系列教程是Ren'Py的進階教程,適合于有一定基礎(chǔ)的同學(xué)。推薦至少讀完了官方文檔里起步,官方自帶的教程(Ren’Py Launcher里那個),或者各大新手教程中的一個。
本教程是關(guān)于如何實現(xiàn)一個商店/物品系統(tǒng)。
物品類(ItemClass.rpy)
物品類在這個教程里有兩個一個是基類Item,一個是派生類BoosterItem。簡單的來說,Item就是所有的東西,BoosterItem是一個具體的東西,BoosterItem這里是使用來可以增加人物屬性的東西。同學(xué)們后面可以自己定義別的類型的物品,比如可以無限次使用的耐用品。
關(guān)于繼承方面的知識請查閱python Inheritance(繼承), 關(guān)于類的知識請直接搜python class(類)。
Item
__init__函數(shù)
這是所有類都有的初始化函數(shù),這里定義了兩個變量,一個是name是物品的名字,一個是img是物品的圖片。如果需要添加什么自己需要的變量,可以仿照name增加。
__eq__函數(shù)和__hash__函數(shù)
因為后面用了item這個類來做字典的鍵值,所以需要這兩個函數(shù),用來比較兩個物品對象是不是一個物品。
請自行查閱python dict(字典),來了解字典相關(guān)知識。
get_icon函數(shù)
返回一個物品圖片位置的字符串。e.g. “images/items/fox.png”
BoosterItem
__init__函數(shù)
因為是派生類,所以會有下面的語句
所有圖片的路徑都被直接設(shè)定為:'images/items/' + name + '.png
use函數(shù)
這個函數(shù)會根據(jù)這個物品的booster屬性,增加使用者對應(yīng)的屬性。
例子:
如果在按鈕里調(diào)用函數(shù),可以參考Function
關(guān)于物品的例子,可以參考0shop_items.rpy
Inventory(InventoryClass.rpy)
字典可以理解為一個儲物柜,需要號碼,才能找到具體是哪個格子,然后拿到里面的東西。關(guān)于字典的知識請直接搜python dict(字典)。這個類可以理解為一個儲物柜,每種物品放一格,可以用于商店的庫存,玩家的物品格等。
__init__函數(shù)
__str__函數(shù)
這個函數(shù)是用來在控制臺debug的時候,可以打印出目前倉庫里所有的東西和數(shù)量。
剩下的函數(shù)解釋請看代碼中的注釋。
商店Shop (ShopClass.rpy)
請看代碼中的注釋。
玩家Player(PlayerClass.rpy)
請參考代碼內(nèi)注釋
GridHelper(GridHelper.rpy)
這個函數(shù)是用來計算,格子的數(shù)量,配合grid關(guān)鍵字使用。
MINIMUM_NUM_ROWS 是格子至少有多少行,比如物品比較少的時候可能只有1行,但是制作者可以指定至少顯示2行。
NUM_COLUMN 是有多少列。