Code: Select all
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
Alla lista funktioista ja niiden käytöstä: