Exemple #1
0
/*
Method is responsible for runtime checks:
	- Collision detection
	- Food eaten
	- Drawing
	Return(true) -> GameOver
	Return(false)-> Keep running
*/
bool GameController::performGameRuntimeChecks(CInputManager &inputManager,
											  unsigned long &score, CollisionDetector &collisionDetector,
											  DrawEngine drawEngine, int key, Snake &snake, vector<Cell> &foodList,
											  FoodProvider &foodProvider, Cell lastCell)
{
	//If collision detected
	if(collisionDetector.collisionDetected(snake))
	{
		char message[] = "GAME OVER! <Press any key>";
		drawEngine.showMessage(message);
		inputManager.GetNextKeyWait(&key);
		return true;
	}
	//Food eaten
	else if(collisionDetector.foodEaten(snake, foodList))
	{
		//Setting new score
		score += snake.getCells().size()*2;
		//Draw score
		drawEngine.updateScore(score);
		//Add cell
		snake.addCell();
		//Recieving new foodList
		vector<Cell> &list = foodProvider.provideFood(snake, drawEngine.getWindownWidth(), 
			drawEngine.getMenuBorderHeight());
		foodList = list;
	}
	//Draw snake
	drawEngine.drawSnake(snake, lastCell);
	//Draw food
	drawEngine.drawFood(foodList);
	return false;
}
Exemple #2
0
/*
Detects if snake hits a wall or itself
*/
bool CollisionDetector::collisionDetected(Snake snake)
{
	Cell header = snake.getHeader();
	int x = header.getX();
	int y = header.getY();
	//Iteration snakes cells, detecting self hit
	for(int i = 1; i < snake.getCells().size(); i++)
	{
		Cell currCell = snake.getCells().at(i);
		if(currCell.getX() == x && currCell.getY() == y)
			return true;
	}
	if(x >= width || y >= height || x < 0 || y < 0)
		return true;
	return false;
}