Beispiel #1
0
void killPlayer(void)
{
    /* On met le timer à 1 pour tuer le joueur instantanément */
    player.timerMort = 1;
    player.dirX = 0;
    player.dirY = 0;

    /* On joue le son */
    playSoundFx(DESTROY);

}
Beispiel #2
0
void playerHurts(GameObject entity)
{
    /* Si le timer d'invincibilité est à 0, on perd un coeur */
    if(player.invincibleTimer == 0 && !player.touch)
    {
        player.life--;
        player.invincibleTimer = 10;
        player.touch = 1;

        touchDir(player.direction, &player, entity);

        playSoundFx(DESTROY);

    }
}
Beispiel #3
0
void getItem(Game* game){
    game->coin++;
    playSoundFx(COINSOUND,game);
}
Beispiel #4
0
void updateObject(Game* game){

    int i;

    for(i=0; i<game->objectNumber; i++){

        switch (game->map->objects[i].type){


            case FLY :

            if(game->map->objects[i].initialized == 0) initializeMonster(&(game->map->objects[i]),game->map->objects[i].x,game->map->objects[i].y);

            if(game->map->objects[i].initialized == 1) updateMonsters(game, &(game->map->objects[i]));

            break;

            case COIN :

                if((collideObject(game->player,&(game->map->objects[i])) == 1) && (game->map->objects[i].initialized == 0))
                {
                    getItem(game);
                    game->map->objects[i].initialized =1 ;
                }

                break;

            case DOOR :

                if((collideObject(game->player,&(game->map->objects[i])) == 1) && (game->map->objects[i].initialized == 0)){

                    game->level++;

                    endLevel(game);
                }

                break;

            case BLUE_BLOCK :

                if((collideObject(game->player,&(game->map->objects[i])) == 1) && (game->map->objects[i].initialized == 0)){
                    isSolid(game->player,&(game->map->objects[i]));
                }

                break;

            case GREEN_BLOCK :

                if((collideObject(game->player,&(game->map->objects[i])) == 1) && (game->map->objects[i].initialized == 0)){
                    isSolid(game->player,&(game->map->objects[i]));
                }

                break;

            case YELLOW_BLOCK :


                if((collideObject(game->player,&(game->map->objects[i])) == 1) && (game->map->objects[i].initialized == 0)){
                    isSolid(game->player,&(game->map->objects[i]));
                }

                break;

            case RED_BLOCK :

                if((collideObject(game->player,&(game->map->objects[i])) == 1) && (game->map->objects[i].initialized == 1)){
                    isSolid(game->player,&(game->map->objects[i]));
                }

                break;


            case PICK :

                if((collidePick(game->player,&(game->map->objects[i])) == 1) && (game->map->objects[i].initialized == 0)){
                    if(game->life > 0)
                    {
                        game->life--;
                        game->player->timerMort = 1;
                        if(game->life<1) playerGameover(game);
                    }
                }

                break;

            case ELEVATOR_BLOCK :


                if((collideObject(game->player,&(game->map->objects[i])) == 1) && (game->map->objects[i].initialized == 1)){
                    isSolid(game->player,&(game->map->objects[i]));
                }

                break;

            case ELEVATOR_SWITCH :


                if((collideObject(game->player,&(game->map->objects[i])) == 1) && (game->map->objects[i].initialized == 0) && (game->input->use == 1)){
                    activateSwitch(ELEVATOR_BLOCK,game);
                    game->map->objects[i].initialized = 1;
                    game->input->use =0;
                    playSoundFx(SWITCHSOUND,game);
                    break;
                }

                if((collideObject(game->player,&(game->map->objects[i])) == 1) && (game->map->objects[i].initialized == 1) && (game->input->use == 1)){
                    desactivateSwitch(ELEVATOR_BLOCK,game);
                    game->map->objects[i].initialized = 0;
                    game->input->use = 0;
                    playSoundFx(SWITCHSOUND,game);
                    break;
                }

                break;

            case BLUE_SWITCH :

                if((collideObject(game->player,&(game->map->objects[i])) == 1) && (game->map->objects[i].initialized == 0) && (game->input->use == 1)){
                    activateSwitch(BLUE_BLOCK,game);
                    game->map->objects[i].initialized = 1;
                    game->input->use =0;
                    playSoundFx(SWITCHSOUND,game);
                    break;
                }

                if((collideObject(game->player,&(game->map->objects[i])) == 1) && (game->map->objects[i].initialized == 1) && (game->input->use == 1)){
                    desactivateSwitch(BLUE_BLOCK,game);
                    game->map->objects[i].initialized = 0;
                    game->input->use = 0;
                    playSoundFx(SWITCHSOUND,game);
                    break;
                }

                break;

            case GREEN_SWITCH :

                if((collideObject(game->player,&(game->map->objects[i])) == 1) && (game->map->objects[i].initialized == 0) && (game->input->use == 1)){
                    activateSwitch(GREEN_BLOCK,game);
                    game->map->objects[i].initialized = 1;
                    game->input->use =0;
                    playSoundFx(SWITCHSOUND,game);
                    break;
                }

                if((collideObject(game->player,&(game->map->objects[i])) == 1) && (game->map->objects[i].initialized == 1) && (game->input->use == 1)){
                    desactivateSwitch(GREEN_BLOCK,game);
                    game->map->objects[i].initialized = 0;
                    game->input->use = 0;
                    playSoundFx(SWITCHSOUND,game);
                    break;
                }

                break;

            case YELLOW_SWITCH :

                 if((collideObject(game->player,&(game->map->objects[i])) == 1) && (game->map->objects[i].initialized == 0) && (game->input->use == 1)){
                    activateSwitch(YELLOW_BLOCK,game);
                    game->map->objects[i].initialized = 1;
                    game->input->use =0;
                    playSoundFx(SWITCHSOUND,game);
                    break;
                }

                if((collideObject(game->player,&(game->map->objects[i])) == 1) && (game->map->objects[i].initialized == 1) && (game->input->use == 1)){
                    desactivateSwitch(YELLOW_BLOCK,game);
                    game->map->objects[i].initialized = 0;
                    game->input->use = 0;
                    playSoundFx(SWITCHSOUND,game);
                    break;
                }

                break;

            case RED_SWITCH :

                 if((collideObject(game->player,&(game->map->objects[i])) == 1) && (game->map->objects[i].initialized == 0) && (game->input->use == 1)){
                    activateSwitch(RED_BLOCK,game);
                    game->map->objects[i].initialized = 1;
                    game->input->use =0;
                    playSoundFx(SWITCHSOUND,game);
                    break;
                }

                if((collideObject(game->player,&(game->map->objects[i])) == 1) && (game->map->objects[i].initialized == 1) && (game->input->use == 1)){
                    desactivateSwitch(RED_BLOCK,game);
                    game->map->objects[i].initialized = 0;
                    game->input->use = 0;
                    playSoundFx(SWITCHSOUND,game);
                    break;
                }

                break;

            default :

                break;
        }
    }
}
Beispiel #5
0
void updatePlayer(GameObject *player, Game *game)
{

   //On rajoute un timer au cas où notre héros mourrait lamentablement en tombant dans un trou...
   //Si le timer vaut 0, c'est que tout va bien, sinon, on le décrémente jusqu'à 0, et là,
   //on réinitialise.
   //C'est pour ça qu'on ne gère le joueur que si ce timer vaut 0.
  if (player->timerMort == 0)
  {

    //On réinitialise notre vecteur de déplacement latéral (X), pour éviter que le perso
    //ne fonce de plus en plus vite pour atteindre la vitesse de la lumière ! ;)
    //Essayez de le désactiver pour voir !
    player->dirX = 0;

    // La gravité fait toujours tomber le perso : on incrémente donc le vecteur Y
    player->dirY += GRAVITY_SPEED;

    //Mais on le limite pour ne pas que le joueur se mette à tomber trop vite quand même
    if (player->dirY >= MAX_FALL_SPEED)
    {
        player->dirY = MAX_FALL_SPEED;
    }

    //Voilà, au lieu de changer directement les coordonnées du joueur, on passe par un vecteur
    //qui sera utilisé par la fonction mapCollision(), qui regardera si on peut ou pas déplacer
    //le joueur selon ce vecteur et changera les coordonnées du player en fonction.
     if (game->input->left == 1)
    {
        player->dirX -= PLAYER_SPEED;
        player->direction = LEFT;

        //On teste le sens pour l'animation : si le joueur allait dans le sens contraire
        //précédemment, il faut recharger le spritesheet pour l'animation.
        if(player->etat != WALK_LEFT && player->onGround ==1)
        {
            player->etat = WALK_LEFT;
            changeAnimation(player, "data/graphics/walkleft.png");
        }
    }

    else if (game->input->right == 1)
    {
        player->dirX += PLAYER_SPEED;
        player->direction = RIGHT;

        if(player->etat != WALK_RIGHT && player->onGround == 1)
        {
            player->etat =  WALK_RIGHT;
            changeAnimation(player, "data/graphics/walkright.png");

        }

    }
    else if(game->input->right == 0 && game->input->left ==0 && player->onGround == 1)
    {
        if(player->etat!=IDLE)
        {
            player->etat = IDLE;
            changeAnimation(player, "data/graphics/idle.png");
        }

    }

    //Et voici la fonction de saut très simple :
    //Si on appuie sur la touche saut (C par défaut) et qu'on est sur le sol, alors on attribue une valeur
    //négative au vecteur Y
    //parce que sauter veut dire se rapprocher du haut de l'écran et donc de y=0.
    if (game->input->jump == 1 && player->onGround)
    {
        player->dirY = -JUMP_HEIGHT;
        player->onGround = 0;
        playSoundFx(JUMPSOUND, game);

    }

    if(player->onGround ==0)
    {
       if(player->direction == RIGHT && player->etat != JUMP_RIGHT)
       {
            player->etat = JUMP_RIGHT;
            changeAnimation(player, "data/graphics/jumpright.png");


       }
       else if(player->direction == LEFT && player->etat != JUMP_LEFT)
       {
            player->etat = JUMP_LEFT;
            changeAnimation(player, "data/graphics/jumpleft.png");

       }

    }



    //On rajoute notre fonction de détection des collisions qui va mettre à jour les coordonnées
    //de notre super lapin, puis on centre le scrolling comme avant.
    mapCollision(player,game->map,game);
    centerScrollingOnPlayer(player, game->map);

  }

    //Gestion de la mort quand le héros tombe dans un trou :
    //Si timerMort est différent de 0, c'est qu'il faut réinitialiser le joueur.
    //On ignore alors ce qui précède et on joue cette boucle (un wait en fait) jusqu'à ce que
    // timerMort == 1. A ce moment-là, on le décrémente encore -> il vaut 0 et on réinitialise
    //le jeu avec notre bonne vieille fonction d'initialisation ;) !
    if (player->timerMort > 0)
    {
        player->timerMort--;



    }

  }
