SyntaxBomb - Indie Coders

Languages & Coding => Blitz Code Archives => Algorithms => Topic started by: BlitzBot on June 29, 2017, 00:28:42

Title: [bb] array of types by bradford6 [ 1+ years ago ]
Post by: BlitzBot on June 29, 2017, 00:28:42
Title : array of types
Author : bradford6
Posted : 1+ years ago

Description : this is an example of a type with a field that is itself an array of types.
the array is dynamically resized with the ADD / Delete methods


Code :
Code (blitzbasic) Select
Graphics 640,480


Type Tveggie
Field name:String
Field freshness:Int

End Type


Type Tpot
Field name:String
Field x:Int
Field y:Int
Field PotContents:Tveggie[10]
Field MAXVEGGIES:Int = 1000
Field Veggiecount:Int

Method AddVeggie(vname:String="Generic Vegetable",fresh:Int=100)

veggiecount:+1
self.PotContents = self.PotContents[..veggiecount]
Print "Potcontents="+Len(potcontents)
PotContents[veggiecount-1] = New Tveggie
PotContents[veggiecount-1].name = vname
PotContents[veggiecount-1].freshness = fresh

End Method

Method DeleteVeggie(vegname:String,all:Int=-1,index:Int=-1)
For Local t:Int = 0 To veggiecount - 1
If vegname = PotContents[t].name
   Local deleted:Int = 1
Print "Index:="+t
Print "Deleting:"+PotContents[t].name

Local PL:Int = Len(self.PotContents)
Print "PL="+PL


For XX = 0 To PL-1
Print "xx:"+xx+"  potindex:"+t
If XX+potindex>PL-1 Then Exit

Print self.Potcontents[xx].name+"::"+self.potcontents[xx+potindex].name

If XX = t Then potindex=1
If XX = PL-1 Then potindex=0
self.Potcontents[xx] = self.potcontents[XX+potindex]

Next


veggiecount:-1
self.PotContents = self.PotContents[..veggiecount]
Exit


EndIf

Next

Return Deleted
End Method




Method Display()
SetColor 255,0,0
DrawText name,x,y
SetColor 255,255,0
Local TH=TextHeight("H")
For Local t:Int = 0 To veggiecount - 1
    DrawText t+":"+PotContents[t].name,x,y+(TH+t*TH)
Next
DrawText "Total Veggies:"+veggiecount,x,y+(TH*(veggiecount+1))
DrawText "array size:"+Len(potcontents),x,y+(TH*(veggiecount+2))


End Method

Method Exists(vegname:String)
For Local t:Int = 0 To veggiecount - 1
If vegname = PotContents[t].name
Return True
EndIf
Next

Return False

End Method

Function create:Tpot(pname:String,xp,yp)
Local temp:Tpot = New Tpot
temp.name = pname
temp.x = xp
temp.y = yp

    temp.PotContents[0] = New Tveggie



Return temp
End Function
End Type


Local Dinner:Tpot = Tpot.create("Bill's Stew",100,100)
Dinner.AddVeggie("Carrot",5)
Dinner.AddVeggie("Beet",80)
Dinner.AddVeggie("Lettuce",5)
Dinner.AddVeggie("Dirty Sock",80)
Dinner.AddVeggie("Okra",80)
Dinner.AddVeggie("Peas",80)
Dinner.AddVeggie("Telephone",80)



Repeat

If Dinner.exists("Dirty Sock") = 1 Then DrawText "Left Click to remove Sock",MouseX(),MouseY()
If Dinner.exists("Telephone") = 1Then DrawText "Right Click to remove Telephone",MouseX(),MouseY()+16
Dinner.display()
If MouseDown(1)=1
d = Dinner.DeleteVeggie("Dirty Sock")
Print "Deleted = "+d
EndIf
If MouseDown(2)=1
d = Dinner.DeleteVeggie("Telephone")
Print "Deleted = "+d
EndIf




Flip
Cls
Until KeyDown(KEY_ESCAPE)


Comments :


N(Posted 1+ years ago)

 I like my T when it comes in Tpots.


_PJ_(Posted 1+ years ago)

 So do we just need to change the KEY_ESCAPE to 1 and the Method to Function to utilise this?