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