void Pattern5x5::determineRandomGoodMoves(std::default_random_engine& engine) { goodMoves.clear(); std::uniform_int_distribution<> boolDist(0, 1); int i = -2, j = -2; for (char c : hash) { if (c == '_' && (boolDist(engine) == 0)) { goodMoves.push_back(std::make_pair(i, j)); } if (j == 2) { j = -3; i++; } j++; } }
void GameplayState::resolveExistance() { for(unsigned int i = 0; i < enemies.size(); i++) { sf::Vector2f playerPos = player->representation.getPosition(); float enemyLen = ezo::vecLength(playerPos.x - enemies[i]->representation.getPosition().x, playerPos.y - enemies[i]->representation.getPosition().y); if(enemyLen > 1500.f) { std::uniform_real_distribution<float> distX(servLoc.getRender()->getWindow()->getSize().x/4, servLoc.getRender()->getWindow()->getSize().x/2); std::uniform_real_distribution<float> distY(servLoc.getRender()->getWindow()->getSize().y/4, servLoc.getRender()->getWindow()->getSize().y/2); std::uniform_int_distribution<int> boolDist(false, true); sf::Vector2f playerPos = player->representation.getPosition(); float posX = distX(randEngine); float posY = distY(randEngine); if(boolDist(randEngine)) posX = -posX; if(boolDist(randEngine)) posY = -posY; enemies[i]->representation.setPosition({posX + playerPos.x, posY + playerPos.y}); } if(!enemies[i]->exist) { std::uniform_int_distribution<unsigned char> exploColor(0, 255); sf::Color explosionColor(exploColor(randEngine), exploColor(randEngine), exploColor(randEngine)); ParticlesSource* explo = new ParticlesSource(enemies[i]->representation.getPosition()); explo->createParticles(1000, sf::Vector2f(0, 0), 4.f, explosionColor, 0, sf::seconds(0.7f), 0.4f); explosions.push_back(explo); std::uniform_real_distribution<float> distX(servLoc.getRender()->getWindow()->getSize().x/4, servLoc.getRender()->getWindow()->getSize().x/2); std::uniform_real_distribution<float> distY(servLoc.getRender()->getWindow()->getSize().y/4, servLoc.getRender()->getWindow()->getSize().y/2); std::uniform_int_distribution<int> boolDist(false, true); if(boolDist(randEngine)) { player->hp += enemies[i]->attack * 3; if(player->hp > player->fullHP) player->hp = player->fullHP; } delete enemies[i]; enemies.erase( enemies.begin() + i); static unsigned int enemyHP, enemyAttack; unsigned int enemiesCount; if(player->score < 3) enemiesCount = 1, enemyHP = 30, enemyAttack = 1; else if(player->score < 10) enemiesCount = 2, enemyHP = 60, enemyAttack = 2; else if(player->score < 50) enemiesCount = 4, enemyHP = 80, enemyAttack = 3; else if(player->score < 100) enemiesCount = 7, enemyHP = 100, enemyAttack = 5; else if(player->score < 200) enemiesCount = 10, enemyHP = 150, enemyAttack = 4; else if(player->score < 1000) enemiesCount = 12, enemyHP = 180, enemyAttack = 5; else enemiesCount = 17, enemyHP = 200, enemyAttack = 8; for(unsigned int i = enemies.size(); i < enemiesCount; i++) { sf::Vector2f enemyPos; float xpart = distX(randEngine); float ypart = distY(randEngine); if(boolDist(randEngine)) xpart = -xpart; if(boolDist(randEngine)) ypart = -ypart; enemyPos.x = xpart + player->representation.getPosition().x; enemyPos.y = ypart + player->representation.getPosition().y; enemies.push_back(new Ship(enemyPos, enemyHP, 1100, 700, enemyAttack, 6, 10000, 1000000000)); } } } }