View more

View more

View more

### Image of the Day Submit

IOTD | Top Screenshots

### The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

# Managing squares, Bejeweled style.

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.

2 replies to this topic

### #1blueshogun96  Members

Posted 28 April 2012 - 10:35 PM

I know this should be a rather simple concept, but atm, I'm working on a game that has gameplay similar to the game known as Bejeweled and I'm having a bit of trouble managing the squares in one aspect. When a square is elliminated, the squares above it are supposed to fall until it reaches the bottom of the boundary, or until it lands on top of another square. I've tried to write my own algorithm to do this for weeks, but I can't get it to work to save my life.

i = 0;
while( i < 10 * 15 )
{
int move_down = Yes;

/* When there's a space below the square, move it down
until it hits the bottom or the square below it. */
if( squares[i].active )
{
struct square_t* sq = &squares[i];
int j = 0;

while( j < 10 * 15 )
{
/* Avoid testing the same square against itself */
/* Also skip inactive squares */
if( i == j || !squares[j].active )
{
j++;
continue;
}

/* Skip squares that are already at the bottom */
if( squares[j].pos.y - squares[j].size.y >= ( ( SQUARE_SIZE + 3.0f ) * 14.0f ) )
{
j++;
move_down = No;
continue;
}

/* Is this square directly below the one we're testing? */
if( sq->pos.x == squares[j].pos.x )
{
if( sq->pos.y == ( squares[j].pos.y - ( SQUARE_SIZE + 3.0f ) ) )
{
move_down = No;
break;
}
}

j++;
}

if( move_down )
squares[i].pos.y += 1.0f;
}

i++;
}


I hate to just dump some random code on you all, but I need to have this concept ready ASAP. I've played around with the signs a bit, and each time I get some different and funky results, but never the one I need. And the +3.0f is just the amount of space between each square on the screen.

Any ideas? Thanks.
Follow Shogun3D on the official website: http://shogun3d.net

"Yo mama so fat, she can't be frustum culled." - yoshi_lol

"One objection to a “critique of C#” would be that you can’t talk about C# without talking about the whole “.Net experience”. However, one can approach the topic of Hitler without a complete discussion of Nationalist Socialism, so I feel justified." - Steve White.

### #2Álvaro  Members

Posted 28 April 2012 - 10:55 PM

If the amount of space between each square on the screen appears at all in the code that handles the logic of how blocks behave, you probably have a bigger problem than what you described. You should have a data structure with the contents of the grid on which you do all the logic. You then reflect changes in the grid by displaying animations, but the details of the representation on the screen shouldn't leak back into the logic of what goes on in the grid.

### #3blueshogun96  Members

Posted 30 April 2012 - 11:41 AM

Hm, I figured that using an array like structure would be a bit more work, but at this point, as long as the concept works and works efficiently, I have no complaints.
Follow Shogun3D on the official website: http://shogun3d.net

"Yo mama so fat, she can't be frustum culled." - yoshi_lol

"One objection to a “critique of C#” would be that you can’t talk about C# without talking about the whole “.Net experience”. However, one can approach the topic of Hitler without a complete discussion of Nationalist Socialism, so I feel justified." - Steve White.

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.