Ejemplo n.º 1
0
// Update: draw background
update_status ModuleEnemy::Update()
{
	p2List_item<Enemy*>* tmp = active.getFirst();
	p2List_item<Enemy*>* tmp_next = active.getFirst();

	while (tmp != NULL)
	{
		Enemy* p = tmp->data;
		tmp_next = tmp->next;

		if (p->Update() == false)
		{

			
			delete p;
			active.del(tmp);
		}
		else
		{
			App->renderer->Blit(graphics, p->position.x, p->position.y, &(p->current_anim->GetCurrentFrame()));
			if (p->fx_played == false)
			{
				p->fx_played = true;
				App->audio->PlayFx(p->fx);
			}
		}

		tmp = tmp_next;
	}

	return UPDATE_CONTINUE;
}
Ejemplo n.º 2
0
void EnemyManager::Update()
{
	for (int i = 0; i < m_enemies->size(); i++)
	{
		Enemy* e = m_enemies->at(i);
		if (e->hp < 0)
		{
			delete e;
			m_enemies->erase(m_enemies->begin() + i);
			i--;
			continue;
		}
		e->Update();
	}
}
Ejemplo n.º 3
0
void Game::Update( void* gameInst, Entity** entities, int startIndex, int numEntities, double deltaTime )
{
	Game* game = (Game*)gameInst;

	int maxIndex = startIndex + numEntities;
	for (int i = startIndex; i < maxIndex; ++i)
	{
		Enemy* enemy = dynamic_cast<Enemy*>(entities[i]);
		Player* player = dynamic_cast<Player*>(entities[i]);

		if (enemy)
		{
			if ( (enemy->behavior.tasks[enemy->currentTaskIndex])->DoTask( enemy, deltaTime ) )
			{
				enemy->currentTaskIndex = (enemy->currentTaskIndex + 1) % enemy->behavior.tasks.size();
			}

			enemy->Update( deltaTime );
		}
		else if (player)
		{
			float horizontalSpeed = 0;
			float verticalSpeed = 0;

			if (Input::InputDown(KeyCode::KEY_W))
			{
				verticalSpeed = -1;
			}
			else if (Input::InputDown(KeyCode::KEY_S))
			{
				verticalSpeed = 1;
			}

			if (Input::InputDown(KeyCode::KEY_D))
			{
				horizontalSpeed = 1;
			}
			else if (Input::InputDown(KeyCode::KEY_A))
			{
				horizontalSpeed = -1;
			}

			player->MoveVertically(verticalSpeed);
			player->MoveHorizontally(horizontalSpeed);
		}
	}
}
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;
}
Ejemplo n.º 5
0
void BasicApp::update()
{

	if (game_state == Game_Demo)
	{

		for (list<Asteroid>::iterator itr = asteroids.begin(); itr!=asteroids.end(); itr++)
		{
			itr->Update();

		}

	}
	else if(game_state == GAME_Play)
	{
		for (list<Asteroid>::iterator itr = asteroids.begin(); itr!=asteroids.end(); itr++)
		{
			itr->Update();

		}

		for (list<Bullet>::iterator itr_bullet = currentShip.m_Bullets.begin(); itr_bullet!=currentShip.m_Bullets.end();)
		{

			for (list<Asteroid>::iterator itr_astroid = asteroids.begin(); itr_astroid!=asteroids.end();)
			{
				if(checkCollision(itr_bullet->getCenter(),itr_astroid->getCenter(), itr_bullet->getRadius(), itr_astroid->getRadius()))
				{

					particleManager.Start_Explosion(itr_astroid->getCenter(),10,1.0f,1.0f);
				
					engine->play2D("explode_high.wav");
				

					if(itr_astroid->m_size >= 0.5)
					{
						Asteroid asteroid_1, asteroid_2;

						asteroid_1.m_state = Asteroid_Medium;
						asteroid_1.Init(rand()%2+1, 0.3);
						asteroid_1.m_Vel.y = -itr_astroid->m_Vel.y*1.5;
						asteroid_1.m_Vel.x = -itr_astroid->m_Vel.x*1.5;
						asteroid_1.m_Pos = itr_astroid->m_Pos;

						asteroid_2.m_state = Asteroid_Medium;
						asteroid_2.Init(rand()%2+1, 0.3);
						asteroid_2.m_Vel.y = itr_astroid->m_Vel.y*1.5;
						asteroid_2.m_Vel.x = itr_astroid->m_Vel.x*1.5;
						asteroid_2.m_Pos = itr_astroid->m_Pos;


						asteroids.push_back(asteroid_1);
						asteroids.push_back(asteroid_2);


						itr_astroid = asteroids.erase(itr_astroid);
						itr_astroid->m_bHit = true;

						score +=100;

					}
					else if(itr_astroid->m_state == Asteroid_Medium)
					{
						Asteroid asteroid_1, asteroid_2;
						asteroid_1.m_state = Asteroid_Small;
						asteroid_1.Init(rand()%2+1, 0.1);
						asteroid_1.m_Vel.y = -itr_astroid->m_Vel.y*2;
						asteroid_1.m_Vel.x = -itr_astroid->m_Vel.x*2;
						asteroid_1.m_Pos = itr_astroid->m_Pos;
						asteroid_2.m_state = Asteroid_Small;
						asteroid_2.Init(rand()%2+1, 0.1);
						asteroid_2.m_Vel.y = itr_astroid->m_Vel.y*2;
						asteroid_2.m_Vel.x = itr_astroid->m_Vel.x*2;
						asteroid_2.m_Pos = itr_astroid->m_Pos;
						asteroids.push_back(asteroid_1);
						asteroids.push_back(asteroid_2);
						itr_astroid = asteroids.erase(itr_astroid);
						itr_astroid->m_bHit = true;

						score +=100;

					}
					else
					{
						score +=50;
						itr_astroid->m_bHit = true; 
						itr_astroid = asteroids.erase(itr_astroid);
					}

					itr_bullet->m_Hit = true;

					break;
				}
				else
				{
					itr_astroid++;

				}
			}
			if(itr_bullet->m_Hit)
			{
				itr_bullet = currentShip.m_Bullets.erase(itr_bullet);
			}
			else
			{
				itr_bullet++;

			}

		}

		if(shipCollision)
		{
			for (list<Asteroid>::iterator itr_astroid = asteroids.begin(); itr_astroid!=asteroids.end(); )
			{
				if(currentShip.m_state == Ship::Ship_Alive)
				{

					if(checkCollision(itr_astroid->getCenter(), currentShip.getCenter(), itr_astroid->getRadius(), currentShip.getRadius() ))
					{

						particleManager.Start_Explosion(currentShip.getCenter(),10,0.3f,1.0f);
						particleLineManager.Init(currentShip.getCenter());

						engine->play2D("explode_high.wav");

						currentShip.m_state = Ship::Ship_Dead;
						currentShip.m_Pos.x = -getWindowWidth()/2;
						currentShip.m_Pos.y = -getWindowHeight()/2;

						if(ships.size()>0)
						{
							ships.pop_back();
						}

						if(itr_astroid->m_size >= 0.5)
						{
							Asteroid asteroid_1, asteroid_2;

							asteroid_1.m_state = Asteroid_Medium;
							asteroid_1.Init(rand()%2+1, 0.3);
							asteroid_1.m_Vel.y = -itr_astroid->m_Vel.y*1.5;
							asteroid_1.m_Vel.x = -itr_astroid->m_Vel.x*1.5;
							asteroid_1.m_Pos = itr_astroid->m_Pos;

							asteroid_2.m_state = Asteroid_Medium;
							asteroid_2.Init(rand()%2+1, 0.3);
							asteroid_2.m_Vel.y = itr_astroid->m_Vel.y*1.5;
							asteroid_2.m_Vel.x = itr_astroid->m_Vel.x*1.5;
							asteroid_2.m_Pos = itr_astroid->m_Pos;


							asteroids.push_back(asteroid_1);
							asteroids.push_back(asteroid_2);


							itr_astroid = asteroids.erase(itr_astroid);
							itr_astroid->m_bHit = true;

							score +=100;

						}
						else if(itr_astroid->m_state == Asteroid_Medium)
						{
							Asteroid asteroid_1, asteroid_2;

							asteroid_1.m_state = Asteroid_Small;
							asteroid_1.Init(rand()%2+1, 0.1);
							asteroid_1.m_Vel.y = -itr_astroid->m_Vel.y*2;
							asteroid_1.m_Vel.x = -itr_astroid->m_Vel.x*2;
							asteroid_1.m_Pos = itr_astroid->m_Pos;

							asteroid_2.m_state = Asteroid_Small;
							asteroid_2.Init(rand()%2+1, 0.1);
							asteroid_2.m_Vel.y = itr_astroid->m_Vel.y*2;
							asteroid_2.m_Vel.x = itr_astroid->m_Vel.x*2;
							asteroid_2.m_Pos = itr_astroid->m_Pos;


							asteroids.push_back(asteroid_1);
							asteroids.push_back(asteroid_2);


							itr_astroid = asteroids.erase(itr_astroid);
							itr_astroid->m_bHit = true;

							score +=100;
						}
						else
						{
							score +=50;
							itr_astroid->m_bHit = true; 
							itr_astroid = asteroids.erase(itr_astroid);
						}
						break;
					}
					else
					{
						itr_astroid++;

					} 
				}
				else
				{
					itr_astroid++;
				}
			}	
		}
	 
		currentShip.m_saveField = currentShip.m_state == Ship::Ship_Dead;

		if (currentShip.m_saveField)
		{
			for (list<Asteroid>::iterator itr_astroid = asteroids.begin(); itr_astroid!=asteroids.end(); itr_astroid++) 
			{
				float distance = itr_astroid->getCenter().distance(Vec2f(getWindowWidth() / 2, getWindowHeight() / 2));
				if (distance < 100) 
				{
					currentShip.m_saveField = false;
					break;
				}
			}        
		}

		if(ships.size()<1)
		{
			game_state = GAME_End;
		}
		if(asteroids.size()<1)
		{
			game_state = GAME_End;
		}

		currentShip.Update();
		enemy.Update();
	}


	else if ( game_state == GAME_End)
	{



	}

	Sleep(delay);

}
Ejemplo n.º 6
0
int main()
{
    int shotsFired = 0;
    fstream out;
    out.open("shotsFired.txt");
    fstream in;
    string filename = "GameName.txt";
    in.open(filename.c_str());
    string windowName;
    if(!in.fail()){
        windowName = accessStream(in, true);
    }
    World world;
    Player * player = new Player();
    PlayerProjectile projectile;
    PlayerProjectile chargePro(1);
    Enemy * enemy = new Enemy();
    sf::Music music;
    if(!music.openFromFile("assets/sound/level0.wav")){
        cout << "Failed to open music file" << endl;
    }
    music.setVolume(25);
    music.play();

    //Floor* street = new Floor("street");
    sf::Sprite background;
    sf::Texture bgScene;
    bgScene.loadFromFile("assets/art/background.png");
    bgScene.setSmooth(false);
    background.setTexture(bgScene);

    background.scale(bgScaleFactor, bgScaleFactor);
    sf::RenderWindow window(sf::VideoMode(screenWidth, screenHeight), windowName);
    //window.setVerticalSyncEnabled(true);
    window.setFramerateLimit(60);

    sf::Sprite EnemyObject;
    EnemyObject.scale(scaleFactor, scaleFactor);
    sf::Sprite PlayerObject;
    PlayerObject.scale(scaleFactor, scaleFactor);
    EnemyObject.setTexture(enemy->Update());
    sf::Vector2f pStart(400, 50);
    sf::Vector2f eStart(200, 230);
    EnemyObject.move(eStart);
    PlayerObject.setTexture(player->Update());
    PlayerObject.move(pStart);

    vector<sf::Sprite> ObjsInView;
    vector<PlayerProjectile> ProjsInView;
    vector<Enemy*> EnemiesInView;
    //vector<Floor*> TilesInView;
    ObjsInView.push_back(PlayerObject);
    for(unsigned i = 0; i < world.TileMap.size(); i++){
        for(unsigned j = 0; j < world.TileMap[i].length(); ++j){
            if(world.TileMap[i][j] == 'S') {
                Floor* f = new Floor("street", j, i);
                world.TilesInView.push_back(f);
            }
        }
    }
    sf::RectangleShape floorCollider(sf::Vector2f(800.f, 45.f));
    floorCollider.setPosition(0.f, 370.f);
    floorCollider.setFillColor(sf::Color::Transparent);
    floorCollider.setOutlineColor(sf::Color::Red);

    // Start the game loop
    while (window.isOpen())
    {
        window.clear();
        // Process events
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed) {
                window.close();
            }
        }
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::X)){
            if(player->Shoot()){
               PlayerProjectile lemon = projectile;
            if(player->getPlayerState() == Player::idleRight
               || player->getPlayerState() == Player::jumpRight
               || player->getPlayerState() == Player::runRight
               || player->getPlayerState() == Player::fallRight) {

                lemon.setVelocity(7);
                lemon.setSprite(PlayerProjectile::right);
            } else {
                //lemonSprite.setTexture(projectile.lemonLeft);
                lemon.setVelocity(-7);
                lemon.setSprite(PlayerProjectile::left);
            }
               lemon.setPosition(PlayerObject.getPosition());
               ProjsInView.push_back(lemon);
            }
        }
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::C)){
            if(player->Shoot()){
               PlayerProjectile lemon = chargePro;
            if(player->getPlayerState() == Player::idleRight
               || player->getPlayerState() == Player::jumpRight
               || player->getPlayerState() == Player::runRight
               || player->getPlayerState() == Player::fallRight) {

                lemon.setVelocity(7);
                lemon.setSprite(PlayerProjectile::right);
            } else {
                //lemonSprite.setTexture(projectile.lemonLeft);
                lemon.setVelocity(-7);
                lemon.setSprite(PlayerProjectile::left);
            }
               lemon.setPosition(PlayerObject.getPosition());
               ProjsInView.push_back(lemon);
            }
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) {
                player->setDirection(Player::left);
            }
        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) {
                player->setDirection(Player::right);
            }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left) && sf::Keyboard::isKeyPressed(sf::Keyboard::X)) {
                player->setDirection(Player::left);
                player->Shoot();
                shotsFired++;
            }
        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right) && sf::Keyboard::isKeyPressed(sf::Keyboard::X)) {
                player->setDirection(Player::right);
                player->Shoot();
                shotsFired++;
            }
        if(player->boundingBox.getGlobalBounds().intersects(floorCollider.getGlobalBounds())){
            if (sf::Keyboard::isKeyPressed(sf::Keyboard::Z)) {
                    player->Jump();
            }
            if (sf::Keyboard::isKeyPressed(sf::Keyboard::Z) && sf::Keyboard::isKeyPressed(sf::Keyboard::X)){
                player->Jump();
                player->Shoot();
                shotsFired++;
            }
            }
            if (!sf::Keyboard::isKeyPressed(sf::Keyboard::Right) &&
                     !sf::Keyboard::isKeyPressed(sf::Keyboard::Left)){
                     player->setDirection(Player::none);
            }
        PlayerObject.move(player->getVelocity(), player->getGravity(floorCollider));
        enemy->positionBounds(EnemyObject);
        if(!enemy->checkCollision(player->boundingBox)){
            EnemyObject.move(enemy->Move(EnemyObject), 0);
        }
        player->positionBounds(PlayerObject);

        window.draw(background);
        window.draw(floorCollider);

        for(unsigned i = 0; i < world.TilesInView.size(); ++i){
            RenderTiles(world.TilesInView[i]->getTiles(), world.TilesInView[i], window);
        }
        sf::Texture playerTex = player->Update();
        sf::Texture enemyTex = enemy->Update();
        //playerTex.setSmooth(false);
        PlayerObject.setTexture(playerTex, true);
        EnemyObject.setTexture(enemyTex, true);
        RenderProjectiles(ProjsInView, window, projectile, player);
        window.draw(EnemyObject);
        window.draw(player->boundingBox);
        window.draw(PlayerObject);

        // Update the window
        window.display();
    }
    if(!out.fail()){
        accessStream(out, false, shotsFired);
        //out << shotsFired;
        //out << std::flush;
    }

    return 0;
}
Ejemplo n.º 7
0
//						Update game5
void update( ESContext* ctx, float deltaTime )
{
    if(getKeyState(KeyCodes::KEY_ESCAPE))
    {
        deinit(ctx);
        exit(0);
    }

    if(player.isHeJumping == true)
    {
        PlayHop();
    }

    int number = button1.Update(deltaTime);



    switch(gameState)
    {
    case 0:
        menu.background->setPosition(0,0);
        insertText.background->setPosition(400,400);
        dead.background->setPosition(400,400);
        //gameState = 1;
        button1.buttons->setPosition(-6, 1);
        switch (number)
        {
        case 1:
            gameState = 1;
            break;
        case 2:
            break;
        case 3:
            break;
        }
        break;
    case 1:

        switch (letterState)
        {
        case 0:
            insertText.background->setPosition(0,0.35f);
            button1.buttons->setPosition(-400, 400);
            insertText.background->setPosition(0,0.35f);
            score->m_nameText1->setText( to_string(score->letters[score->lindex]));
            score->nameText1->setPosition(-0.5f,0);
            break;
        case 1:
            score->m_nameText2->setText( to_string(score->letters[score->lindex]));
            score->nameText2->setPosition(0,0);
            break;
        case 2:
            score->m_nameText3->setText( to_string(score->letters[score->lindex]));
            score->nameText3->setPosition(0.5f,0);
            break;
        case 3:
            //gameState = 2;
            //button1.buttons->setPosition(4, 4);
            if(getKeyState(KeyCodes::KEY_RETURN))
            {
                menu.background->setPosition(400,400);
                insertText.background->setPosition(400,400);
                score->nameText1->setPosition(-0.5f,-5);
                score->nameText2->setPosition(0,-5);
                score->nameText3->setPosition(0.5f,-5);

                gameState = 2;
            }

            break;
        }

        if(isButtonPressed == false)
        {
            if(getKeyState(KeyCodes::KEY_DOWN))
            {
                score->lindex++;
                isButtonPressed = true;
                if (score->lindex > 25)
                {
                    score->lindex = 25;
                }
            }

            if(getKeyState(KeyCodes::KEY_UP))
            {
                score->lindex--;
                isButtonPressed = true;
                if (score->lindex < 0)
                {
                    score->lindex = 0;
                }
            }

            if(getKeyState(KeyCodes::KEY_RETURN))
            {
                letterState++;
                scoreList.push_back(score->letters[score->lindex]);
                isButtonPressed = true;
            }
        }
        else if(!getKeyState(KeyCodes::KEY_DOWN) && !getKeyState(KeyCodes::KEY_UP) && !getKeyState(KeyCodes::KEY_RETURN))
        {
            isButtonPressed = false;
        }
        break;
    case 2:
        count++;

        button1.buttons->setPosition(400, 400);

        dangers[0].speed = 8.5f * (1 + score->highscore/20000);
        dangers[1].speed = 3.5f * (1 + score->highscore/20000);
        dangers[2].speed = 15.5f * (1 + score->highscore/20000);

        player.Update(deltaTime);
        enemy.Update(deltaTime);
        health.Update(deltaTime);
        score->update(deltaTime);
        notDanger.Update(deltaTime);
        apple.Update(deltaTime);
        banana.Update(deltaTime);
        map->update(deltaTime);

        score->highscore += backgrounds[0].boost/10;

        if(player.isHeDead == true)
        {
            if(isPlayerScreamed == false)
            {
                PlayNoo();
            }
        }

        for (size_t i = 0; i < backgrounds.size(); i++)
        {
            backgrounds[i].Update(deltaTime);
        }

        for (size_t i = 0; i < dangers.size(); i++)
        {

            dangers[i].Update(deltaTime);
            //	Collision between player and danger
            if ((player.hitx > dangers[i].hitx - 0.6f && player.hitx < dangers[i].hitx + 0.8f
                    && player.hity > dangers[i].hity - 0.5f
                    && player.hity -1.3f < dangers[i].hity + 0.5f) && player.isHeBlinking == false)
            {
                if(player.isHeDead == false)
                {
                    PlayAuts();
                    //engine->play2D("ouch.wav", false);
                }
                dangers[i].Respawn();
                player.DangerHit();
                player.Blink();

                // spark effect
                spark1.Hit();
                spark1.spark->setPosition((float)dangers[i].hitx,(float)dangers[i].hity);
                // slow effect
                for (int i = 0; i < 6; i++)
                {
                    backgrounds[i].Slow();
                }
                // player slow effect
                player.Slow();
            }

            // Player pickups a bonus
            if (notDanger.danger->collidesTo(player.player))
            {
                PlayNom();
                //engine->play2D("pickup1.wav", false);
                notDanger.Respawn();
                health.Medkit();
                score->strawberry();
            }
            // Player pickups a bonus
            if (banana.danger->collidesTo(player.player))
            {
                PlayNom();
                //engine->play2D("pickup1.wav", false);
                banana.Respawn();
                //health.Medkit();
                score->banaani();
            }
            // Player pickups a bonus
            if (apple.danger->collidesTo(player.player))
            {
                PlayNom();
                //engine->play2D("pickup1.wav", false);
                apple.Respawn();
                //health.Medkit();
                score->omena();
            }
        }
        // Hit hippo
        if (player.hitx <= -6.0f)
        {
            //health.hp = 0;
            //player.Death();
            PlayAuts();
            player.Blink();
            player.HippoHit();
            if(player.isHeDead == true)
            {
                if(isPlayerScreamed == false)
                {
                    PlayNoo();
                }
            }
        }

        if (player.hity >= 40.0f)
        {
            dangers[0].Respawn();
            dangers[1].Respawn();
            dangers[2].Respawn();
            notDanger.Respawn();
            player.die = 0;
            engine->play2D("deathscreen.wav", false);
            health.newGame();
            gameState = 3;
            dead.background->setPosition(0,2);
        }
        break;
    case 3:
        if (isScoresRead == false)
        {
            writeHighScores(ceil(score->highscore));
            sqlite3_exec(db, "select * FROM scores ORDER BY score DESC LIMIT 0, 5;", callback, NULL, NULL);
            isScoresRead = true;
        }

        for (size_t i = 0; i < score->scoreTexts.size(); i++)
        {
            score->scoreTextObjects[i]->setPosition(vec2(7,-4.5f + i*0.5f));
        }

        if(getKeyState(KeyCodes::KEY_R))
        {
            gameState = 2;
            player.player->setPosition(-1,2.5);
            score->highscore = 0;
            isPlayerScreamed = false;
            isScoresRead = false;
            dindex = 0;
            dead.background->setPosition(400,400);

            for (int i = 0; i < 5; i++)
            {
                score->scoreTextObjects[i]->setPosition(vec2(-15,0));
            }
        }
        break;
    }
}
Ejemplo n.º 8
0
int main()
{
	sf::RenderWindow AppWindow(sf::VideoMode(g_WndWidth, g_WndHeight), "Mario by Roman P.");

	sf::Texture tx;
	tx.loadFromFile("..\\Data\\Mario_tileset.png");
	//tx.loadFromFile("..\\Data\\fang.png");

	sf::Sprite MapTiles(tx);

	float fCurrentFrame = 0.0f;

	Player player(tx);
	Enemy  enemy;
	enemy.Set(tx, 750, 208);

	sf::SoundBuffer sb;
	sb.loadFromFile("..\\Data\\Jump.ogg");
	sf::Sound soundJump(sb);

	sf::Music music;
	music.openFromFile("..\\Data\\Mario_Theme.ogg");
	music.setLoop(true);
	music.play();

	sf::Clock clock;

	//sf::RectangleShape RecShape(sf::Vector2f(SIZE_TILE, SIZE_TILE));

	g_fOffsetY = player.FRect.top - g_WndHeight/ 2;

	while (AppWindow.isOpen())
	{ 
		float time = (float)clock.getElapsedTime().asMicroseconds();
		clock.restart();

		time = time / 700;

		sf::Event ev;
		while (AppWindow.pollEvent(ev))
		{
			if (ev.type == sf::Event::Closed)
				AppWindow.close();
		}

		if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
		{ 
			player.dx = -0.1f;
		}
		if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
		{
			player.dx = 0.1f;
		}
		if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
		{
			if (player.bOnGround)
			{
				player.dy = -0.25f;
				player.bOnGround = false;
				soundJump.play();
			}
		}

		player.Update(time);
		enemy.Update(time);

		if (player.FRect.intersects(enemy.FRect))
		{
			if (enemy.bLife)
			{
				if (player.dy > 0)
				{ 
					enemy.dx = 0;
					player.dy = -0.2f;
					enemy.bLife = false;
				}
				else
					player.SSprite.setColor(sf::Color::Red);
			}

			//player.SSprite.setColor(sf::Color::Red);
		}

		if (player.FRect.left > g_WndWidth / 2)
			g_fOffsetX = player.FRect.left - g_WndWidth/2;
		//if (player.FRect.top > g_WndHeight/ 2)
		//	g_fOffsetY = player.FRect.top - g_WndHeight / 2;
		
		AppWindow.clear(sf::Color(107, 140, 255, 255));

		// load map
		for (int i = 0; i < H; i++)
		{
			for (int j = 0; j < W; j++)
			{
				if (TileMap[i][j] == 'P')
					MapTiles.setTextureRect(sf::IntRect(96, 112, SIZE_TILE, SIZE_TILE));
				if (TileMap[i][j] == 'r')
					MapTiles.setTextureRect(sf::IntRect(112, 112, SIZE_TILE, SIZE_TILE));
				if (TileMap[i][j] == 'k')
					MapTiles.setTextureRect(sf::IntRect(144, 112, SIZE_TILE, SIZE_TILE));
				if (TileMap[i][j] == 'c')
					MapTiles.setTextureRect(sf::IntRect(127, 112, SIZE_TILE, SIZE_TILE));
				if (TileMap[i][j] == 'd')
					MapTiles.setTextureRect(sf::IntRect(0, 106, 74, 127 - 106));
				if (TileMap[i][j] == 'g')
					MapTiles.setTextureRect(sf::IntRect(0,16*9-5,3*16,16*2+5));
				if (TileMap[i][j] == 'G')  
					MapTiles.setTextureRect(sf::IntRect(145, 222, 222 - 145, 255 - 222));
				if (TileMap[i][j] == 't')  
					MapTiles.setTextureRect(sf::IntRect(0, 47, 32, 95 - 47));
				if (TileMap[i][j] == 'w') 
					MapTiles.setTextureRect(sf::IntRect(99, 224, 140 - 99, 255 - 224));
				if (TileMap[i][j] == 'h')
					MapTiles.setTextureRect(sf::IntRect(96, 6, 108, 106));
				if (TileMap[i][j] == ' ' || TileMap[i][j] == '0')
					continue;

				MapTiles.setPosition(j * SIZE_TILE - g_fOffsetX, i * SIZE_TILE - g_fOffsetY);
				AppWindow.draw(MapTiles);
			}
		}

		AppWindow.draw(player.SSprite);
		AppWindow.draw(enemy.SSprite);
		AppWindow.display();
	}

	return 0;
}