Jump to content

  • Log In with Google      Sign In   
  • Create Account


We have 4 x Pro Licences (valued at $59 each) for 2d modular animation software Spriter to give away in this Thursday's GDNet Direct email newsletter.

Read more in this forum topic or make sure you're signed up (from the right-hand sidebar on the homepage) and read Thursday's newsletter to get in the running!

Dynamic allocation, 3d array, RPG-type level structure

Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
2 replies to this topic

#1 microbe-devel   Members   -  Reputation: 111


Posted 10 October 2012 - 04:13 PM

Hi there,
before going further, I want to apologize if I dont post in the appropriate section. Sorry for my approximative english too.

Here's the stuff;
I'm developping a game wich will mix classic RPG stage and Shoot'em up stages (not at the same time of course).
I have some trouble to make my map loading function.

I show you how my level are constructed;

first step:
I'm creating a txt file, wich look like this:
Posted Image

After that, i convert this txt file to an unsigned char array and i put that in a header file.

So i want to have a structure like that:
[source lang="cpp"]typedef struct{ char map_name[50]; int width; int height; char*** map_struct;}rpgMap;[/source]

I can retrive my map_name, and put it in my structure, idem for width and height.

Now my problem:
I'm not familiar with dynamic allocation, here's how i'm allocating my array memory:

[source lang="cpp"]// Create the array in memoryint a = 0; int b = 0;Map.map_struct = malloc(Map.height*sizeof(char*));for(a = 0; a < Map.height; a++){ Map.map_struct[a] = malloc(Map.width * sizeof(char*)); for(b=0; b < Map.width; b++){ Map.map_struct[a]= malloc(4 * sizeof(char*)); //The "4" is for "background / foreground / collision / event" }}[/source]

I'm not sure if this is correct ...

If someone can help, it would be great. I will need help to fill this array too, but one thing at once ^^

ps: I see that we can attach file ( up to 48Mo Posted Image ) so if i dont get it, i will create a small project ( main.c, level.c, level.h ) without all the GUI things, only the structure stuffs, to show my problem.

Thanks Posted Image

Edited by microbe-devel, 10 October 2012 - 05:27 PM.


#2 RulerOfNothing   Members   -  Reputation: 1164


Posted 12 October 2012 - 03:00 AM

While your allocation code looks correct to me, you could also simply create a 1D array with the correct size (so that would be Map.height*Map.width*4*sizeof(char)), and then use the following code to access each tile's information:
map_struct[i+4*x+4*Map.width*y] or map_struct[i+4*y+4*Map.height*x]
You have some choice in whether you arrange the data by rows or by columns, but I recommend that you put the data for each tile in one position.

#3 microbe-devel   Members   -  Reputation: 111


Posted 13 October 2012 - 03:17 PM

That's sounds good !
I'm gonna put each tile in "one line" so i think this would work:
( x * y ) + ( 4* (x*y-1) ) + Z
Where x is tile x position, y is y tile position, and z is the row i want to get from the tile !
I will try, thanks !!!

Edit: my calcul was bad :rolleyes:
This work;

((y * (MapWidth - 1) + y + x) * 4) +Z

Where x, y are the tile coordinates ( first tile is 0,0 )
MapWidth is the map number of tiles in width
4 is because one tile contain 4 rows
Z is added to get the rows we want ( 4 rows, 0 -> 3 )

Thanks again !

Edited by microbe-devel, 13 October 2012 - 06:21 PM.

Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.