/// <summary> /// Part une nouvelle partie en lancant une nouvelle pièce et ensuite en démarrant l'horloge. /// Lance un événement pour changer le niveau si besoin /// </summary> public void NouvellePartie() { for (int i = 1; i < m_uses.Length - 1; i++) { m_uses[i] = 0; } m_uses[1] = 1; //les escaliers m_uses[2] = 1; m_uses[0] = m_uses[8] = int.MaxValue; //carré vide et grisé Niveau = NiveauDepart; m_rangees = 0; m_score = 0; freezeTick = false; m_grilleBonus.Clear(); if (NiveauChanged != null) { NiveauChanged.Invoke(this, EventArgs.Empty); } Clear(); pieceSuivante = pieceCourante = pieceBonus = null; PieceSuivante(); DessinerPieceCourante(); tmrDrop.Start(); tmrDrop.Interval = m_tabDelaiParNiveau[m_niveau]; tmrKeyRepeatLeft.Enabled = false; tmrKeyRepeatRight.Enabled = false; Focus(); }
/// <summary> /// Pour chaque ligne /// Si une seule cellule d’une ligne est vide, on ne supprime pas cette ligne. /// S’il faut supprimer une ligne : on utilise la méthode SupprimerUneLigne(ligne). /// Une fois toutes les lignes supprimées, on redessine toute la grille. /// </summary> public void SupprimerLignesPleines() { int lignes = 0; for (int row = 0; row < RowCount; row++) { bool lignePleine = true; for (int col = 0; col < ColumnCount; col++) { if (this[row, col] == CARRE_VIDE) { lignePleine = false; break; } } if (lignePleine) { SupprimerLaLigne(row); lignes++; } } m_rangees += lignes; m_score += lignes * lignes * 25 * (Niveau + 1); while (m_rangees >= m_tabNbLignesParNiveau[Niveau]) { Niveau++; } if (NiveauChanged != null) { NiveauChanged.Invoke(this, EventArgs.Empty); } }