コード例 #1
0
ファイル: Way.cpp プロジェクト: makowiecki/tower_defense
void Way::fillStepsList(Monster& monster, int index)
{
	monster.emptyStepsList();

	monster.addStep(mExitPosition);
	++mValueParameter;

	sf::Vector2i actualPosition(mExitPosition);

	while(mValueParameter != -1)
	{
		if(mWorkingBoard[actualPosition.x - 1][actualPosition.y] == mValueParameter)//left
		{
			actualPosition.x-=1;
			monster.addStep(actualPosition);
		}
		else if(mWorkingBoard[actualPosition.x + 1][actualPosition.y] == mValueParameter)//right
		{
			actualPosition.x+=1;
			monster.addStep(actualPosition);
		}
		else if(mWorkingBoard[actualPosition.x][actualPosition.y - 1] == mValueParameter)//up
		{
			actualPosition.y-=1;
			monster.addStep(actualPosition);
		}
		else if(mWorkingBoard[actualPosition.x][actualPosition.y + 1] == mValueParameter)//down
		{
			actualPosition.y+=1;
			monster.addStep(actualPosition);
		}
		++mValueParameter;
	}
}
コード例 #2
0
ファイル: Way.cpp プロジェクト: makowiecki/tower_defense
void Way::fillGlobalStepsList(Board& board)
{
	board.emptyGlobalStepsList();

	board.addGlobalStep(mExitPosition);
	++mValueParameter;

	sf::Vector2i actualPosition(mExitPosition);

	while(mValueParameter != -1)
	{
		if(mWorkingBoard[actualPosition.x - 1][actualPosition.y] == mValueParameter)//left
		{
			actualPosition.x-=1;
			board.addGlobalStep(actualPosition);
		}
		else if(mWorkingBoard[actualPosition.x + 1][actualPosition.y] == mValueParameter)//right
		{
			actualPosition.x+=1;
			board.addGlobalStep(actualPosition);
		}
		else if(mWorkingBoard[actualPosition.x][actualPosition.y - 1] == mValueParameter)//up
		{
			actualPosition.y-=1;
			board.addGlobalStep(actualPosition);
		}
		else if(mWorkingBoard[actualPosition.x][actualPosition.y + 1] == mValueParameter)//down
		{
			actualPosition.y+=1;
			board.addGlobalStep(actualPosition);
		}
		++mValueParameter;
	}
}
コード例 #3
0
ファイル: MainScene.cpp プロジェクト: PashaCher/Algoritm
void MainScene::setViewpointCenter(const Point &position)
{
	Size winSize = Director::getInstance()->getWinSize();
	int x = MAX(position.x, winSize.width / 2);
	int y = MAX(position.y, winSize.height / 2);
	x = MIN(x, (_tileMap->getMapSize().width * _tileMap->getTileSize().width) - winSize.width / 2);
	y = MIN(y, (_tileMap->getMapSize().height * _tileMap->getTileSize().height) - winSize.height / 2);
	Point actualPosition(x, y);
	Point centerOfView(winSize.width / 2, winSize.height / 2);
	Point viewPoint = centerOfView - actualPosition;
	_tileMap->setPosition(viewPoint);
}
コード例 #4
0
ファイル: Way.cpp プロジェクト: makowiecki/tower_defense
bool Way::canFind(const Board& board, const sf::Vector2f& pixelsStartPosition)
{
	makeCopy(board);
	mValueParameter=-1;

	sf::Vector2i chosenFieldPosition(FieldManager::getInstance().getChosenFieldPosition());
	mWorkingBoard[chosenFieldPosition.x][chosenFieldPosition.y]=9;

	sf::Vector2u actualPosition(static_cast<unsigned>(pixelsStartPosition.x / gi::FIELD_WIDTH), static_cast<unsigned>(pixelsStartPosition.y / gi::FIELD_HEIGHT));
	mWorkingBoard[actualPosition.x][actualPosition.y]=mValueParameter;
	--mValueParameter;

	std::queue<sf::Vector2u> pointsList;

	pointsList.push(actualPosition);
	
	unsigned int pointsListSize=0;

	while(pointsList.size() != 0)
	{
		pointsListSize=pointsList.size();

		for(unsigned int i=0; i < pointsListSize; ++i)
		{
			actualPosition=pointsList.front();
			pointsList.pop();

			if(mWorkingBoard[actualPosition.x + 1][actualPosition.y] == 2)		// found exit on right field
			{
				return true;
			}
			else if(mWorkingBoard[actualPosition.x + 1][actualPosition.y] == 0)	// right field
			{
				mWorkingBoard[actualPosition.x + 1][actualPosition.y]=mValueParameter;
				pointsList.push(sf::Vector2u(actualPosition.x + 1, actualPosition.y));
			}

			if(mWorkingBoard[actualPosition.x][actualPosition.y + 1] == 0)		// down field
			{
				mWorkingBoard[actualPosition.x][actualPosition.y + 1]=mValueParameter;
				pointsList.push(sf::Vector2u(actualPosition.x, actualPosition.y + 1));
			}

			if(mWorkingBoard[actualPosition.x][actualPosition.y - 1] == 0)		// up field
			{
				mWorkingBoard[actualPosition.x][actualPosition.y - 1]=mValueParameter;
				pointsList.push(sf::Vector2u(actualPosition.x, actualPosition.y - 1));
			}

			if(actualPosition.x > 1)
			{
				if(mWorkingBoard[actualPosition.x - 1][actualPosition.y] == 0)		// left field
				{
					mWorkingBoard[actualPosition.x - 1][actualPosition.y]=mValueParameter;
					pointsList.push(sf::Vector2u(actualPosition.x - 1, actualPosition.y));
				}
			}
		}
		--mValueParameter;
	}
	
	return false;
}