Play::Play(int SCREEN_WIDTH, int SCREEN_HEIGHT) { //sf::VideoMode desktop = sf::VideoMode::getDesktopMode(); //const int window_height = desktop.height; //const int window_width = desktop.width; //cout << SCREEN_WIDTH << endl; float boidsSize = 8; factoryShip = new FactoryShip(sf::Vector2f(600, 500), 100); factoryShip->Load(); player = new Player(); //Enemy enemies[3]; asteroid = new Asteroids(player->GetPosition()); enemies[1] = Enemy(sf::Vector2f(100, 100), 100); enemies[2] = Enemy(sf::Vector2f(10, 10), 50); for (int i = 0; i < 3; i++) { enemies[i].Load(); } m_BGTexture.loadFromFile("bg.jpg"); m_BGSprite.setTexture(m_BGTexture); m_BGSprite.setPosition(0, 0); m_BGMapSprite.setTexture(m_BGTexture); m_BGMapSprite.setColor(sf::Color(255, 255, 255, 100)); //Flock flock; //vector<sf::CircleShape> shapes; for (int i = 0; i < 25; i++) //Number of boids is hardcoded for testing pusposes. { //Boid b(rand() % window_width, rand() % window_height); //Starts the boid with a random position in the window. Boid b((SCREEN_WIDTH * 3) / 2, (SCREEN_HEIGHT * 3) / 2 - 150); //Starts all boids in the center of the screen sf::CircleShape shape(boidsSize, 3); //Shape with a radius of 10 and 3 points (Making it a triangle) //Changing the Visual Properties of the shape //shape.setPosition(b.location.x, b.location.y); //Sets position of shape to random location that boid was set to. shape.setPosition(SCREEN_WIDTH, SCREEN_HEIGHT); //Testing purposes, starts all shapes in the center of screen. shape.setOutlineColor(sf::Color(0, 255, 0)); shape.setFillColor(sf::Color::Green); shape.setOutlineColor(sf::Color::White); shape.setOutlineThickness(1); shape.setRadius(boidsSize); //Adding the boid to the flock and adding the shapes to the vector<sf::CircleShape> flock.addBoid(b); shapes.push_back(shape); } Camera::GetInstance()->Init(SCREEN_WIDTH, SCREEN_HEIGHT); MiniMap::GetInstance()->Init(SCREEN_WIDTH, SCREEN_HEIGHT); AsteroidManager::GetInstance()->Init(player->GetPosition()); PowerUpManager::GetInstance()->Init(); }
//////// Spawn new enemies into the game //////// //////// based on game time and wave state //////// void AI::spawn(const float dt) { // Decrease our spwanTime counter based on game time // If it reaches 0 spawn a new enemy and then reset spawnTime if (spawnState != BOSS) { spawnTime -= dt; waveTime -= dt; } if (spawnTime <= 0.0f) { switch (spawnState) { case WAVE1: { ENEMIES.add(Enemy(D3DXVECTOR3(0.0f, 50.0f, 0.0f), OT_ENEMY1)); // TODO: Modify for game width and height spawnTime = float(rand() % ENEMY_SPAWN_RATE); if (waveTime <= 0.0f) { spawnState = WAVE2; waveTime = 50.0f; } } break; case WAVE2: { float x = float(rand() % 50) - 25.0f; // TODO: Modify for game width constant ENEMIES.add(Enemy(D3DXVECTOR3(x, 50.0f, 0.0f), OT_ENEMY2)); // TODO: Modify for game width and height spawnTime = float(rand() % ENEMY_SPAWN_RATE); if (waveTime <= 0.0f) { spawnState = WAVE3; waveTime = 100.0f; } } break; case WAVE3: { ENEMIES.add(Enemy(D3DXVECTOR3(0.0f, 50.0f, 0.0f), OT_ENEMY3)); // TODO: Modify for game width and height spawnTime = float(rand() % ENEMY_SPAWN_RATE); if (waveTime <= 0.0f) { spawnState = BOSS; spawnTime = 0.0f; } } break; case BOSS: { ENEMIES.add(Enemy(D3DXVECTOR3(0.0f, 50.0f, 0.0f), OT_ENEMYBOSS)); // TODO: Modify for game width and height spawnTime = 10.0f; } break; } } }
void GameState::makeEnemy(float x, float y, int health) { for (unsigned int i = 0; i < enemies.size(); ++i) { if (!enemies[i].isActive) // Find an empty spot in our vector { enemies[i] = Enemy(x, y, health); return; } } // if there is no empty spot, generate a new bullet into the vector enemies.push_back(Enemy(x, y, health)); }
//Spawns enemies void GameLogic::createEnemies() { enemies.clear(); enemyCount = BASE_ENEMY_COUNT + (waveCount - 1) * BONUS_ENEMY_PER_WAVE ; for (int i = 0; i < enemyCount; ++i) { int enemyDiff = rand() % 100; std::string text; if (enemyDiff < hardChance) { text = vocabulary->getRandomWord(Difficulty::Hard); }else if (enemyDiff < mediumChance + hardChance) { text = vocabulary->getRandomWord(Difficulty::Medium); } else text = vocabulary->getRandomWord(Difficulty::Easy); Position p(rand() % 100,-1*( 5 + i * currentSpawnRange)); enemies.push_back(Enemy(text, p, playerPosition, 10,20)); remainingEnemyCount++; } int easy_t = easyChance; easyChance *= 0.9f; mediumChance += 100 / (easy_t - easyChance) * 0.7f; hardChance = 100 - mediumChance - easyChance; currentSpawnRange *= 0.95f; }
void GameWorld::NewEnemy() { int i; int j; if(enemies.size()<h*w) { if(enemies.size()==0) { i=0; j=0; } else { if(enemies.back().GetX()<w-1) { i=enemies.back().GetX()+1; j=enemies.back().GetY(); } else { i=0; j=enemies.back().GetY()+1; } } } enemies.push_back( Enemy( i, j ) ); table[j][i]=enemies.back().GetSymbol(); };
void Shooting::popUp(){ for (int i=0; i<ENEMY_NUM; i++){ if( enemyDatas[i].popUpTime == gameClock){ enemys.push_back( Enemy( enemyDatas[i])); } } }
void GameStatePlay::onDeactivate() { MapArea::areaControl.cleanup(); for(int i = 0; i < Entity::entityList.size(); i++) { if(!Entity::entityList[i]) continue; Entity::entityList[i]->cleanup(); } Entity::entityList.clear(); for(int i = 0; i < debugMessages.size(); i++) { delete debugMessages[i]; debugMessages[i] = NULL; } player = Player(); enemy = Enemy(); enemy2 = Enemy(); debugMessages.clear(); }
void spawnEnemy() { int x = player->x + RES_X + 50; int y = 100 + rand()%200; int vx = - 1 - rand()%3; int vy = rand()%5 - 2; enemies.push_back(Enemy(x,y,vx,vy)); }
void addEnemy() { int randYPos = 80; const int enemyHeight = 25; const int enemyWidth = 25; const int enemyMovementSpeed = 5; const int numbOfEnemy = 8; for (int i = 0; i < numbOfEnemy; i++) { if (rand() % 2 == 0) { enemies.push_back(Enemy({ rand() % 750 + 1, randYPos, enemyHeight, enemyWidth }, enemyMovementSpeed, Direction::LEFT)); } else { enemies.push_back(Enemy({ rand() % 750 + 1, randYPos, enemyHeight, enemyWidth }, enemyMovementSpeed, Direction::RIGHT)); } randYPos += 80; } }
World::World() { std::vector<char> newVect; //создаём вектор типа char for(int i=0; i<w; ++i) { newVect.push_back('.'); //С помощью цикла добавляем в конец вектора кл. } for(int i=0; i<h; ++i) { m_table.push_back(newVect); } for(int g=0; g<15; ++g) { m_enemy.push_back( Enemy() ); } }
void EmotivShooterScreen::LoadContent() { if(!font.loadFromFile("../Fonts/Dead Kansas.ttf")) { // error... } text.setString("Game screen"); text.setColor(sf::Color::Green); text.setFont(font); Background.setSize(sf::Vector2f(sf::VideoMode::getDesktopMode().width, sf::VideoMode::getDesktopMode().height)); Background.setPosition(0, 0); bgTex.loadFromFile("Sprites/Background.png"); for(unsigned i = 0; i < NumE; i++) { enemy.push_back(Enemy()); bullet.push_back(Bullet()); enemyFire.push_back(EnemyFire()); } enemySpeed = 0.3f; fireRate = 5.0f; bossFireRate = 3.0f; delayTime = 0; bossDelayTime = 0; score = 0; killCount = 0; timesHit = 0; minEnemies = 1; paused = false; GameStart = true; GameOver = false; collision = false; enemyHit = false; victory = false; mouseClicked = false; globalVariables.SetGameStart(true); ///////////////////////////////////////////// // Emotiv // frustrationScore = 0; excitementScore = 0; meditationScore = 0; boredomScore = 0; updateRate = 0; }
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { SetOutApplicationLogValidFlag(FALSE);//Log.txtを生成しないように設定 ChangeWindowMode(TRUE);//非全画面にセット SetGraphMode(SCREEN_WIDTH, SCREEN_HEIGHT, 32);//画面サイズ指定 if (DxLib_Init() == 1) { return -1; }//初期化に失敗時にエラーを吐かせて終了 SetDrawScreen(DX_SCREEN_BACK);//描画先を裏画面に fontHandle = CreateFontToHandle("Segoe UI", 20, 5, DX_FONTTYPE_ANTIALIASING_4X4);//フォントを読み込み std::vector<Enemy> vec; while (ProcessMessage() == 0) { ClearDrawScreen();//裏画面消す GetMousePoint(&mouseX, &mouseY); //マウス座標更新 keyUpdate();//(自作関数)キー更新 // Zキーが押されたらランダムな座標に敵を生成 if (keyState[KEY_INPUT_Z] == 1) { vec.emplace_back(Enemy(GetRand(SCREEN_WIDTH), GetRand(SCREEN_HEIGHT))); // 敵をインスタンス化 } // 画面外の敵を削除 auto iter = vec.begin(); while (iter != vec.end()) { if (iter->x < 0 || iter->x > SCREEN_WIDTH || iter->y < 0 || iter->y > SCREEN_HEIGHT) { //画面外に出ているか確認 iter = vec.erase(iter); } else { iter++; } } for (auto i = vec.begin(); i < vec.end(); i++) { i->update(); } for (auto i = vec.begin(); i < vec.end(); i++) { i->draw(); } DrawFormatStringToHandle(20, 20, GetColor(255, 255, 255), fontHandle, "Zキーで敵を生成 敵の数:%d", vec.size()); ScreenFlip();//裏画面を表画面にコピー } DxLib_End(); return 0; }
void spawnEnemies() { // Remove any remaining enemies despawnEnemies(); // Generate new enemies enemies.push_back(Enemy(enemyAnim, round)); enemies.push_back(Enemy(enemyAnim, round)); enemies.push_back(Enemy(enemyAnim, round)); enemies.push_back(Enemy(enemyAnim, round)); enemies.push_back(Enemy(enemyAnim, round)); std::list<Enemy>::iterator cur = enemies.begin(); cur->warp(135,75); ++cur; cur->warp(165,165); ++cur; cur->warp(225,195); ++cur; cur->warp(195,195); ++cur; cur->warp(45,45); ++cur; }
void ObjectManager::create(vector<Enemy> &enemies, const string& filename){ vector<vector<string>> status; FileStream::loadCSV(filename, status); //int型に変換 vector<vector<int>> d; for(unsigned int i = 0; i < status.size(); ++i){ vector<int> inner; for(unsigned int j = 1; j < status[i].size(); ++j){ inner.push_back( stoi(status[i][j]) ); } d.push_back(inner); enemies.push_back( Enemy(status[i][0], d[i][0], d[i][1], d[i][2], d[i][3], d[i][4], d[i][5], d[i][6], d[i][7], d[i][8]) ); } }
// Method parameter is required to be registered by glutTimerFunc() void spawnEnemy(int unusedValue) { // randomize the delay between enemies, with the base from the constant enemyRespawnDelay float delay = enemyRespawnDelay + ((rand() % 6 * 200) - 500); if (!toggleBoss) { Enemy enemy = Enemy(); enemy.position = Vec3Df(4, (rand() % 10 * 0.2 - 0.4), 0); enemy.movementDirection = Vec3Df(-1, 0, 0); enemies.push_back(enemy); // Repeat this glutTimerFunc(delay, spawnEnemy, 0); } }
size_t EnemyManager::loadEnemyPrototype(const std::string& type_id) { for (size_t i = 0; i < prototypes.size(); i++) { if (prototypes[i].type == type_id) { return i; } } Enemy e = Enemy(); e.eb = new BehaviorStandard(&e); e.stats.load(type_id); e.type = type_id; if (e.stats.animations == "") Utils::logError("EnemyManager: No animation file specified for entity: %s", type_id.c_str()); loadAnimations(&e); e.loadSounds(); // set cooldown_hit to duration of hit animation if undefined if (e.stats.cooldown_hit == -1) { Animation *hit_anim = e.animationSet->getAnimation("hit"); if (hit_anim) { e.stats.cooldown_hit = hit_anim->getDuration(); delete hit_anim; } else { e.stats.cooldown_hit = 0; } } prototypes.push_back(e); size_t prototype = prototypes.size() - 1; for (size_t i = 0; i < e.stats.powers_ai.size(); i++) { int power_index = e.stats.powers_ai[i].id; const std::string& spawn_type = powers->powers[power_index].spawn_type; if (power_index != 0 && spawn_type != "" && spawn_type != "untransform") { std::vector<Enemy_Level> spawn_enemies = enemyg->getEnemiesInCategory(spawn_type); for (size_t j = 0; j < spawn_enemies.size(); j++) { loadEnemyPrototype(spawn_enemies[j].type); } } } return prototype; }
void Dodger::new_level() { level = levels[level_number - 1]; score_panel.set_level(level_number); load_screen(level.data); enemies.clear(); for (int i = 0; i < Level::num_enemies; i++) { if (level.enemies[i]) { enemies.push_back(Enemy(i, level.speed)); } } new_life(); }
Column::Column(std::vector<Image> &sprites, Uint x, Uint nbEnemies) : _direction (RIGHT) , _x (x) , _y (0) , _lastShoot (SDL_GetTicks()) , _shootCooldown ((rand() % 5 + 2) * 1000) // Entre 2 et 7 secondes { for (Uint i = 0; i < nbEnemies; i++) { _enemies.push_back(Enemy(sprites[rand() % sprites.size()], 1, 1)); } _firstTick = SDL_GetTicks(); _timeLeft = 0; // Faites pas gaffe à cette ligne, elle récupère la plus grande largeur des enemies ;) _width = std::max_element(_enemies.begin(), _enemies.end(), [] (const Enemy &a, const Enemy &b) -> bool { return a.w() < b.w(); } )->w(); }
coment::Entity EntityFactory::createEnemyShip(coment::World& world, std::string name, Sprite::Layer layer, float health, float x, float y, float vx, float vy, float boundsRadius) { coment::Entity entity = world.createEntity(); world.addComponent<Position>(entity, Position(x, y)); Sprite sprite; sprite.name = name; sprite.layer = layer; world.addComponent(entity, sprite); world.addComponent(entity, Health(health)); world.addComponent(entity, Enemy()); world.addComponent(entity, Velocity(vx, vy)); world.addComponent(entity, Bounds(boundsRadius)); world.addGroup(entity, "ENEMY_SHIPS"); return entity; }
void EmotivShooterScreen::Update(sf::RenderWindow &Window, sf::Clock clock) { if(updateRate >= 5) { cout << "update" << endl; GetEmotiv(); updateRate = 0; } else updateRate += 1; fireRate = 5.0f - (frustrationScore * 2); enemySpeed = 0.01f + boredomScore; bossFireRate = 1.0f + (excitementScore); mousePos = (sf::Vector2<float>)sf::Mouse::getPosition(Window); ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// sf::FloatRect playerBB = player.getGlobalBounds(); sf::FloatRect bossBB = boss.getGlobalBounds(); if(victory == false) { if (paused == false) { delayTime++; bossDelayTime++; timer = clock2.getElapsedTime(); ////////////////////////////////////////////////////////////////////////// for(int e =0; e < enemy.size(); e++) { enemy[e].Update(); sf::FloatRect enemyBB = enemy[e].getGlobalBounds(); if(enemy[e].GetPosition().x < -50) { enemy[e] = enemy[enemy.size() - 1]; enemy.pop_back(); if(enemy.size() < 30) { enemy.push_back(Enemy()); enemy.push_back(Enemy()); enemy[enemy.size() - 1].SetPosition(sf::Vector2f(sf::VideoMode::getDesktopMode().width + rand()%301, rand() % 1000)); } else enemy.push_back(Enemy()); enemy[enemy.size() - 1].SetPosition(sf::Vector2f(sf::VideoMode::getDesktopMode().width + rand()%301, rand() % 1000)); } else { enemy[e].ChangeVelocity(sf::Vector2f(-enemySpeed, 0.0f)); } if(enemy[e].getPosition().y > 500) { enemy[e].ChangeVelocity(sf::Vector2f(0.0f, -enemySpeed)); } if(enemy[e].getPosition().y < 500) { enemy[e].ChangeVelocity(sf::Vector2f(0.0f, enemySpeed)); } if(enemy[e].GetHit() == true) // if enemy is hit delete enemy { enemy[e] = enemy[enemy.size() - 1]; enemy.pop_back(); killCount += 1; //increases kill count, used for research for (int i = 0; i < 1; i++) { enemy.push_back(Enemy()); enemy[enemy.size() - 1].SetPosition(sf::Vector2f(sf::VideoMode::getDesktopMode().width + rand()%301, rand() % 1000)); } } /////////////////////////////////////////////////////////////////////////////////////////////////////// // Player / Bullet Collision // if(boss.GetActive() == false) { if(playerBB.intersects(enemyBB))// Player/Enemy Collision { enemy[e].SetHit(true); collision = true; } else { //collision = false; player.SetInvincible(false); } } for(int b =0; b < bullet.size(); b++) { sf::FloatRect bulletBB = bullet[b].getGlobalBounds(); if(boss.GetActive() == false) { if(bulletBB.intersects(enemyBB)) // Bullet/Enemy colision { enemy[e].SetHit(true); score += 100; bullet[b] = bullet[bullet.size() - 1]; bullet.pop_back(); } } if(bulletBB.intersects(bossBB)) // Bullet/Boss colision { boss.SetHit(true); bullet[b] = bullet[bullet.size() - 1]; bullet.pop_back(); } else { if(boss.GetActive() == true) { boss.SetInvincible(false); } } }// end bullet loop }// enemy loop end ///////////////////////////////////////////////////////////////////////////////////////////////////// // Boss Functions // if(boss.GetHit() == true) // if boss is hit lower its health { if(boss.GetInvincible() == false) { if(boss.GetHealth() <= 0) { if (GameOver == false) { score += 5000; GameOver = true; } victory = true; } else { score += 1; boss.ChangeHealth(-1); boss.SetHit(false); boss.SetInvincible(true); } } } if(boss.GetAttack() == true) { for(int f = 0; f < enemyFire.size(); f++) { sf::FloatRect enemyFireBB = enemyFire[f].getGlobalBounds(); enemyFire[f].Update(); if(enemyFire[f].getPosition().x < -50) // Bullet clean up { enemyFire[f] = enemyFire[enemyFire.size() - 1]; enemyFire.pop_back(); } if(bossDelayTime >= bossFireRate) { EnemyFire temp(&boss); sf::Vector2f pos = sf::Vector2f(boss.GetPosition().x + 50, boss.GetPosition().y + (sf::VideoMode::getDesktopMode().height / 2) + (5 + rand()% 90)); temp.SetPosition(pos); enemyFire.push_back(temp); bossDelayTime = 0; } if(playerBB.intersects(enemyFireBB))// Player/EnemyFire Collision { collision = true; enemyFire[f] = enemyFire[enemyFire.size() - 1]; enemyFire.pop_back(); } else { //collision = false; player.SetInvincible(false); } } } ////////////////////////////////////////////////////////////////////////////////////////////////////// // Player functions // if(player.GetAttack() == true) { if(delayTime >= fireRate) { Bullet temp(&player); sf::Vector2f pos = sf::Vector2f(player.GetPosition().x + 70.0f, player.GetPosition().y + 30); temp.SetPosition(pos); bullet.push_back(temp); delayTime = 0; } } for(int b = 0; b < bullet.size(); b++) { bullet[b].Update(); if(bullet[b].getPosition().x > sf::VideoMode::getDesktopMode().width) // Bullet clean up { bullet[b] = bullet[bullet.size() - 1]; bullet.pop_back(); } } if(collision == true) { if(player.GetInvincible() == false) { timesHit += 1; // counts how many times the player was hit, used for research if (score <= 0) { score = 0; } else { score -= 500; player.SetInvincible(true); collision = false; } } } //////////////////////////////////////////////////////////////////// // set globals // globalVariables.SetScore(score); globalVariables.SetEnemiesKilled(killCount); globalVariables.SetTimesHit(timesHit); globalVariables.SetBossHealth(boss.GetHealth()); ///////////////////////////////////////////////////////////////////////////////////////////////////////// // update calls // player.Update(); if(timer.asSeconds() >= boss.GetSpawnTime()) { boss.Update(); } }// paused loop end } }
void World::Init() { // Create new player player = Player(); // Create new enemies enemy1 = Enemy(); enemy2 = Enemy(); // Create rooms cell = Place("cell", "You're a prisoner of the militia and you wake up in the middle of the night in your cell."); corridor = Place("corridor", "You're in a corridor with a lot of cells and prisoners sleeping on them. You better escape in silence."); controlRoom = Place("control room", "You're in the control room, this is the place where the guards control the prisoners and pass their free time."); armory = Place("armory", "You're in the armory, this room is have a lot of guns but unfortunately you can't find any munition on them."); corridorUp = Place("corridor", "You're in the last corridor of the prison, you have the escape in front of you."); exit = Place("outside", "Congratulations, you escaped the prison! A woman is waiting you with a car, enjoy your life."); // Create items note = Item("note", "I opened your cell, run, get out of here before they discover our plan!", true); paper = Item("paper", "The exit is upstairs but there is an armed guy there. You better go to your west before and arm yourself better. Take care, there's a soldier too but he only has a knife.", true); knife = Item("knife", "Be fast or die. You can throw me to an enemy but you can miss the hit.", true); gun = Item("gun", "Be fast or die.", true); vault = Item("vault", "Put your code (XX-XX-XX) to open the vault. Clue: 01-01-02-03-05-08-...", false, true, false, true, &paper, true, "13-21-34"); vault2 = Item("vault", "Put your code (XXXX) to open the vault. Clue: 3.1415...", false, true, false, true, &gun, true, "9265"); knifeEnemy = Item("knife", "Be fast or die. You can throw me to an enemy but you can miss the hit.", true); gunEnemy = Item("gun", "Be fast or die.", true); gun.putInsideOfAnItem(&vault2); paper.putInsideOfAnItem(&vault); // Filling rooms cell.setDirection("north", "a door", &corridor, true, ""); corridor.setDirection("south", "a door", &cell, true, ""); corridor.setDirection("north", "a door", &controlRoom, true, ""); controlRoom.setDirection("south", "a door", &corridor, true, ""); controlRoom.setDirection("up", "stairs", &corridorUp, true, ""); corridorUp.setDirection("down", "stairs", &controlRoom, true, ""); controlRoom.setDirection("west", "a door", &armory, true, ""); armory.setDirection("east", "a door", &controlRoom, true, ""); corridorUp.setDirection("up", "stairs", &exit, true, ""); enemy1.setItemEquiped(&knifeEnemy); enemy2.setItemEquiped(&gunEnemy); cell.addItem(¬e); controlRoom.addItem(&knife); controlRoom.addItem(&vault); armory.addItem(&vault2); armory.addEnemy(&enemy1); corridorUp.addEnemy(&enemy2); // player.setActualPlace(&cell); timeWhenYouEnter = 0; enemyPresentInTheRoom = false; player.getActualPlace()->readPlace(); }
int main() { if (!glfwInit()) { std::cout << "GLFW Couldn't initialize! \n"; exit(1); } glfwOpenWindow(Width,Height,0,0,0,0,0,0,GLFW_WINDOW); glfwSetWindowTitle("Shazbot Pong"); glViewport(0,0,Width,Height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0,Width,Height,0,0,1); glMatrixMode(GL_MODELVIEW); glClearColor(0,0,1,1); NMenu::CMenu Menu(Width , Height); CScore score; Npad::SetScreen(Width , Height); Nball::SetScreen(Width, Height); Nball::Ball ball; Npad::SetCollisions(&ball); ball.SetScore(&score); Npad::Paddle Player(Height - 20 , 60); Npad::Paddle Enemy(20 , 60); Player.SetControl(); float LastTime = glfwGetTime(); // (for deltatime) bool EscPressed = false; // thanks naelstrof bool EscReleased = true; while (true) { float DeltaTime = glfwGetTime() - LastTime; // Deltatime init LastTime = glfwGetTime(); // update for deltatime if (glfwGetKey(GLFW_KEY_ESC) && EscReleased && !EscPressed) { EscReleased = false; EscPressed = true; } if (EscPressed && !EscReleased) // if they press escape { if (Menu.State == "Playing") //if the state is playing { Menu.State = "Paused"; // change it to paused std::cout <<"\n\n-----PAUSED-----\n\n"; } else if (Menu.State == "Paused") // else if the state is paused Menu.State = "Playing"; // change it to playing EscPressed = false; } if (!glfwGetKey(GLFW_KEY_ESC)) { EscPressed = false; EscReleased = true; } if (!glfwGetWindowParam(GLFW_OPENED)) { std::cout << "Window was closed! Exiting...\n"; exit(0); } if (Menu.State == "Menu") { Menu.Update(); if (Menu.State == "Playing") { NSound::PlaySound("sounds/song.ogg" , true); } } if (Menu.State == "Playing") // if the state is playing update everything { ball.Update (DeltaTime); Player.Update (DeltaTime); // update everything Enemy.Update (DeltaTime); } glClear(GL_COLOR_BUFFER_BIT); if (Menu.State == "Menu") { Menu.Draw(); } if (Menu.State == "Playing" || Menu.State == "Paused") { Menu.BgDraw(); ball.Draw(); Player.Draw(); // draws Enemy.Draw(); } glfwSwapBuffers(); } NSound::sound->drop(); return 0; }
void Room::addEnemy(int lvl) { enemys.push_back(Enemy(lvl)); }
int wmain() { #pragma region Other Stuff // Hide cursor SDL_ShowCursor(0); gameState = PLAY; //The window we'll be rendering to SDL_Window* window = NULL; //The surface contained by the window SDL_Surface* screenSurface = NULL; //SDL Renderer r = Renderer(SCREEN_WIDTH, SCREEN_HEIGHT); AudioManager::GetInstance()->Init(); AudioManager::GetInstance()->LoadMedia(); AudioManager::GetInstance()->PlaySoundEffect(1); SDL_Point ePos; ePos.x = 100; ePos.y = 100; Enemy en = Enemy(200, 200, 62 / 3, 77 / 3, r, 0); Enemy en1 = Enemy(400, 100, 62 / 3, 77 / 3, r, 0); Level lvl = Level(r); // MENU SDL_Point bPos; bPos.x = 0; bPos.y = 0; Menu background = Menu(bPos, SCREEN_WIDTH, SCREEN_HEIGHT, r, 0, "background"); SDL_Point pPos; pPos.x = SCREEN_WIDTH / 3; pPos.y = SCREEN_HEIGHT / 4; Menu playBtn = Menu(pPos, 263, 44, r, 0, "playBtn"); SDL_Point e2Pos; e2Pos.x = (SCREEN_WIDTH / 2) - 50; e2Pos.y = (SCREEN_HEIGHT / 2) - 20; Menu exitBtn = Menu(e2Pos, 111, 45, r, 0, "exitBtn"); // Player SDL_Point playerPos; playerPos.x = SCREEN_WIDTH / 2 - 25; playerPos.y = SCREEN_HEIGHT / 2 - 10; Player player = Player(playerPos, 44, 32, r, 0); // THREADS \\ // Run the thread //Player * p = (); // pointer to object void * pv = &player; // pointer to void Player * p2 = static_cast<Player *>(pv); // pointer to the same object int data; SDL_Thread* threadID = SDL_CreateThread(renderThreadFunction, "RenderThread", (void*)p2); // THREADS \\ #pragma endregion #pragma region SDL STUFF bool quit = false; float oldTime = SDL_GetTicks(); float delta = 0.f; float newTime = 0.f; SDL_Event e; fpsTimer.start(); while (!quit) { while (SDL_PollEvent(&e) != 0) { InputManager::GetInstance()->UpdatePolledEvents(e); } if (e.button.button == SDL_SCANCODE_ESCAPE) quit = true; // THREADS \\ // THREADS \\ //controls gameState added in game menu feature r.Begin(); switch (gameState) { case MENU: //detect button click if (e.type == SDL_MOUSEBUTTONDOWN) { //If the left mouse button was pressed if (e.button.button == SDL_BUTTON_LEFT) { //Get the mouse offsets int mouse_x = e.button.x; int mouse_y = e.button.y; if (playBtn.IsClicked(mouse_x, mouse_y)) { gameState = PLAY; } else if (exitBtn.IsClicked(mouse_x, mouse_y)) { quit = true; } } }// End detect button click background.Draw(r); playBtn.Draw(r); exitBtn.Draw(r); break; case PLAY: newTime = SDL_GetTicks(); delta = newTime - oldTime; oldTime = newTime; en.Update(delta); lvl.Draw(r); en.Draw(r); en1.Update(delta); en1.Draw(r); en.Draw(r); player.Update(r, delta); player.Draw(r); //calculateFPS(); break; } InputManager::GetInstance()->UpdateState(); r.End(); } //Remove timer in case the call back was not called SDL_WaitThread(threadID, NULL); return EXIT_SUCCESS; }
void EnemyManager::update(float delta) { if(enemies.empty()) { ammo_manager->getPlanet()->increaseRound(); while( enemies.size() < (unsigned)(4+ammo_manager->getPlanet()->getRound()) ) { float spawn_angle = ( (float)rand()/(float)RAND_MAX ) * 360.0f; for(auto i = enemies.begin(); i != enemies.end();) { if( (i->spawned_angle+10 > spawn_angle) && (i->spawned_angle-10 < spawn_angle) ) { spawn_angle += 15; } else { i++; } } float x = 400 + (500 * cosf(spawn_angle * PI / 180.0f)); float y = 300 + (500 * sinf(spawn_angle * PI / 180.0f)); float dx = 400 - x; float dy = 300 - y; float angle = atan2(dy, dx); int rndm_shoottime = 1 + (rand() % 5); int health = 80; int lvl = 1; if(ammo_manager->getPlanet()->getRound() >= 2) { lvl += (rand() % 2); if(lvl == 2) health += 20; } enemies.push_back(Enemy(x, y, angle, spawn_angle, health, 2, rndm_shoottime, lvl, enemies.size())); } return; } else { for(auto i = enemies.begin(); i != enemies.end();) { // is dead if(i->life <= 0) { energies.push_back(Energy(i->x, i->y, 5)); i = enemies.erase(i); } else { // enemies & player shots enemy_sprite.setPosition(i->x, i->y); enemy_sprite.setRotation((i->angle * 180.0f / PI) + 90.0f); sf::Rect<float> bounds = enemy_sprite.getGlobalBounds(); for(auto j = ammo_manager->getShots()->begin(); j != ammo_manager->getShots()->end();) { if(bounds.contains(j->x, j->y) && (j->id != i->id)) { i->life -= j->dmg; j = ammo_manager->getShots()->erase(j); } else { j++; } } // fly around sf::Vector2f dir( 400 - i->x, 300 - i->y ); float length = sqrtf( powf(dir.x, 2.0f) + powf(dir.y, 2.0f) ); if(i->lvl == 1 && length > 200.0f) { i->x += delta*150.0f*cosf(i->angle); i->y += delta*150.0f*sinf(i->angle); } else if(i->lvl >= 2 && length > 250.0f) { i->x += delta*150.0f*cosf(i->angle); i->y += delta*150.0f*sinf(i->angle); } // shoot if(i->time.asSeconds() > i->shoot_time) { i->time = sf::Time::Zero; ammo_manager->addShot(i->x, i->y, i->angle * 180.0f / PI, i->dmg, i->id); } else { i->time += i->clock.restart(); } i++; } } } }
void MainWindow::processData() { int cnt = 0; while (m_udp.hasPendingDatagrams()) { QByteArray datagram; datagram.resize(m_udp.pendingDatagramSize()); QHostAddress sender; quint16 senderPort; m_udp.readDatagram(datagram.data(), datagram.size(), &sender, &senderPort); quint32 size = *(quint32*)datagram.data(); QByteArray data = qUncompress(datagram); char *udpData = (char*)data.data(); switch (udpData[0]) { case TYPE_SENSORS: processSensorsData((TUdpDataSENSORS*)udpData); break; case TYPE_PLAYER: { TUdpDataPLAYER *d = (TUdpDataPLAYER*)udpData; for (int i = 0; i < 8; i++) { float x = d->frustumPoints[i][0]; float y = d->frustumPoints[i][1]; float z = d->frustumPoints[i][2]; m_pdaData.frustum[i] = QVector3D(x, y, z); } QByteArray b(udpData + sizeof(TUdpDataPLAYER), data.size()); QDataStream ds(b); ds.setByteOrder(QDataStream::LittleEndian); ds.setFloatingPointPrecision(QDataStream::SinglePrecision); m_pdaData.playerPoints.clear(); for (int i = 0; i < d->playerSize; i++) { int16_t latU, lonU; ds >> latU >> lonU; m_pdaData.playerPoints.append(latlonUtoVector(latU, lonU)); } ui->lbInfo->setText(QString("Points: %1\nLives: %2").arg(d->points).arg(d->lives)); ui->lbInfo_2->setText(QString("Time left: %1:%2").arg(d->timeLeft / 60).arg((int)(d->timeLeft % 60), 2, 10, QChar('0'))); break; } case TYPE_STAB: m_pdaData.sphereEnabled = udpData[1]; break; case TYPE_ENEMY: { TUdpDataENEMY *d = (TUdpDataENEMY*)udpData; QByteArray b(udpData + sizeof(TUdpDataENEMY), data.size()); QDataStream ds(b); ds.setByteOrder(QDataStream::LittleEndian); ds.setFloatingPointPrecision(QDataStream::SinglePrecision); while (m_pdaData.enemies.size() < d->idx + 1) { m_pdaData.enemies.append(Enemy()); } m_pdaData.enemies[d->idx].points.clear(); for (int i = 0; i < d->enemiesSize; i++) { int16_t latU, lonU; ds >> latU >> lonU; m_pdaData.enemies[d->idx].points.push_back(latlonUtoVector(latU, lonU)); } break; } case TYPE_FOOD: { TUdpDataFOOD *d = (TUdpDataFOOD*)udpData; QByteArray b(udpData + sizeof(TUdpDataFOOD), data.size()); QDataStream ds(b); ds.setByteOrder(QDataStream::LittleEndian); ds.setFloatingPointPrecision(QDataStream::SinglePrecision); m_pdaData.foodPoints.clear(); for (int i = 0; i < d->foodSize; i++) { int16_t latU, lonU; ds >> latU >> lonU; m_pdaData.foodPoints.append(latlonUtoVector(latU, lonU)); } break; } } cnt++; } }
void gameScreen::setup(){ //boundaryMap.loadImage("stage/8BitITP.svg"); gameOver = false; bgGame.loadImage("stage/8BitITP-blank-1.jpg"); score = 0; food[0].loadImage("food/burger.png"); food[1].loadImage("food/pizza.png"); score =0; foodpos.resize(12); foodpos[0].set(630,275); foodpos[1].set(764,338); foodpos[2].set(582,454); foodpos[3].set(735,450); foodpos[4].set(775,545); foodpos[5].set(900,310); foodpos[6].set(900,460); foodpos[7].set(715,125); foodpos[8].set(269,190); foodpos[9].set(40,190); foodpos[10].set(150,85); foodpos[11].set(900,200); furniture.resize(42); furniture[0].setup("furniture/m-chair-1.png", 660,235, 25, 25); furniture[1].setup("furniture/m-chair-2.png", 595,235, 25, 25); furniture[2].setup("furniture/m-chair-3.png", 595,300, 25, 25); furniture[3].setup("furniture/round-table.png", 610, 250, 65, 63); furniture[4].setup("furniture/m-chair-2.png", 720,300, 25, 25); furniture[5].setup("furniture/m-chair-3.png", 725,360, 25, 25); furniture[6].setup("furniture/m-chair-4.png", 785,360, 25, 25); furniture[7].setup("furniture/round-table.png", 740,315, 65, 63); furniture[8].setup("furniture/m-chair-2.png", 540,415, 25, 25); furniture[9].setup("furniture/m-chair-4.png", 610,475, 25, 25); furniture[10].setup("furniture/m-chair-1.png", 610,415, 25,25); furniture[11].setup("furniture/round-table.png", 560,430, 65, 63); furniture[12].setup("furniture/m-chair-2.png", 720,500, 25, 25); furniture[13].setup("furniture/m-chair-4.png", 700,630, 25, 25); furniture[14].setup("furniture/m-chair-1.png", 800,500, 25, 25); furniture[15].setup("furniture/round-table.png", 750,515, 65, 63); furniture[16].setup("furniture/o-chair.png", 890,190, 35, 30); furniture[17].setup("furniture/b-table.png", 860,220, 95, 33); furniture[18].setup("furniture/o-chair.png", 890,270, 35, 30); furniture[19].setup("furniture/b-table.png", 860,300, 95, 33); furniture[20].setup("furniture/o-chair.png", 890,350, 35, 30); furniture[21].setup("furniture/b-table.png", 860,380, 95, 33); furniture[22].setup("furniture/o-chair.png", 890,430, 35, 30); furniture[23].setup("furniture/b-table.png", 860,460, 95, 33); furniture[24].setup("furniture/printer.png", 710,431, 60, 50); furniture[25].setup("furniture/plant-1.png", 935,150, 45, 30); furniture[26].setup("furniture/plant-2.png", 945,180, 35, 30); furniture[27].setup("furniture/plant-1.png", 935,265, 45, 30); furniture[28].setup("furniture/plant-2.png", 945,355, 35, 30); furniture[29].setup("furniture/plant-1.png", 935,440, 45, 30); furniture[30].setup("furniture/plant-2.png", 925,500, 35, 30); furniture[31].setup("furniture/plant-3.png", 920,550, 48, 60); furniture[32].setup("furniture/o-chair.png", 700,90, 35, 30); furniture[33].setup("furniture/matt-desk.png", 643,120, 140, 35); furniture[34].setup("furniture/matt-plant.png", 710,147, 76, 35); furniture[35].setup("furniture/garbage.png", 380,485, 25, 22); furniture[36].setup("furniture/garbage.png", 50,65, 25, 22); furniture[37].setup("furniture/green-bench.png", 100,65, 115, 33); furniture[38].setup("furniture/o-chair.png", 30,160, 35, 30); furniture[39].setup("furniture/b-table.png", 0,190, 95, 33); furniture[40].setup("furniture/wood-bench.png", 220,185, 138, 35); furniture[41].setup("furniture/tiny-table.png", 380,58, 45, 42); /* furniture.resize(5); furniture[0].setup("furniture/garbage.png", 100, 700, 50, 50); furniture[1].setup("furniture/round-table.png", 605, 436, 50, 50); furniture[2].setup("furniture/round-table.png", 605, 282, 50, 50); furniture[3].setup("furniture/round-table.png", 760, 278, 50, 50); furniture[4].setup("furniture/round-table.png", 771, 449, 50, 50); */ // player = Player(); for(int i=0; i<NUM_OF_ENEMIES;i++){ Enemy e= Enemy(ofVec2f(ofRandom(500, 800), ofRandom(100,200))); enemies.push_back(e); } }
unsigned int XP_value; int mv_energy; const char *name; const char *descriptor; bool isActive; int maxHP; int curHP; int MP; int STR; int TOU; int ATT; int DEF; int MAG; int WIL; }; static Enemy EnemyList[] = { //lvl sym col sight hp mp str tou att def mag wil mv xp name Enemy(1, 'o', COL_BLUE, 6, 60, 0, 20, 20, 30, 30, 0, 30, 1000, 55, "Binary Blob", "petty"), Enemy(1, 'b', COL_GREEN, 6, 8, 0, 20, 20, 30, 30, 0, 30, 800, 65, "Bug", "Shallow"), Enemy(2, 'd', COL_RED, 6, 30, 0, 40, 40, 40, 40, 0, 40, 900, 185, "Pigdog", "North American"), Enemy(3, 'b', COL_YELLOW, 6, 60, 0, 50, 50, 50, 50, 0, 50, 1200, 350, "Neckbear", "juvenile"), Enemy(4, 'G', COL_YELLOW, 6, 80, 0, 60, 60, 60, 60, 0, 60, 1100, 550, "Gnu", "wild"), Enemy(10, 'T', COL_GREEN, 6, 200,0, 120,120,120,120,0, 120,1000, 1000, "Troll", "eax"), }; #endif
// Create a new enemy with random type and position X void EnemyGroup::createNewEnemy(IL_Sprite spriteEnemy, int type) { spriteEnemy.position.x = rand() % SCREEN_WIDTH; spriteEnemy.position.y= -250; Enemy enemy = Enemy(spriteEnemy, type); add(enemy); }
int main() { t_win w; int c; int g = 0; int direction = 0; int index = 0; int index_2 = 0; std::srand(std::time(NULL)); initscr(); start_color(); init_color(COLOR_BLUE, 222,184, 135); //light brown color init_color(COLOR_YELLOW, 500,400, 300); init_pair(1, COLOR_YELLOW, COLOR_BLACK); init_pair(2, COLOR_BLUE, COLOR_BLACK); init_pair(5, COLOR_MAGENTA, COLOR_BLACK); init_pair(6, COLOR_GREEN, COLOR_BLACK); init_pair(7, COLOR_WHITE, COLOR_BLACK); curs_set(0); cbreak(); noecho(); nodelay(stdscr, TRUE); keypad(stdscr, TRUE); // srand(NULL); Player a; int difficulty = 0; // Enemy b; int i = 0; // int wave = 5; // int y = 0; // int next_line = 0; // int half_line = 0; // if (a.getLevel() == 0) // ARMY = 5; Enemy b[ARMY]; Fire x[SCUD]; FireEnemy p[KRR]; Background back(COLS, LINES); Enemy e[3] = { Enemy("{@@}", "/''\\", 5), Enemy("dOOb", "^/\\^", 6), Enemy("/MM\\", "\\~~/", 7)}; while (i < SCUD) { x[i].setExist(0); i++; } i = 0; while (i < KRR) { p[i].setExist(0); i++; } i = 0; // int random; ft_init(1, b, x, p, e); // while (i < ARMY) { // y = 0; // if (y < WAVE && i < ARMY) { // next_line++; // if (next_line % 2 == 0) // half_line = 5; // else // half_line = 0; // while (y < WAVE && i < ARMY) { // b[i].setPosX(15 - (next_line * 2)); // b[i].setPosY(10 * (y + 1) - half_line); // b[i].setMaxX(LINES - 3); // b[i].setMaxY((COLS - 2) - half_line); // random = std::rand() % 2; // b[i].setExist(random); // random = std::rand() % 3; // b[i].setName(e[random].getName()); // b[i].setName2(e[random].getName2()); // i++; // y++; // } // } // } index = 0; w.win = subwin(stdscr, LINES * 0.9, COLS, LINES * 0.1, 0); w.score = subwin(stdscr, LINES * 0.1, COLS, 0, 0); box(w.win, ACS_VLINE, ACS_HLINE); box(w.score, ACS_VLINE, ACS_HLINE); a.setPosX(LINES - 10); a.setPosY(COLS / 2); a.setMaxX(LINES - 1); a.setMaxY(COLS - 3); a.setScore(0); a.setLife(3); a.setLevel(0); mvwprintw(w.score, 1, 5, "SCORE : "); std::string score_display = std::to_string(a.getScore()); mvwprintw(w.score, 1, 14, score_display.c_str()); mvwprintw(w.score, 2, 5, "TIME : "); mvwprintw(w.score, 1, COLS - 15, "LIFE : "); std::string life_display = std::to_string(a.getLife()); mvwprintw(w.score, 1, COLS - 8, life_display.c_str()); mvwprintw(w.score, 2, COLS - 15, "LEVEL : "); ft_display_ship(&w, a.getPosX(), a.getPosY()); ft_display_enemy(b, &w, difficulty); // mvwprintw(w.win, a.getPosX(), a.getPosY(), "/.\\"); // wrefresh(w.win); struct timeval t; struct timezone z; long int ut = t.tv_sec * 1000 + t.tv_usec / 1000; long int ut2 = t.tv_sec * 1000 + t.tv_usec / 1000; long int ut3 = t.tv_sec * 1000 + t.tv_usec / 1000; long int ut4 = t.tv_sec * 1000 + t.tv_usec / 1000; std::string time_display = std::to_string(ut); mvwprintw(w.win, 10, 10, time_display.c_str()); // ut += 1000; std::string time2_display = std::to_string(ut); mvwprintw(w.win, 11, 10, time2_display.c_str()); wrefresh(w.win); // sleep(5); // int wave = 0; i = 10; int n_time = time(NULL); int m_time = time(NULL); time_t timer; time_t buf; time(&buf); time(&timer); int seconds = 0; while (1) { int y = 0; difficulty = (a.getLevel() + 1) * (ARMY / 10); while (y < SCUD) { i = 0; while (i < difficulty) { if (b[i].getPosY() == x[y].getPosY() && b[i].getPosX() == x[y].getPosX() && b[i].getExist() == 1 && x[y].getExist() == 1) { x[y].setExist(0); b[i].setExist(0); a.setScore(a.getScore() + 10); } else if (b[i].getPosY() - 1 == x[y].getPosY() && b[i].getPosX() == x[y].getPosX() && b[i].getExist() == 1 && x[y].getExist() == 1) { x[y].setExist(0); b[i].setExist(0); a.setScore(a.getScore() + 10); } else if (b[i].getPosY() + 4 == x[y].getPosY() && b[i].getPosX() == x[y].getPosX() && b[i].getExist() == 1 && x[y].getExist() == 1) { x[y].setExist(0); b[i].setExist(0); a.setScore(a.getScore() + 10); } else if (b[i].getPosY() + 3 == x[y].getPosY() && b[i].getPosX() == x[y].getPosX() && b[i].getExist() == 1 && x[y].getExist() == 1) { x[y].setExist(0); b[i].setExist(0); a.setScore(a.getScore() + 10); } else if (b[i].getPosY() + 2 == x[y].getPosY() && b[i].getPosX() == x[y].getPosX() && b[i].getExist() == 1 && x[y].getExist() == 1) { x[y].setExist(0); b[i].setExist(0); a.setScore(a.getScore() + 10); } else if (b[i].getPosY() + 1 == x[y].getPosY() && b[i].getPosX() == x[y].getPosX() && b[i].getExist() == 1 && x[y].getExist() == 1) { x[y].setExist(0); b[i].setExist(0); a.setScore(a.getScore() + 10); } i++; } y++; } i = 0; while (i < KRR) { if (p[i].getPosY() == a.getPosY() && p[i].getPosX() == a.getPosX()) { if (m_time < time(NULL)) { a.setLife(a.getLife() - 1); p[i].setExist(0); m_time = time(NULL); m_time += 1; } } if (p[i].getPosY() == a.getPosY() + 1 && p[i].getPosX() == a.getPosX()) { if (m_time < time(NULL)) { a.setLife(a.getLife() - 1); p[i].setExist(0); m_time = time(NULL); m_time += 1; } } if (p[i].getPosY() == a.getPosY() + 2 && p[i].getPosX() == a.getPosX()) { if (m_time < time(NULL)) { a.setLife(a.getLife() - 1); p[i].setExist(0); m_time = time(NULL); m_time += 1; } } if (p[i].getPosY() == a.getPosY() - 1 && p[i].getPosX() == a.getPosX() + 1) { if (m_time < time(NULL)) { a.setLife(a.getLife() - 1); p[i].setExist(0); m_time = time(NULL); m_time += 1; } } if (p[i].getPosY() == a.getPosY() + 1 && p[i].getPosX() == a.getPosX() + 1) { if (m_time < time(NULL)) { a.setLife(a.getLife() - 1); p[i].setExist(0); m_time = time(NULL); m_time += 1; } } if (p[i].getPosY() == a.getPosY() + 2 && p[i].getPosX() == a.getPosX() + 1) { if (m_time < time(NULL)) { a.setLife(a.getLife() - 1); p[i].setExist(0); m_time = time(NULL); m_time += 1; } } if (p[i].getPosY() == a.getPosY() + 3 && p[i].getPosX() == a.getPosX() + 1) { if (m_time < time(NULL)) { a.setLife(a.getLife() - 1); p[i].setExist(0); m_time = time(NULL); m_time += 1; } } if (p[i].getPosY() == a.getPosY() + 4 && p[i].getPosX() == a.getPosX() + 1) { if (m_time < time(NULL)) { a.setLife(a.getLife() - 1); p[i].setExist(0); m_time = time(NULL); m_time += 1; } } i++; } // std::string life_display = std::to_string(a.getLife()); mvwprintw(w.score, 1, COLS - 8, "%d", a.getLife()); mvwprintw(w.score, 2, COLS - 8, "%d", a.getLevel()); time(&timer); seconds = difftime(timer, buf); mvwprintw(w.score, 2, 14, "%d", seconds); wrefresh(w.score); i = 0; int lose = 0; while (i < difficulty) { if (b[i].getPosY() == a.getPosY() && b[i].getPosX() == a.getPosX() && b[i].getExist() == 1) { a.setLife(0); lose = 1; } else if (b[i].getPosY() + 1 == a.getPosY() && b[i].getPosX() == a.getPosX() && b[i].getExist() == 1) { a.setLife(0); lose = 1; } else if (b[i].getPosY() + 2 == a.getPosY() && b[i].getPosX() == a.getPosX() && b[i].getExist() == 1) { a.setLife(0); lose = 1; } else if (b[i].getPosY() + 3 == a.getPosY() && b[i].getPosX() == a.getPosX() && b[i].getExist() == 1) { a.setLife(0); lose = 1; } else if (b[i].getPosY() + 4 == a.getPosY() && b[i].getPosX() == a.getPosX() && b[i].getExist() == 1) { a.setLife(0); lose = 1; } else if (b[i].getPosY() - 1 == a.getPosY() && b[i].getPosX() == a.getPosX() && b[i].getExist() == 1) { a.setLife(0); lose = 1; } else if (b[i].getPosY() - 2 == a.getPosY() && b[i].getPosX() == a.getPosX() && b[i].getExist() == 1) { a.setLife(0); lose = 1; } else if (b[i].getPosX() == LINES - 5) { lose = 1; } i++; } i = 0; // while (i < ARMY) { // if () // } if (a.getLife() == 0) { lose = 1; } if (lose == 1) { ft_display_clear(&w); mvwprintw(w.win, LINES / 3, COLS / 2 - 4, "GAME OVER"); mvwprintw(w.win, LINES / 3 + 2, COLS / 2 - 12, "Try again? (Level 0) [y/n]"); wrefresh(w.win); while (1) { if ((c = getch()) != ERR) { if (c == 121) { mvwprintw(w.win, LINES / 3 + 5, COLS / 2 - 9, "Please insert credit"); wrefresh(w.win); } if (c == 110 || c == 27) { endwin(); std::exit(0); } } } } i = 0; while (i < difficulty) { if (b[i].getExist() == 1 && b[i].getPosY() == a.getPosY()) { if (n_time < time(NULL)) { p[index_2] = FireEnemy(); p[index_2].setPosX(b[i].getPosX() + 1); p[index_2].setPosY(b[i].getPosY()); p[index_2].setExist(1); n_time = time(NULL); // n_time += 2; index_2++; } } i++; } i = 0; int win_level = 1; while (i < difficulty) { if (b[i].getExist() == 1) win_level = 0; i++; } if (win_level == 1) { a.setLevel(a.getLevel() + 1); ft_display_clear(&w); mvwprintw(w.win, LINES / 3, COLS / 2 - 4, "WIN"); mvwprintw(w.win, LINES / 3 + 2, COLS / 2 - 12, "Next Level? [y/n]"); wrefresh(w.win); while (1) { if ((c = getch()) != ERR) { if (c == 121) { ft_init((a.getLevel() + 1), b, x, p, e); a.setPosX(LINES - 10); a.setPosY(COLS / 2); a.setMaxX(LINES - 1); a.setMaxY(COLS - 3); a.setLife(3); break ; } if (c == 110 || c == 27) { endwin(); std::exit(0); } } } } gettimeofday(&t, &z); if (ut3 + 2000 < t.tv_sec * 1000 + t.tv_usec / 1000) { ut3 = t.tv_sec * 1000 + t.tv_usec / 1000; g++; if (g == 40) g = 0; } if (ut4 + 10 < t.tv_sec * 1000 + t.tv_usec / 1000) { ut4 = t.tv_sec * 1000 + t.tv_usec / 1000; // back.move(); ft_display_clear(&w); // ft_display_planet(&w, g); ft_display_planet(&w, g); box(w.win, ACS_VLINE, ACS_HLINE); back.refresh(); ft_display_enemy(b, &w, difficulty); ft_display_fire(x, &w); ft_display_fire_enemy(p, &w); ft_display_ship(&w, a.getPosX(), a.getPosY()); wrefresh(w.win); } if (ut + 400 - ((a.getLevel() + 1) * 100) < t.tv_sec * 1000 + t.tv_usec / 1000) { ut = t.tv_sec * 1000 + t.tv_usec / 1000; ft_move_right_enemy(b, &direction, a.getLevel() + 1); // wclear(w.win); box(w.win, ACS_VLINE, ACS_HLINE); // back.refresh(); ft_display_enemy(b, &w, difficulty); ft_display_fire(x, &w); ft_display_ship(&w, a.getPosX(), a.getPosY()); // g++; std::string score_display = std::to_string(a.getScore()); mvwprintw(w.score, 1, 14, score_display.c_str()); wrefresh(w.score); wrefresh(w.win); } if (ut2 + 150 < t.tv_sec * 1000 + t.tv_usec / 1000) { ut2 = t.tv_sec * 1000 + t.tv_usec / 1000; i = 0; back.move(); while (i < SCUD) { x[i].setPosX(x[i].getPosX() - 1); i++; } i = 0; while (i < KRR) { p[i].setPosX(p[i].getPosX() + 1); i++; } box(w.win, ACS_VLINE, ACS_HLINE); // back.refresh(); ft_display_enemy(b, &w, difficulty); ft_display_fire(x, &w); ft_display_ship(&w, a.getPosX(), a.getPosY()); wrefresh(w.win); } if ((c = getch()) != ERR) { if (c == 27) { endwin(); std::exit(0); } if (c == KEY_LEFT) { if (a.getPosY() > 2) a.setPosY(a.getPosY() - 3); } if (c == KEY_RIGHT) { if (a.getPosY() < a.getMaxY()) a.setPosY(a.getPosY() + 3); } if (c == KEY_UP) { if (a.getPosX() - 5 > 0) a.setPosX(a.getPosX() - 2); } if (c == KEY_DOWN) { if (a.getPosX() + 5 < a.getMaxX()) a.setPosX(a.getPosX() + 2); } if (c == 32) { if (index == 199) index = 0; x[index] = Fire(); x[index].setPosX(a.getPosX() - 1); x[index].setPosY(a.getPosY() + 1); x[index].setExist(1); index++; } // wrefresh(w.win); c = 0; } } return 0; }