Page 1 of 1

The Magic of Arrays

PostPosted: Wed Nov 04, 2009 1:48 am
by GeoGia
Hi everybody :D

I'm new to these here parts, but I like the attitude of this community, you really seem to care about games, like I do :) I haven't had much of a chance to use GE, but I was reading some forum posts, and Feral's tutorial about arrays inspired me. I started to think about what you could do with nothing but arrays... some of this might not apply to GE, and I'm sure some of you are already miles past this point, but hopefully it'll at least get some people thinkin' :)





Arrays are useful for organizing information when you have a large number of objects. For example, you could use them to keep track of health for all the monsters on a level:

char monsterhealth[20]

Now whenever you want to modify an individual monster's health, just do this:

monsterhealth[12]-=4

Now let's say we're working on an even more complicated game. We want to keep track of a whole range of stats for each of those 20 monsters. We could use arrays for this:

char monsteratk[20]
char monsterdef[20]
char monsteragi[20]

but as you can see this is getting a little disorganized. Let's use a multi-dimensional array instead

char monsterstats[20,4]

20 monsters, with 4 stats each.

Now we can actually do something quite clever to keep track of what's what.

#define health=1
#define atk=2
#define def=3 'When you use #define, the compiler doesn't use any
#define agi=4 'memory, it just replaces these with hard code

Now when we want to modify them:

monsterstats[19,health]-=6

Monster number 19 loses 6 health. Simple, eh?

What if we wanted to have different types of monsters, each with their own set of stats? Well, let's make an array where we define the stats of each type so we can look them up when we need them

char monster_stats[4,4]

That's 4 types of monsters with 4 stats each, and we can set them up like this:

#define goblin=1

monster_stats[goblin,health]=10
monster_stats[goblin,atk]=3
monster_stats[goblin,def]=4
monster_stats[goblin,agi]=1 '(goblins are slow)

Isn't that cool? Just like a class!

Now we need an array like our first one, so we can control individual monsters

int monster_control[20,7]

The extra cells are for:

#define type=5
#define xcrd=6 'Likely to go above 255, hence the int
#define ycrd=7

The type and coordinates can be manipulated from the map editor, just keep track of what monster number you're on (not sure about this for GE)

Now when we're setting up a level, we just copy the values from "stats" into "control" depending on the type

for monstnum=1 to 20
_type=monster_control[monstnum,type]
if _type<>0
for _stat=1 to 4
monster_control[monstnum,_stat]=monster_stats[_type,_stat]
next
next

Now we have a nice array loaded full of bloodthirsty monsters ready to fight! Enjoy!

GeoGia

Note that in practice, arrays start at 0, so for 20 cells you actually type 19. I just find it easier to understand this way

All of the arrays should be unsigned, except the control, which has to account for negative health, I just left them out for simplicity

Re: The Magic of Arrays

PostPosted: Wed Nov 04, 2009 1:58 am
by makslane
Thanks and welcome to the Game Editor forum!

Re: The Magic of Arrays

PostPosted: Wed Nov 04, 2009 7:05 pm
by GeoGia
Thanks, glad to be here :)

Re: The Magic of Arrays

PostPosted: Mon Apr 05, 2010 7:38 pm
by Hblade
Yeah hey nice tutorial! Thanks allot :D I posted one too in General but mine's not as advanced as yours :D