示例#1
0
void BlocAliens::deplacer() {
	effacer();
	for (int ligne = 0; ligne < hauteur; ligne++) {
		for (int colonne = ecartGauche; colonne < ecartGauche + largeur;
				colonne++) {
			if (getAlien(ligne, colonne) != NULL) {
				getAlien(ligne, colonne)->deplacerPosition(direction);
			}
		}
	}
	dessiner();
	switch (direction) {
	case DEPL_BAS:
		positionLigne++;
		break;
	case DEPL_HAUT:
		positionLigne--;
		break;
	case DEPL_DROITE:
		positionColonne++;
		break;
	case DEPL_GAUCHE:
		positionColonne--;
		break;
	}
}
示例#2
0
void BlocAliens::effacer() {
	for (int ligne = 0; ligne < hauteur; ligne++) {
		for (int colonne = ecartGauche; colonne < ecartGauche + largeur;
				colonne++) {
			if (getAlien(ligne, colonne) != NULL) {
				getAlien(ligne, colonne)->effacer();
			}
		}
	}
}
示例#3
0
void BlocAliens::ajusterVitesse() {
	for (int i = 2; i <= 4; i *= 2) {
		if (nombreAliensInitial != 1) {
			if (nombreAliens <= nombreAliensInitial / i)
				timer->setTimerDeplacementAliens(vitesseBlocInitiale / (i));
		} else {
			if (getAlien(0, 0)->getPointsDeVie()
					<= getAlien(0, 0)->getPointsDeVieInitiaux() / i)
				timer->setTimerDeplacementAliens(vitesseBlocInitiale / (i));
		}
	}
}
示例#4
0
void BlocAliens::tirerMissile() {
	int posC = 0;
	int posL = 0;
	int compteur = 0;

	if (largeur == hauteur == 1) {
		if (nombreAliensInitial == 1)
			posC = positionColonne + 4;
		else
			posC = positionColonne + 2;
		posL = positionLigne + 3;
	} else {
		bool alienPresent = false;
		int numCol = 0;
		do {
			numCol = random.nextInt(largeur) + ecartGauche;
			for (int i = 0; i < hauteur; i++) {
				if (getAlien(i, numCol) != NULL) {
					alienPresent = true;
					posL = getPositionLigne() + (i + 1) * (ALIGN_VERT) - 1;
				}
			}
			compteur++;
		} while (!alienPresent && compteur < 10);
		posC = (numCol - 1) * ALIGN_HORI + 1 + getPositionColonne();
	}
	MissileAlien::lancerNouveauMissile(posL, posC);
}
示例#5
0
void checkGunnerWin() {
    int x, y;
    for(x = 0; x < ALIEN_COLS; x++) {
        for(y = 0; y < ALIEN_ROWS; y++) {
            struct Alien a = getAlien(pSramAliens, y, x);
            if(a.alive) {
                return;
            }
        }
    }
    gameOver = 2;
}
示例#6
0
int BlocAliens::calculerNombreAliensRestants() {
	int sommeAliens = 0;
	for (int ligne = 0; ligne < hauteur; ligne++) {
		for (int colonne = ecartGauche; colonne < ecartGauche + largeur;
				colonne++) {
			if (getAlien(ligne, colonne) != NULL)
				sommeAliens++;
		}
	}
	nombreAliens = sommeAliens;
	return nombreAliens;
}
示例#7
0
void checkCollideAliens(int pSramAliens, int x) {
    int y;
    for(y = ALIEN_ROWS - 1; y >= 0; y--) {
        struct Alien a = getAlien(pSramAliens, y, (x + (7-alienShift)) % ALIEN_COLS);
        if(a.alive) {
            //printf("KILL (%i, %i)\n", (x + (7-alienShift)) % ALIEN_COLS, y);
            a.alive = 0;
            setAlien(pSramAliens, y, (x + (7-alienShift)) % ALIEN_COLS, a);
            break;
        }
    }
    //checkGunnerWin();
}
示例#8
0
void BlocAliens::ajusterDimensionEnBas() {
	if (hauteur == 0)
		return;
	int somme = 0;
	for (int i = ecartGauche; i < ecartGauche + largeur; i++) {
		if (getAlien(hauteur - 1, i) != NULL)
			somme++;
	}
	if (somme == 0) {
		hauteur--;
		ajusterDimensionEnBas();
	}
}
示例#9
0
void BlocAliens::ajusterDimensionADroite() {
	if (largeur == 0)
		return;
	int somme = 0;
	for (int i = 0; i < hauteur; i++) {
		if (getAlien(i, largeur + ecartGauche - 1) != NULL)
			somme++;
	}
	if (somme == 0) {
		largeur--;
		ajusterDimensionADroite();
	}
}