예제 #1
0
void LH_CursorController::virtualKeyPress(QString s)
{
    qDebug() << "LH_CursorController: Virtual Key Press - " << s;
    if( s == "up" ) doMoveUp();
    else if( s == "down" ) doMoveDown();
    else if( s == "left" ) doMoveLeft();
    else if( s == "right" ) doMoveRight();
    else if( s == "sel" ) doSelect();
    else if( s == "act" ) doActivate();
    else if( s == "resel" ) doReselect();
}
예제 #2
0
void Game::evolue(Input& in)
{
    if(endOfAnimation)
        in.setQuit(1);
    
    // Tableau des contrôles des joueurs (clavier)
    SDLKey tabkey[3][5] = 
    { 
        {SDLK_z,SDLK_s,SDLK_q,SDLK_d, SDLK_a}, 
        {SDLK_UP,SDLK_DOWN,SDLK_LEFT,SDLK_RIGHT, SDLK_RSHIFT}, 
        {SDLK_KP8, SDLK_KP5, SDLK_KP4, SDLK_KP6, SDLK_KP7},
    };
    
    // Tableau des controles des joueurs (joystick)
    int tabjoy[] = {1,4,8,2,0};
    
    // Ecoute du clavier et Actions en conséquence
    for(int i=0; i<NB_PLAYERS; i++ )
    {
        // Récupération du joueur i
        Player *p =  mapPlayers[i];
        
        if( p->isAlive() )
        {
            if( in.getNbJoysticks() > 0 && ( i - in.getNbJoysticks() ) < 0 ) {
                // Mouvement vers le haut :
                if( in.getHat(i,0) ==  tabjoy[0] )
                {
                    doMoveUp(p);
                }

                // Mouvement vers le bas :
                if( in.getHat(i,0) ==  tabjoy[1] )
                {
                    doMoveDown(p);
                }

                // Mouvement vers la gauche :
                if( in.getHat(i,0) ==  tabjoy[2] )
                {
                    doMoveLeft(p);
                }

                // Mouvement vers la droite :
                if( in.getHat(i,0) ==  tabjoy[3] )
                {
                    doMoveRight(p);
                }

                // Remise à 0 du sprite, dès qu'on relâche toutes les touches de déplacement
                if( in.getHat(i,0) !=  tabjoy[0] && in.getHat(i,0) !=  tabjoy[1] && in.getHat(i,0) !=  tabjoy[2] && in.getHat(i,0) !=  tabjoy[3] )
                {
                    p->resetSprite();
                }
                
                // Pose d'une bombe
                if( in.getButton(i, tabjoy[4]) )
                {
                    // Remise à 0 de la touche, pour éviter la pose de bombe en restant appuyé :
                    in.resetButton(i,tabjoy[4]);

                    doDropBomb(p);
                }
                
            }   else {
                // Mouvement vers le haut :
                if( in.getKey(tabkey[i][0]) && !in.getKey(tabkey[i][1]) && !in.getKey(tabkey[i][2]) && !in.getKey(tabkey[i][3]))
                {
                    doMoveUp(p);
                }

                // Mouvement vers le bas :
                if( !in.getKey(tabkey[i][0]) && in.getKey(tabkey[i][1]) && !in.getKey(tabkey[i][2]) && !in.getKey(tabkey[i][3]))
                {
                    doMoveDown(p);
                }

                // Mouvement vers la gauche :
                if( !in.getKey(tabkey[i][0]) && !in.getKey(tabkey[i][1]) && in.getKey(tabkey[i][2]) && !in.getKey(tabkey[i][3]))
                {
                    doMoveLeft(p);
                }

                // Mouvement vers la droite :
                if( !in.getKey(tabkey[i][0]) && !in.getKey(tabkey[i][1]) && !in.getKey(tabkey[i][2]) && in.getKey(tabkey[i][3]))
                {
                    doMoveRight(p);
                }

                // Remise à 0 du sprite, dès qu'on relâche toutes les touches de déplacement
                if( !in.getKey(tabkey[i][0]) && !in.getKey(tabkey[i][1]) && !in.getKey(tabkey[i][2]) && !in.getKey(tabkey[i][3]))
                {
                    p->resetSprite();
                }
                
                // Pose d'une bombe
                if( in.getKey(tabkey[i][4] ) )
                {
                    // Remise à 0 de la touche, pour éviter la pose de bombe en restant appuyé :
                    in.resetKey(tabkey[i][4]);

                    doDropBomb(p);	
                }
            }      
        }    
    }
	
    // Mise à jour des bombes
    for(int i = 0; i < mapBombs.size() ; i++ )
    {		
        updateBomb(i);
    }

    // Mise à jour des explosions
    for(int i = 0; i < mapExplosions.size() ; i++ )
    {		
        updateExplosion(i);
    }
    
    // Explosions et personnages
    for(int i = 0; i < mapExplosions.size() ; i++ )
    {
        Explosion *e = mapExplosions[i];

        for(int j = 0; j < e->getCollisionBoxes().size() ; j++ )
        {   
            SDL_Rect box = e->getCollisionBoxes()[j];

            for(int k = 0; k < mapPlayers.size() ; k++)
            {
                Player *p = mapPlayers[k];
                if( p->isAlive() )
                {
                    if( checkCollision( box, p->getBox() ) )
                    {
                        killPlayer(k);
                    }
                }       
            }   
        }
    }
    
    // Test du gagnant
    if( nbPlayersAlive == 1 )
    {
        int indexWinner;
        bool win = false;
        for( int i = 0 ; i < mapPlayers.size() ;  i++)
        {
            if( mapPlayers[i]->isAlive() )
            {
                indexWinner = i;
                win =true;
            }
            
            if( win ) break;
        }
        
        if(title == NULL)
        {
            title = new AnimationPlayer("img/animations/players/player%d-wins-%d.png", indexWinner+1, 42);
            endOfGame = true;
        }
    }
}