Type Lists?

BlitzMax Forums/BlitzMax Beginners Area/Type Lists?

Hotshot2005(Posted 2008) [#1]
Why does it create same name twice instead of two different names in the lists?

Strict 

'How many Players to create?
Global Number_of_Player = 2 

Type Player
     Field id:Int
     Field name:String
     Field skill_level:Int
End Type

'Create a list to store all Player
Global PlayerList:TList = CreateList()
 
Local Boss:Player
Boss = New Player

Boss.id   = 1
Boss.name = "David R"
Boss.skill_level=77

Boss.id   = 2
Boss.name = "Paul C"
Boss.skill_level=17

Graphics 800, 600

Drawtext "Num"+"    Name"+"      Skill Level",0,0

' Create a bunch of new Player
For Local N = 1 To number_of_Player ' Number_of_Player is a Global
	
    Local NewBoss:Player 
	
    'Put the address of this new Boss into variable Player
    NewBoss = New Player
	
    DrawText Boss.ID,0,50+N*10
    drawtext Boss.name,50,50+N*10 
    Drawtext Boss.skill_level,150,50+N*10
	
    'Put this Player called NewBoss into our PlayerList
    ListAddLast( PlayerList, NewBoss )
Next


While Not KeyDown(Key_Escape)       
	  flip
Wend



Hotshot2005(Posted 2008) [#2]
I have create little abit better code but what I want to see on screen is like this


Num Name Skill Level
1 David R 77
2 Paul C 17


Strict 

'How many Players to create?
Global Number_of_Player = 3 
Global N

Type Player
     Field id:Int
     Field name:String
     Field skill_level:Int

     Method Players()
            Local Boss:Player
			Boss = New Player

			Boss.id   = 1
			Boss.name = "David R"
			Boss.skill_level=77

			Boss.id   = 2
			Boss.name = "Paul C"
			Boss.skill_level=17
		    DrawText Boss.ID,0,50+N*10
		    DrawText Boss.name,50,50+N*10 
		    DrawText Boss.skill_level,150,50+N*10
     End Method

End Type

'Create a list to store all Player
Global PlayerList:TList = CreateList()
Local test:player = New player


Graphics 800, 600

DrawText "Num"+"    Name"+"      Skill Level",0,0

' Create a bunch of new Player
For Local N = 1 To number_of_Player ' Number_of_Player is a Global
	
	Local NewBoss:Player 
	
	'Put the address of this new Boss into variable Player
	NewBoss = New Player
	
    test.Players()
	
	'Put this player called NewBoss into our PlayerList
	ListAddLast( PlayerList, NewBoss )
Next


While Not KeyDown(Key_Escape)       
	  Flip
Wend


Have I create my first Object Orient programming Basic?
I just been learning from BlitzMax_OOP_Tutorial as I seem to get hang of it.


johnnyfreak(Posted 2008) [#3]
-something wrong (IMHO)
Boss = New Player

			Boss.id   = 1
			Boss.name = "David R"
			Boss.skill_level=77

			Boss.id   = 2
			Boss.name = "Paul C"
			Boss.skill_level=17


here you're creating 1 object boss. then you assign a value to each field twice. it's the same doing

a=2
a=4

-the player list can be embedded into the object

here my solution (there's some code optimization to do but it works)

Strict 

'How many Players to create?
Global Number_of_Player = 2 
Global N


global names:String[] = ["David R", "Paul C"]
global skill_levels:int[] = [77, 17]

Type Player
     Field id:Int
     Field name:String
     Field skill_level:Int

     global idGen:int = 0

	method new()
		idGen:+1
		self.id=idGen
	endmethod
    
	function createPlayer:Player(name:String, skill:int)
            Local Boss:Player
			Boss = New Player
			Boss.name = name
			Boss.skill_level=skill
			return Boss
     Endfunction 
End Type

'Create a list to store all Player
Global PlayerList:TList = CreateList()

Graphics 800, 600

DrawText "Num"+"    Name"+"      Skill Level",0,0

' Create a bunch of new Player
For Local N = 0 To number_of_Player-1 ' Number_of_Player is a Global
	'Put this player into our PlayerList
	local p:player = Player.createPlayer(names[N], skill_levels[N])
   	ListAddfirst( PlayerList, p)
Next

for local Boss:Player = eachin PlayerList
	DrawText Boss.ID,0,50+Boss.id*10
    DrawText Boss.name,50,50+Boss.id*10 
    DrawText Boss.skill_level,150,50+Boss.id*10
next
flip
waitkey     
end



tonyg(Posted 2008) [#4]
@HotShot2005, johnnyfreak is probably right but, unfortunately, there are so many oddities and errors in your code I am guessing you wrote it without really knowing why you were doing things.
Is that right?
If so, I would suggest you check out :
Beginners Guide to Bmax
and
Learning Object-Oriented Programming in Blitzmax


Hotshot2005(Posted 2008) [#5]
I dont think I have fully learn Object-Oriented Programming in Blitzmax very well and I guess I have keep learning those both tutorial until I fully understand what is what.


Czar Flavius(Posted 2008) [#6]
            Local Boss:Player
			Boss = New Player

			Boss.id   = 1
			Boss.name = "David R"
			Boss.skill_level=77

			Boss.id   = 2
			Boss.name = "Paul C"
			Boss.skill_level=17


This is like saying,
Local apples:Int
apples = 5
apples = 7

You do not have 2 seperate bosses, you have one boss. The last paragraph of code overwrites the original data.

	'Put the address of this new Boss into variable Player
	NewBoss = New Player

Don't know if this is a typo but you got Boss and Player the wrong way round in the description.