Пример #1
0
char NPC::getMove(int playerX, int playerY)
{
	bool done = false;
	static default_random_engine randomEngine(time(NULL));
	uniform_int_distribution<int> moveRoll(0, 6);

	float distance;
	int dx = _x - playerX;
	int dy = _y - playerY;
	int adx = abs(dx), ady = abs(dy);

	distance = sqrt((pow(adx, 2)) + pow(ady, 2.0));

	//should the NPC move at all?
	switch (_avatar) {
	case 'F':
		break;
	default:
		while (!done)
		{
			if (distance <= 5){
				//should the NPC move left/right?
				if (adx > ady) {
					if (dx < 0) {
						return 'a';
					}
					else {
						return 'd';
					}
				}
				else { // or up/down?
					if (dy < 0) {
						return 'w';
					}
					else {
						return 's';
					}
				}
				
			}
			else {
				int randomMove = moveRoll(randomEngine);
				switch (randomMove){
				case 0:
					return 'a';
				case 1:
					return 'w';
				case 2:
					return 's';
				case 3:
					return 'd';
				default:
					return '.';
				}
			}
		}
	}
}
Пример #2
0
char Enemy::getMove(int playerX, int playerY)
{
	static default_random_engine engine(time(NULL));
	uniform_int_distribution<int> moveRoll(0, 6);

	int distance;
	int dx = _x - playerX;
	int dy = _y - playerY;
	int adx = abs(dx);
	int ady = abs(dy);;
	
	distance = adx + ady;

	if(distance <= 5)
	{
		//Moving along X axis
		if(adx > ady)
		{
			if(dx > 0)
			{
				return 'A';
			}
			else
			{
				return 'D';
			}
		}
		else
		{
			if (dy > 0)
			{
				return 'W';
			}
			else
			{
				return 'S';
			}
		}
	}
	int randomMove = moveRoll(engine);
	switch (randomMove)
	{
	case 0:
		return 'A';
	case 1:
		return 'W';
	case 2:
		return 'S';
	case 3:
		return 'D';
	default:
		return '.';

	}
}
Пример #3
0
char Enemy::getMove(int playerX, int playerY){
	static mt19937 randomEngine(time(0));
	uniform_int_distribution<int> moveRoll(0, 6);
	int distance;
	int diffX = _x - playerX;
	int diffY = _y - playerY;
	int aDiffX = abs(diffX);
	int aDiffY = abs(diffY);
	distance = aDiffX + aDiffY;
	if (distance <= 5){
		//Moving along X axis
		if (aDiffX < aDiffY){ // closer on X axis, so make them move closer on Y axis
			if (diffY > 0){ // enemy is to the bottom of player
				return 'w'; // so go up
			}
			else{
				return 's';
			}
		}
		else{ // closer on Y axis, so make them move clolser on X axis
			if (diffX > 0){ // enemy is to the right of player
				return 'a'; // so move left
			}
			else{
				return 'd';
			}
		}
	}
	int randomMove = moveRoll(randomEngine);
	switch (randomMove)
	{
	case 0:
		return 'a';
	case 1:
		return 'w';
	case 2:
		return 's';
	case 3:
		return 'd';
	default:
		return '.';
	}
}