Beispiel #6
0
void updateMonsters(void)
{

    int i;

    //On passe en boucle tous les monstres du tableau
    for ( i = 0; i < jeu.nombreMonstres; i++ )
    {
        //Même fonctionnement que pour le joueur
        if (monster[i].timerMort == 0)
        {

            monster[i].dirX = 0;
            monster[i].dirY += GRAVITY_SPEED;

            if (monster[i].dirY >= MAX_FALL_SPEED)
                monster[i].dirY = MAX_FALL_SPEED;

            //Test de collision dans un mur : si la variable x reste la même, deux tours de boucle
            //durant, le monstre est bloqué et on lui fait faire demi-tour.
            if (monster[i].x == monster[i].saveX || checkFall(monster[i]) == 1 )
            {
                if (monster[i].direction == LEFT)
                {
                    monster[i].direction = RIGHT;
                    changeAnimation(&monster[i], "graphics/monster1right.png");
                }
                else
                {
                    monster[i].direction = LEFT;
                    changeAnimation(&monster[i], "graphics/monster1.png");
                }

            }

            //Déplacement du joueur selon la direction
            if(monster[i].direction == LEFT)
                monster[i].dirX -= 2;
            else
                monster[i].dirX += 2;


            //On sauvegarde les coordonnées du joueur pour gérer le demi-tour
            //avant que mapCollision ne les modifie.
            monster[i].saveX = monster[i].x;

            //On détecte les collisions avec la map comme pour le joueur
            monsterCollisionToMap(&monster[i]);


            //On détecte les collisions avec le joueur
            //Si c'est égal à 1, on tue le joueur... Sniff...
            if (collide(&player, &monster[i]) == 1)
            {
                //On met le timer à 1 pour tuer le joueur intantanément
                player.timerMort = 1;
                playSoundFx(DESTROY);
            }
            else if (collide(&player, &monster[i]) == 2)
            {
                //On met le timer à 1 pour tuer le monstre intantanément
                monster[i].timerMort = 1;
                playSoundFx(DESTROY);
            }


          }

        //Si le monstre meurt, on active une tempo
        if (monster[i].timerMort > 0)
        {
            monster[i].timerMort--;

            /* Et on le remplace simplement par le dernier du tableau puis on
            rétrécit le tableau d'une case (on ne peut pas laisser de case vide) */
            if (monster[i].timerMort == 0)
            {
                /* Libère le sprite */
                if (monster[i].sprite != NULL)
                {
                    SDL_FreeSurface(monster[i].sprite);
                }
                monster[i] = monster[jeu.nombreMonstres-1];
                jeu.nombreMonstres--;
            }
        }
    }

}