Exemple #1
0
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();
}
Exemple #2
0
//////// 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;

}
Exemple #5
0
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;
	}
}
Exemple #10
0
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;
}
Exemple #12
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;
}
Exemple #13
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;
  }
Exemple #14
0
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]) );
	}
}
Exemple #15
0
// 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;
}
Exemple #17
0
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();
}
Exemple #18
0
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
	}

}
Exemple #21
0
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(&note);
	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();
}
Exemple #22
0
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;
}
Exemple #23
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++;
			}
		}
	}
}
Exemple #26
0
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++;
	}
}
Exemple #27
0
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);
    }
}
Exemple #28
0
    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);
}
Exemple #30
0
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;
}