EachIn
BlitzMax Forums/BlitzMax Beginners Area/EachIn
| ||
I've been trying to find a tutorial on this because I thought it must have been asked a lot, I got to this stage within a few minutes of downloading the Max demo - and several hours later i'm still at this stage... The problem is the new lists feature, I understand the concept: Several lists of the same data type. I just cannot figure out the syntax and reading the manual and searching for other users problems hasn't cleared this up for me. In this code I have a data type called unit, and I have a list called shipList, but these are not linked in any way. I know 10 of the unit data type are created, but I cannot iterate through them in the mainLoop with eachIn because that is indexed via the TList and not the TType. I'm baffled as to the syntax required to resolve this, help please :) Strict Graphics 640,480,0 Global AppTitle$="AAAAAAARRRRRRRRGGGGGGHHHHHHHHH WTF Lists..." Global backdrop=LoadImage ("Backdrop\backdrop1.jpg") Type unit Field o,ai Field x#,z#,f# End Type Global shipList:TList=CreateList() createPlayers(10) 'function MainLoop Local ship:unit While Not KeyDown(KEY_ESCAPE) For ship=EachIn shipList DebugLog("SHIP LOOP ACTIVE") Select ship.ai Case 0 control(ship) camera(ship) Case 1 ai(ship) Default End Select Next For ship=EachIn shipList moveShip(ship) Next Flip Cls Wend End 'end function Function LIVE_SHIPS_____________________________________________________________________________________________() End Function Function control(ship:unit) End Function Function ai(ship:unit) End Function Function moveShip(ship:unit) End Function Function LIVE_GENERAL_PURPOSE__________________________________________________________________________________() End Function Function camera(ship:unit) 'Centres display on Ship SetScale 5,5 DrawImage backdrop,-(ship.x + (GraphicsWidth()/2)) , -(ship.z + (GraphicsHeight()/2)) SetScale 1,1 End Function Function SETUP_________________________________________________________________________________________________() End Function Function createPlayers(qty=10) For Local n=1 To 10 Local ship:unit=New unit ship.o=LoadImage("Ship\7.png") If n>1 Then ship.ai=1 'Make First Ship the Human Player ship.x=Rnd(0) ship.z=Rnd(0) Next End Function |
| ||
I found it in an unrelated code snippet :) YAYFunction createPlayers(qty=10) For Local n=1 To 10 Local ship:unit=New unit ship.o=LoadImage("Ship\7.png") If n>1 Then ship.ai=1 'Make First Ship the Human Player ship.x=Rnd(0) ship.z=Rnd(0) ListAddLast shipList,ship Next End Function I'd tried ListAddLast before, but failed to understand how to use it properly (after creating the variable locally with New). |
| ||
Several lists of the same data type. I'm not sure you know but I thought I'd point out that a list can contain any object not just objects of the same type. so:local g:Tlist=createlist() local o:myObject=new myObject local o1:another = new another listaddlast(g,"hello") listaddlast(g,o) listaddlast(g,o1) for local i:object=eachin g if string(i)<>null print "it's a string "+string(i) elseif myObject(i)<>null print "it's a myObject" elseif another(i)<>null print "it's another." endif next Hope you get the hang of them, they're handy. |
| ||
Also, using inheritence makes it a lot cleaner to update what i think you're trying to update:Global shipList:Tlist=CreateList() Type baseUnit Field name$ Field x#,y#,f# ' whenever you make a new object, this method will get called ' add to the shipList so we don't have to later on. 'Method New() ' ListAddLast(shipList,Self) 'End Method Method update() f:+1 End Method End Type Type playerUnit Extends baseUnit Method update() super.update() ' will perform what baseUnit.update() does ' update keypresses, etc for player End Method End Type Type AIUnit Extends baseUnit Method update() super.update() ' will perform what baseUnit.update() does 'do IA code here End Method End Type Function updateShips() For Local i:baseUnit=EachIn shipList i.update() Next End Function ' -------------------------------- Local i:playerUnit=New playerUnit i.name="player" ListAddLast(shipList,i) Local j:AIunit=New AIUnit j.name="AI 1" ListAddLast(shipList,j) While KeyHit(KEY_ESCAPE)=0 Cls updateShips() Flip Wend End |
| ||
Thank you. I understand the OO stuff to the "Get the theory, never done it in practice" level - so I figured i'd write this in a very B3D way first to ease into BMax slowly. My snippet is very much the way I structure my B3D stuff. I'll start using methods pretty soon I think (i've been dying too be able to do that in ages), I already do inheritence of a sort in B3D (type within a type) but dont find it is generally that much use in the simplistic stuff I write. |
| ||
I thought you might already understand it and only replied on the off chance you didn't. I love the inheritence part of bmx. After a while you'll find you won't be able to go back to b3d. Not that you can't, but you just won't be able to bring yourself to be constrained without the things you have in bmx. Not that b3d is bad, I love it, but after using bmx exclusively for so long I can't imagine using anything else. [/bmx loving] |
| ||
I'm writting one game, I don't want to abandon my 3D project. It's just that I start a new job on Monday and they gave me a Mac today to brush up. I'm going to go in on Monday morning with a simple arcade game all finished & polished off... I just wont tell them I wrote it on the PC :) |
| ||
Sweet! Good luck with that Becks. Be sure to share the outcome with us. I'm curious like an orange. |
| ||
You do realise when I say polished, more than anything else I mean simple... It's meant to impress a bunch of Mac-philles who don't know what a joystick is - if you want it to impress a bunch of coders ... that'll take longer :) ![]() |
| ||
Mmmmmm, space-battle-esque laser fire. What are you doing to those poor jelly babies anyway? |
| ||
Setting fire to them it seems![]() fps note: 250 ships in arena |
| ||
Looking nice! |
| ||
It's looking nearly finished now, I just need to put a front end on it and some kind of HUD to show the battle status, but as i've only got the BMax demo until after xmas I doubt i'll be able to release it until i've had a pay packet or two. |
| ||
![]() |
| ||
I'd be interested to see the source because I'm doing something similar but I *hate* my AI combat code. it's just crud. Looks like you've done a lot in a short space of time. Looks good. |
| ||
B3D version Source: http://www.blitzbasic.com/codearcs/codearcs.php?code=1034 Game: http://spacecorps.bansheestudios.com/ Pretty much the same thing |