Jump to content

  • Log In with Google      Sign In   
  • Create Account


Tile System\Simulating a Two Dimensional Array


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
No replies to this topic

#1 Spirrwell   Members   -  Reputation: 263

Like
0Likes
Like

Posted 04 November 2012 - 08:08 AM

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.

Posted Image

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.

Sponsor:



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.



PARTNERS