Midterm
Matt Parker
This is the initial attempt at creating a C++ openGL version of a game I've developed. It's a time matching game. The idea is to get the triangles of one tile to match up with the triangles of other tiles.
|
Part 1. Used Random Colors to make a new color scheme everytime.
|
Color getRandomColor(){
int i = rand()%NUM_OF_COLORS;
Color color = colors[i];
color.print();
return (color);
}
void populateColors(){
for(int i = 0; i < NUM_OF_COLORS; i++){
colors[i] = Color();
while(colors[i] == black){
colors[i] = Color();
}
}
}
|
|
|
Part 2. Exchange Tiles: Tiles become transparent and exchange positions.
|
Vec2d lerp(Vec2d a, Vec2d b, float percent){
return(a*(1-percent) + b * percent);
}
void tileExchange(Vec2d pos1, Vec2d pos2){
Tile tile1 = grid.getTile(pos1);
Tile tile2 = grid.getTile(pos2);
if(step < 1000){
if(step == 1){
grid.getTile(pos1).setTransLevel(.5);
grid.getTile(pos2).setTransLevel(.5);
}
Vec2d step1 = lerp(center1, center2, .001 * step);
Vec2d step2 = lerp(center2, center1, .001 * step);
grid.getTile(pos1).setCenter(step1);
grid.getTile(pos2).setCenter(step2);
step++;
grid.draw();
glColor3f(1, 1, 1);
glRectf(step1.x-5, step1.y-5, step1.x+5, step1.y+5);
} else{
grid.getTile(pos1).setTransLevel(1);
grid.getTile(pos2).setTransLevel(1);
grid.exchangeTiles(pos1, pos2);
hasClick = 0;
inAnim = false;
}
}
|
 |
|
Part 3. Matches Removed: Tiles shrink and Rotate away.
|
void Grid::removeMatchTris(){
for(int x = 0; x < GRID_SIZE; x++){
for(int y = 0; y < GRID_SIZE; y++){
if((tiles[x][y].hasMatchNorth()) && ( tiles[x][y].northTriangle.size > 0)){
tiles[x][y].northTriangle.size = tiles[x][y].northTriangle.size - 0.01;
float newY = tiles[x][y].northTriangle.center.y;
tiles[x][y].northTriangle.addRotation(0.5);
tiles[x][y].northTriangle.setCenter(Vec2d(tiles[x][y].northTriangle.center.x, newY));
} else if(tiles[x][y].hasMatchNorth()){
tiles[x][y].northTriangle.active = false;
}
if((tiles[x][y].hasMatchSouth()) && ( tiles[x][y].southTriangle.size > 0)){
tiles[x][y].southTriangle.size = tiles[x][y].southTriangle.size - 0.01;
float newY = tiles[x][y].southTriangle.center.y;
tiles[x][y].southTriangle.addRotation(0.5);
tiles[x][y].southTriangle.setCenter(Vec2d(tiles[x][y].southTriangle.center.x, newY));
} else if(tiles[x][y].hasMatchSouth()){
tiles[x][y].southTriangle.active = false;
}
if((tiles[x][y].hasMatchEast()) && ( tiles[x][y].eastTriangle.size > 0)){
tiles[x][y].eastTriangle.size = tiles[x][y].eastTriangle.size - 0.01;
float newY = tiles[x][y].eastTriangle.center.y;
tiles[x][y].eastTriangle.addRotation(0.5);
tiles[x][y].eastTriangle.setCenter(Vec2d(tiles[x][y].eastTriangle.center.x, newY));
} else if(tiles[x][y].hasMatchEast()){
tiles[x][y].eastTriangle.active = false;
}
if((tiles[x][y].hasMatchWest()) && ( tiles[x][y].westTriangle.size > 0)){
tiles[x][y].westTriangle.size = tiles[x][y].westTriangle.size - 0.01;
float newY = tiles[x][y].westTriangle.center.y;
tiles[x][y].westTriangle.addRotation(0.5);
tiles[x][y].westTriangle.setCenter(Vec2d(tiles[x][y].westTriangle.center.x, newY));
} else if(tiles[x][y].hasMatchWest()){
tiles[x][y].westTriangle.active = false;
}
}
}
}
|
 |
|