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;
			}
		}
	}
}