Yksinkertaisen inventoryn hallinta
Author: aXu
Added: 27. kesäkuuta 2012 kello 18.16
Edited: 27. kesäkuuta 2012 kello 19.01
Category: Sekalaiset
Description
Tässä yksinkertaiset funktiot inventoryn hallintaan.
Tämä on lähinnä rungoksi, tästä puuttuu mm. tavaroiden valitseminen ja järjestäminen. Inventoryn tulostusfunktio todennäköisesti kannattaa kuitenkin tehdä joka pelille erikseen, että tulee oikeannäköinen.
Lista funktioista ja niiden käytöstä:
AddItem(ItemName [, Count, AllowZero, AllowNegative])
-Lisää tai vähentää tavaraa inventorysta. Jos Count on negatiivinen, tavaraa vähennetään. Oletuksena lisää yhden tavaran.
-AllowZero määrää, voiko inventory sisältää tavaraa nolla kappaletta. Jos AllowZero on asetettu epätodeksi, tavara tuhotaan inventorysta sen loppuessa
-AllowNegative määrää, voiko tavaraa olla vähempää kuin nolla. Jos AllowNegative on asetettu epätodeksi (False), funktio palauttaa -1 jos tavara loppui kesken
ItemCount(ItemName)
-Palauttaa haetun tavaran määrän
DrawInventory([X, Y, Height, Scroll, RowHeight])
-Tulostaa inventoryn sisällön annettuihin koordinaatteihin. Oletuksena inventory piirretään koko ikkunalle.
-Scroll määrää ensimmäisen tavaran järjestysnumeron. Oletuksena lista näytetään ensimmäisestä tavarasta lähtien.
-RowHeight määrää rivinkorkeuden.
SaveInventory([FileName])
-Tallentaa inventoryn, oletuksena "Inventory.dat"-nimiseen tiedostoon.
LoadInventory([FileName])
-Lataa inventoryn, oletuksena "Inventory.dat"-tiedostosta.
Code
Select all1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | SAFEEXIT OFF
AddItem("Gold", 1000)
Repeat
Scroll = Max(0, Scroll - MouseMoveZ())
If KeyHit(cbKey1) Then
AddItem("Gold", -300, True, True)
AddItem("Potion")
EndIf
If KeyHit(cbKey2) Then
AddItem("Potion", -1)
EndIf
If KeyHit(cbKey3) Then
AddItem("Gold", Rand(-500, -200), True, True)
AddItem("Letter " + Chr(Rand(65, 90)))
EndIf
If KeyHit(cbKeyS) Then SaveInventory()
If KeyHit(cbKeyL) Then LoadInventory()
Text 1, 1, "Press 1 to buy potion for 300G, 2 to drink potion."
Text 1, 15, "Press 3 to buy random letter at random price."
If ItemCount("Gold") <= 0 Then
Text 1, 30, "You have no money, but shopkeeper gives you credit."
EndIf
DrawInventory(10, 50, 200, Scroll)
Box 9, 49, 380, 200, 0
Text 1, 280, "Press S to save inventory, L to load."
DrawScreen
Until EscapeKey()
//Poistetaan tallennustiedosto, tämä on vain esimerkkiä varten ettei jää ylimääräisiä tiedostoja lojumaan, tietenkään varsinaisessa pelissä moista ei tehdä
If FileExists("Inventory.dat") Then DeleteFile "Inventory.dat"
End
//Tästä alkaa varsinainen inventoryn hallintaosuus:
Type InventoryItem
Field Name$
Field Count
EndType
//Lisää tai vähentää tavaraa inventorysta. Jos Count on negatiivinen, tavaraa vähennetään. Oletuksena lisää yhden tavaran.
//AllowZero määrää, voiko inventory sisältää tavaraa nolla kappaletta. Jos AllowZero on asetettu epätodeksi, tavara tuhotaan inventorysta sen loppuessa
//AllowNegative määrää, voiko tavaraa olla vähempää kuin nolla. Jos AllowNegative on asetettu epätodeksi (False), funktio palauttaa -1 jos tavara loppui kesken
Function AddItem(ItemName$, Count = 1, AllowZero = 0, AllowNegative = 0)
//Käydään tavarat läpi ja tutkitaan, löytyykö tavaraa valmiiksi inventorysta
For iI.InventoryItem = Each InventoryItem
If iI\Name = ItemName Then
//Merkataan tavara löytyneeksi
ItemExists = True
//Lisätään tavaran määrää
iI\Count = iI\Count + Count
//Jos saldo menee miinukselle ja sitä ei ole sallittu, asetetaan määrä nollaksi ja palautusarvo -1:ksi
If iI\Count < 0 And AllowNegative = False Then
iI\Count = 0
//Asetetaan palautusarvoksi -1
RetVal = -1
EndIf
If iI\Count = 0 And AllowZero = False Then
//Jos tavara loppuu, tuhotaan se inventorysta
Delete iI
EndIf
//Ei jatketa etsintää
Exit
EndIf
Next iI
//Jos tavaraa ei löytynyt inventorysta, luodaan se
If ItemExists = False Then
//Jos olematonta tavaraa yritetään vähentää ja sitä ei ole olemassa, ei vähennetä
If Count < 0 And AllowNegative = False Then
Count = 0
//Asetetaan palautusarvoksi -1
RetVal = -1
EndIf
//Tavaraa ei luoda, jos sitä on nolla kpl ja sitä ei ole sallittu
If Not (Count = 0 And AllowZero = False) Then
nI.InventoryItem = New(InventoryItem)
nI\Name = ItemName
nI\Count = Count
EndIf
EndIf
Return RetVal
EndFunction
//Palauttaa haetun tavaran määrän
Function ItemCount(ItemName$)
//Etsitään inventorysta tavaraa nimeltä ja palautetaan sen määrä
For iI.InventoryItem = Each InventoryItem
If iI\Name = ItemName Then Return iI\Count
Next iI
//Jos tavaraa ei löytynyt, palautetaan nolla
Return 0
EndFunction
//Tulostaa inventoryn sisällön annettuihin koordinaatteihin. Oletuksena inventory piirretään koko ikkunalle.
//Scroll määrää ensimmäisen tavaran järjestysnumeron. Oletuksena lista näytetään ensimmäisestä tavarasta lähtien.
//RowHeight määrää rivinkorkeuden.
Function DrawInventory(X = 0, Y = 0, Height = 0, Scroll = 0, RowHeight = 0)
//Jos korkeutta ei ole määritetty, tulostetaan ruudun alalaitaan saakka
If Height = 0 Then Height = ScreenHeight() - Y
//Jos rivinkorkeutta ei olla kerrottu, asetetaan se tekstin korkeudeksi
If RowHeight = 0 Then RowHeight = TextHeight("A")
//Tulostetaan listaa vain niin paljon kuin mahtuu ruudulle
ItemsToShow = RoundDown(Float(Height) / RowHeight)
ItemNo = 1
For iI.InventoryItem = Each InventoryItem
If ItemNo > Scroll Then
Text X, Y + (ItemNo - Scroll - 1) * RowHeight, iI\Count + "x " + iI\Name
EndIf
ItemNo = ItemNo + 1
If ItemNo > Scroll + ItemsToShow Then Exit
Next iI
EndFunction
//Tallentaa inventoryn, oletuksena "Inventory.dat"-nimiseen tiedostoon.
Function SaveInventory(FileName$ = "Inventory.dat")
//Tallennetaan inventoryn sisältö tiedostoon
f = OpenToWrite(FileName)
//Käydään läpi jokainen tavara ja kirjoitetaan se tiedostoon
For iI.InventoryItem = Each InventoryItem
WriteString f, iI\Name
WriteInt f, iI\Count
Next iI
CloseFile f
EndFunction
//Lataa inventoryn, oletuksena "Inventory.dat"-tiedostosta.
Function LoadInventory(FileName$ = "Inventory.dat")
//Tyhjennetään ensin inventory, ettei tavaroita voida kloonata lataamalla peli
For iI.InventoryItem = Each InventoryItem
Delete iI
Next iI
If FileExists(FileName) Then
//Luetaan inventoryn sisältö tiedostosta
f = OpenToRead(FileName)
While Not EOF(f)
nI.InventoryItem = New(InventoryItem)
nI\Name = ReadString(f)
nI\Count = ReadInt(f)
Wend
CloseFile f
EndIf
EndFunction
|
Comments
No comments. You can be first!
Leave a comment
You must be logged in to comment.