• Advertisement
Sign in to follow this  

Tile System\Simulating a Two Dimensional Array

This topic is 1905 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Alright, I figured it was time to get off my ass and start programming again, haven't got into that for a few months.

Anyway, I've done some kind of a tile system with C#'s XNA before using a text file. Well I decided that under C++, I would try to do the same, but with a binary file. I have a window that's 1024x768 and I'm going to be working with tiles that are 16x16 and assuming I did the math right, that would be 3072 tiles per screen. I'll worry about handling how to resize tiles based on resolution later. In my binary file, I wrote two integers to start with, one is 64, the second is 48. 64x48=3072. Now I wrote 3072 integers that are all 0s for the sake of simplicity. Now, when I think about this, reading a binary file is going to be like reading a straight line, so I need to figure out how to read and arrange them by using 64 tiles per line (left to right) and 48 tiles per column (up to down).

I've read all the 0s into an array, but I can't seem to figure out to use glTranslatef properly and I did get it to write all the tiles diagonally at one point, but that doesn't help me now.

Also to note, I'm using the glOrtho function like so:

glOrtho(0, 1024, 768, 0, -1, 1);

Anyway, here's my writing function:

void WriteLevel()
{
FILE* level = fopen("Level1.dat", "wb+");
int W = 0;
int X = 64;
int Y = 48;
fwrite(&X, sizeof(int), 1, level);
fwrite(&Y, sizeof(int), 1, level);
for (int x = 0; x < 64; x++)
for (int y = 0; y < 48; y++)
fwrite(&W, sizeof(int), 1, level);
fclose(level);
}

And here's where I read the 0s into an array:

FILE* level = fopen("Level1.dat", "rb");
int X;
int Y;
fread(&X, sizeof(int), 1, level);
fread(&Y, sizeof(int), 1, level);
int W = X * Y;
int Z[W];
int readsofar = 0;

for (int x = 0; x < X; x++)
{
for (int y = 0; y < Y; y++)
{
fread(&Z[readsofar], sizeof(int), 1, level);
readsofar++;
}
}
fclose(level);
int x = 0;
int y = 0;
int z = 1;

So now I'm just dealing with array Z[3072]. Here's where my problem is:

for (readsofar = 0; readsofar < W; readsofar++)
{
if (readsofar == 0)
z = 1;
glPushMatrix();
if (Z[readsofar] == 1)
glColor3f(1.0f, 0.0f, 0.0f);
if (Z[readsofar] == 0)
glColor3f(0.0f, 1.0f, 0.0f);
if (readsofar/64 == z)
{
x = 0;
y++;
z++;
}
if (y == 48)
y = 0;
//printf("(%d, %d, %d)\n", x, y, z);
glTranslatef((float)x * 16.0f, (float)y * 16.0f, 0.0f);
glBegin(GL_QUADS);
glVertex2f(0.0f, 0.0f);
glVertex2f(16.0f, 0.0f);
glVertex2f(16.0f, 16.0f);
glVertex2f(0.0f, 16.0f);
glEnd();
glPopMatrix();
x++;
}

It sort of works, it looks like one of those old TVs when you look at them through a fan, there's a few black lines constantly moving up or down.

Screenshot-2.png

So where am I going wrong?

Edit: I apologize, for some stupid reason my code shows up in one straight line...

Edit 2: I'm taking out the code tags, they aren't working properly.

Share this post


Link to post
Share on other sites
Advertisement
Sign in to follow this  

  • Advertisement