예제 #1
0
int chooseAlienToKill(int x, int y){
	int i;
	int* alienBMP;
	for(i = 0; i < ALIEN_ROWS*ALIENS_PER_ROW; i++){
		if(alienArray[i] > DEAD_ALIEN){
			if((y >= (alienOriginY + i/ALIENS_PER_ROW*ALIEN_HEIGHT)) && (y < (alienOriginY + i/ALIENS_PER_ROW*ALIEN_HEIGHT+ALIEN_HEIGHT))){
				//xil_printf("Made it into checking the alien Y bounds for alien %d.\n\r",i);
				int myLeftBound = alienOriginX + i%ALIENS_PER_ROW*ALIEN_WIDTH;
				int myRightBound = alienOriginX + i%ALIENS_PER_ROW*ALIEN_WIDTH+ALIEN_WIDTH;
				if((x >= (myLeftBound)) && (x < (myRightBound))){
					if(DB_ON1){ xil_printf("You've hit alien %d! Blarg!\n\r",i);}
					/*alienArray[i] = DEAD_ALIEN;
					return 1;*/
					switch(alienArray[i]){
					case BIG_SQUID:
						alienBMP = (alienInOut == 0 ? bigSquidIn :
						bigSquidOut);
						addToScore(HIT_BIG_SQUID);
						break;
					case LITTLE_SQUID:
						alienBMP = (alienInOut == 0 ? littleSquidIn :
						littleSquidOut);
						addToScore(HIT_SMALL_SQUID);
						if(DB_ON1) xil_printf("We're in the little squid space.\n\r");
						break;
					case JUMPING_JACK:
						alienBMP = (alienInOut == 0 ? jumpingJackIn :
						jumpingJackOut);
						addToScore(HIT_JUMPING_JACK);
						break;
					default:
						alienBMP = noAlien;
						break;
					}
					alienArray[i] = DEAD_ALIEN;   //i like boys
					activeInvaderDieSound(); //activeInvaderDieSound();
					drawAliens();
					lastAlienKilled = i;

					return 1;
				}
			}

		}
	}

	return 0;
}
예제 #2
0
void Player::bonusCollisionCheck()
{
	if (!getExplosionState()){
		//Bonus objects
		if (spriteCollision(&playerSprite, &getStarSprite())){
			addToScore((500 * difficulty) * (hardcore + 1));
			resetAdditionText(((500 * difficulty) * (hardcore + 1)) / 10, 0);
			playScoreSound();
			resetStar();
		}	
		if (spriteCollision(&playerSprite, &getFuelSprite())){
			increaseFuel(25);
			resetAdditionText(25, 2);
			playFuelSound();
			resetFuelSprite();
			playedShutdownSound = false;
		}
		if (spriteCollision(&playerSprite, &getHealthSprite())){
			increaseHealth(10);
			resetAdditionText(10, 1);
			playHealSound();
			resetHealthSprite();
		}
	}
}
예제 #3
0
//Fais passer le jeu au niveau suivant.
//Ajouter ici des sons.
void CJeu::niveauSuivant()
{
    int i;
    addToScore(SC_NIVEAU);
    m_iNiveau+=1;
    makeChiffre(m_pNiveau,m_iNiveau);

    setDureeAttente();


    m_iNbVies+=2;
    if (m_iNbVies>MAX_VIES) m_iNbVies=MAX_VIES;

    for (int i=0;i<MAX_BALLES;i++)
    {
        if (myBalle[i].getStatutBalle()==1)
        {
            myBalle[i].setSpeed(getVitesseBalle());
        }
    }
    i=0;
    while (myBalle[i].getStatutBalle()==1)
    {
        i++;
    }

    if (m_iNbBalles<MAX_BALLES)
    {
        myBalle[i].startBalle(myRaquette.GetRect()->x + myRaquette.GetRect()->w/2,myRaquette.GetRect()->y-myBalle[0].GetRect()->h,getVitesseBalle());
        m_iNbBalles++;
    }

    mySon.playEffet(S_NIVEAU);

}
예제 #4
0
void GameScreen::update(float deltaTime)
{
    for (std::vector<TouchEvent>::iterator itr = m_touchEvents.begin(); itr != m_touchEvents.end(); itr++)
    {
        if (m_touchEventsPool.size() < 50)
        {
            m_touchEventsPool.push_back(*itr);
        }
    }

    m_touchEvents.clear();
    m_touchEvents.swap(m_touchEventsBuffer);
    m_touchEventsBuffer.clear();

    m_backgroundElements->update(deltaTime);

    switch (m_gameState)
    {
    case RUNNING:
        updateRunning(deltaTime * m_timeButton->getSpeedScalar());
        updateInputRunning();

        if (World::getInstance()->getScoredEarnedThisFrame() > 0)
        {
            addToScore(World::getInstance()->getScoredEarnedThisFrame());
        }

        if (World::getInstance()->getTimesCoreShipModuleHitThisFrame() > 0)
        {
            for (int i = 0; i < World::getInstance()->getTimesCoreShipModuleHitThisFrame(); i++)
            {
                coreShipModuleHit();
            }
        }
        break;
    case PAUSED:
        updateInputPaused();
        break;
    case GAME_OVER:
        updateInputGameOver();
        break;
    }
}
예제 #5
0
ScreenPoint tankBulletCollision(){//returns the number of the bunker you hit
	ScreenPoint myPoint;
	myPoint.xcoord = -1;
	myPoint.ycoord = -1;

	//check if in range of the aliens
	if(((tankBullet.y+BULLET_HEIGHT) >= alienOriginY) && (tankBullet.y <= (alienOriginY+ALIEN_HEIGHT*ALIEN_ROWS))){

		int row, col;
		if(((tankBullet.x+BULLET_WIDTH) >= (alienOriginX + ALIEN_WIDTH * firstColAliveAliens)) && (tankBullet.x <= (alienOriginX + ALIEN_WIDTH * (lastColAliveAliens+1)))){
			for(row = BULLET_HEIGHT-1; row >= 0; row--){
				for(col = 0; col < BULLET_WIDTH; col++){
					if((tankBulletSymbol[row % BULLET_HEIGHT] & (1<<(BULLET_WIDTH-1-col)))){
						if(chooseAlienToKill(tankBullet.x + col, tankBullet.y + row)){
							myPoint.xcoord = tankBullet.x + col;
							myPoint.ycoord = tankBullet.y + row;
							return myPoint;
						}
					}
				}
			}
		}
	}

	//check if in range of mothership
	if(((tankBullet.y+BULLET_HEIGHT) >= redSpaceshipOriginY) && (tankBullet.y <= (redSpaceshipOriginY+RED_SPACESHIP_HEIGHT))){
		int row, col;
		if((((tankBullet.x+BULLET_WIDTH) >= redSpaceshipOriginX) && (tankBullet.x <= (redSpaceshipOriginX+RED_SPACESHIP_WIDTH)))){
			for(row = BULLET_HEIGHT-1; row >= 0; row--){
				for(col = 0; col < BULLET_WIDTH; col++){
					if((tankBulletSymbol[row % BULLET_HEIGHT] & (1<<(BULLET_WIDTH-1-col)))){
						if(destroyRedSpaceship(tankBullet.x + col, tankBullet.y + row)){
							addToScore(HIT_RED_SPACESHIP);
							drawRedSpaceshipScore(YELLOW);
							myPoint.xcoord = tankBullet.x + col;
							myPoint.ycoord = tankBullet.y + row;
							return myPoint;
						}
					}
				}
			}
		}
	}

	//check if in the range of the bunkers
	if(((tankBullet.y+BULLET_HEIGHT) >= BUNKER_INITIAL_Y) && (tankBullet.y <= (BUNKER_INITIAL_Y+BUNKER_HEIGHT*3))){
		int row, col;
		if((((tankBullet.x+BULLET_WIDTH) >= BUNKER0_INITIAL_X) && (tankBullet.x <= (BUNKER0_INITIAL_X+4*BUNKER_WIDTH)))){//bunker 0
			for(row = BULLET_HEIGHT-1; row >= 0; row--){
				for(col = 0; col < BULLET_WIDTH; col++){
					if((tankBulletSymbol[row % BULLET_HEIGHT] & (1<<(BULLET_WIDTH-1-col)))){

						if(chooseBunkerBlockToDamage(tankBullet.x + col, tankBullet.y + row)){
							myPoint.xcoord = tankBullet.x + col;
							myPoint.ycoord = tankBullet.y + row;
							return myPoint;
						}
						/*if(framePointer0[(tankBullet.y + row)*640 + (tankBullet.x+col)] == GREEN){
							myPoint.xcoord = tankBullet.x + col;
							myPoint.ycoord = tankBullet.y + row;
							return myPoint;
						}*/
					}
				}
			}
		}
		else if((((tankBullet.x+BULLET_WIDTH) >= BUNKER1_INITIAL_X) && (tankBullet.x <= (BUNKER1_INITIAL_X+4*BUNKER_WIDTH)))){//bunker 1
			for(row = BULLET_HEIGHT-1; row >= 0; row--){
				for(col = 0; col < BULLET_WIDTH; col++){
					if((tankBulletSymbol[row % BULLET_HEIGHT] & (1<<(BULLET_WIDTH-1-col)))){
						if(chooseBunkerBlockToDamage(tankBullet.x + col, tankBullet.y + row)){
							myPoint.xcoord = tankBullet.x + col;
							myPoint.ycoord = tankBullet.y + row;
							return myPoint;
						}
						/*if(framePointer0[(tankBullet.y + row)*640 + (tankBullet.x+col)] == GREEN){
							myPoint.xcoord = tankBullet.x + col;
							myPoint.ycoord = tankBullet.y + row;
							return myPoint;
						}*/
					}
				}
			}
		}
		else if((((tankBullet.x+BULLET_WIDTH) >= BUNKER2_INITIAL_X) && (tankBullet.x <= (BUNKER2_INITIAL_X+4*BUNKER_WIDTH)))){//bunker 2
			for(row = BULLET_HEIGHT-1; row >= 0; row--){
				for(col = 0; col < BULLET_WIDTH; col++){
					if((tankBulletSymbol[row % BULLET_HEIGHT] & (1<<(BULLET_WIDTH-1-col)))){
						if(chooseBunkerBlockToDamage(tankBullet.x + col, tankBullet.y + row)){
							myPoint.xcoord = tankBullet.x + col;
							myPoint.ycoord = tankBullet.y + row;
							return myPoint;
						}
						/*if(framePointer0[(tankBullet.y + row)*640 + (tankBullet.x+col)] == GREEN){
							myPoint.xcoord = tankBullet.x + col;
							myPoint.ycoord = tankBullet.y + row;
							return myPoint;
						}*/
					}
				}
			}
		}else if((((tankBullet.x+BULLET_WIDTH) >= BUNKER3_INITIAL_X) && (tankBullet.x <= (BUNKER3_INITIAL_X+4*BUNKER_WIDTH)))){//bunker 3
			for(row = BULLET_HEIGHT-1; row >= 0; row--){
				for(col = 0; col < BULLET_WIDTH; col++){
					if(chooseBunkerBlockToDamage(tankBullet.x + col, tankBullet.y + row)){
						myPoint.xcoord = tankBullet.x + col;
						myPoint.ycoord = tankBullet.y + row;
						return myPoint;
					}
					/*if(framePointer0[(tankBullet.y + row)*640 + (tankBullet.x+col)] == GREEN){
						myPoint.xcoord = tankBullet.x + col;
						myPoint.ycoord = tankBullet.y + row;
						return myPoint;
					}*/
				}
			}
		}
		else{
			return myPoint; //no collision
		}

	}
	//check if in range of the aliens
	else{
		return myPoint; //no collision
	}
	return myPoint;
}
예제 #6
0
//La gestion de la balle doit prendre en compte les différents éléments du terrain... Pas facile facile...
//Il faut de plus détruire les briques touchées.
void CJeu::deplacerBalle(const int& iElapsedTime)
{
    int nbCaseDetruites;
    SDL_Rect* raqRect = myRaquette.GetRect();
    int raqMidX=raqRect->x + raqRect->w/2;
    //Ajouter ici éventuellement une boucle pour gérer plusieurs balles.

    //Il faut gérer les collisions avec les briques, les murs, et la perte des balles.
    //Tous ceci se fait dans la fonction de déplacement de la balle.
    //On lui enverra en paramètre le terrain, pour qu'elle puisse procéder a ses test.
    for (int i=0;i<MAX_BALLES;i++)
    {
        if (myBalle[i].getStatutBalle()==1)
        {
            //Indique que la balle a été détruite.
            if (myBalle[i].deplacer(iElapsedTime,myTerrain,raqRect,mySon,myBonus)==true)
            {
                m_iNbBalles--;
                mySon.playEffet(S_PERDU_BALLE);
            }
            //Indique les destructions que la balle a causée.
            if (myTerrain.getBalleDestruction(nbCaseDetruites)==true)
            {
                mySon.playEffet(S_CASSE_LIGNE);
                addToScore(SC_LIGNE_BALLE);
                addLignes(1);
            }
            if (nbCaseDetruites!=0) {mySon.playEffet(S_CASSE_BRIQUE);}
            addToScore(nbCaseDetruites*SC_CASE_CASSEE);
        }
    }
    //On remet en jeu une nouvelle balle.
    //On baisse les vies.
    //+ animations ?
    if (m_iNbBalles==0 && m_iNiveau!=0)
    {

        m_iNbVies--;

        //Game Over !!!!!
        if (m_iNbVies==-1)
        {
            playing=false;
        }
        else
        {
            m_iNbBalles++;
            myBalle[0].startBalle(raqMidX,raqRect->y-myBalle[0].GetRect()->h,getVitesseBalle());
        }
    }

    //Gestion des bonus est faites en même temps que la gestion des balles.
    int bonusObtenu[MAX_BONUS];
    int nbBonus=myBonus.deplacerBonus(bonusObtenu, iElapsedTime, raqRect);
    if (nbBonus>0)
    {
        mySon.playEffet(S_GAGNE_BONUS);
        for (int i=0;i<nbBonus;i++)
        {
            addToScore(SC_BONUS);
            switch (bonusObtenu[i])
            {
                case B_ADD_BALLE:
                    if (m_iNbBalles<MAX_BALLES)
                    {
                        int i=0;
                        while (myBalle[i].getStatutBalle()==1)
                        {
                            i++;
                        }
                        myBalle[i].startBalle(raqMidX,raqRect->y-myBonus.GetSurface()->h,getVitesseBalle());
                        m_iNbBalles++;
                    }
                break;
                case B_ACC_BALLE:
                    for (int i=0;i<MAX_BALLES;i++)
                    {
                        if (myBalle[i].getStatutBalle()==1)
                        {
                            myBalle[i].setSpeed(getVitesseBalle()+0.05);
                        }
                    }
                break;
                case B_RAL_BALLE:
                    for (int i=0;i<MAX_BALLES;i++)
                    {
                        if (myBalle[i].getStatutBalle()==1)
                        {
                            double temp=getVitesseBalle()-0.2;
                            if (temp<0.1) temp=0.1;
                            myBalle[i].setSpeed(temp);
                        }
                    }
                break;
                case B_ADD_SCORE:
                    addToScore(SC_BONUS_SCORE);
                    break;
                case B_ADD_LIFE:
                    if (m_iNbVies<MAX_VIES) m_iNbVies++;
                break;
                case B_DELETE_LINE:
                    flipFigure();
                        //Supprime deux demi lignes.
                        myTerrain.deleteLine(NBCASEY-1,false);
                        myTerrain.deleteLine(NBCASEY-1,true);
                    flipFigure();
                break;
                case B_BLOQUE_STRAFE:
                    //On bloque la figure latéralement pendant 10 secondes.
                    m_iLastStrafe+=10000;
                break;
                case B_SMALL_RAQ:
                    myRaquette.changerLargeur(1, myTerrain.GetRect());
                    modifRaquette=st_get_ticks();
                break;
                case B_LARGE_RAQ:
                    myRaquette.changerLargeur(4, myTerrain.GetRect());
                    modifRaquette=st_get_ticks();
                break;
                case B_EXTRA_LARGE_RAQ:
                    myRaquette.changerLargeur(10, myTerrain.GetRect());
                    modifRaquette=st_get_ticks();
                break;
                case B_EXTRA_SMALL_RAQ:
                    myRaquette.changerLargeur(0, myTerrain.GetRect());
                    modifRaquette=st_get_ticks();
                break;
            }
        }
    }

}
예제 #7
0
//déplacements de la figure.
bool CJeu::allMoveFigure(int moveStrafe,bool bas,bool rotation, bool down)
{

    long tempsActuel;
    int nbLignesFull;
    bool testDescente;
    int nbDescentes;
    bool nouvelleFigure=false;

    tempsActuel=st_get_ticks();
    if (moveStrafe!=0)
    {
        if ((tempsActuel-m_iLastStrafe)>=2*m_iDureeStrafe)
        {
            m_iLastStrafe=tempsActuel+2*m_iDureeStrafe;
            if (myTerrain.moveFigure(moveStrafe,0)==true)
                mySon.playEffet(S_STRAFE);
        }
        else if ((tempsActuel-m_iLastStrafe)>=m_iDureeStrafe)
        {
            m_iLastStrafe=tempsActuel;
            if (myTerrain.moveFigure(moveStrafe,0)==true)
                mySon.playEffet(S_STRAFE);
        }
    }

    if (down==true)
    {
        nbDescentes=0;
        while (myTerrain.moveFigure(0,1)==true)
        {
            nbDescentes++;
        }
        addToScore(SC_DESCENTE*nbDescentes);
        //On force le test de descente d'une ligne, qui fait poser la pièce.
        m_iLastDescente=tempsActuel-m_iDureeAttente;
    }
    else
    {
        if (bas==true && ((tempsActuel-m_iLastChute)>=m_iDureeChute))
        {
            m_iLastChute=tempsActuel;
            testDescente=myTerrain.moveFigure(0,1);
            if (testDescente==false)
		{
			m_iLastDescente=tempsActuel-m_iDureeAttente;
		}
        }
    }

    if (rotation==true)
    {
        if (myTerrain.rotationFigure()==true)
            mySon.playEffet(S_ROTATION);
    }

    if (tempsActuel-m_iLastDescente>=m_iDureeAttente)
    {
        m_iLastDescente=tempsActuel;
        if (myTerrain.moveFigure(0,1)==false)
        {
            nouvelleFigure=true;
            mySon.playEffet(S_POSE_BRIQUE);
            if (myTerrain.dropFigure()==true)
            {
                nbLignesFull=myTerrain.findFullLine();
                myTerrain.findEmptyLine(); //Ne fais pas de points, car les lignes la ont été cassées en vol par le tetris.
                //Jouer eventuellement un son.
                switch (nbLignesFull)
                {
                    case 0:break;
                    case 1:
                        addToScore(SC_LIGNE_1);
                        mySon.playEffet(S_CASSE_LIGNE);
                    break;
                    case 2:
                        addToScore(SC_LIGNE_2);
                        mySon.playEffet(S_CASSE_LIGNE);
                    break;
                    case 3:
                        addToScore(SC_LIGNE_3);
                        mySon.playEffet(S_CASSE_LIGNE);
                    break;
                    case 4:
                        addToScore(SC_LIGNE_4);
                        mySon.playEffet(S_CASSE_LIGNE);
                    break;
                }
                addLignes(nbLignesFull);

                //Vérifions maintenant si le terrain est vide.
                //Si c'est le cas, on va le remplir un peu pour rendre le jeu plus marant.
                if (myTerrain.isEmptyTerrain()==true)
                {
                    myTerrain.rndFillTerrain(4);
                    addToScore(SC_EMPTY_TERRAIN);
                }
            }
            else
            {
                playing=false;
            }
        }
    }

    return nouvelleFigure;
}
예제 #8
0
파일: MGameMode.cpp 프로젝트: bastla/CuteCW
void MGameMode::nextTurn(int addition)
{
  addToScore(addition);
}