コード例 #1
0
ファイル: Case.cs プロジェクト: Heliex/Tetris
        private Piece piece; // Une case peut être lié à une piece

        #endregion Fields

        #region Constructors

        // COnstructeur de case
        public Case(int x, int y, Piece piece = null)
        {
            this.x = x;
            this.y = y;
            this.piece = piece;
            estColore = false;
        }
コード例 #2
0
ファイル: Jeu.cs プロジェクト: Heliex/Tetris
        // Methode de jeu principale
        public void lancerJeu()
        {
            while (!estPerdu) // Boucle infinie
            {
                resetEvent.WaitOne(); // Attente d'un signal
                double palier = Math.Round(COMPTEUR_LIGNE_COMPLETE / 10.0) * 10; // Définission du niveau
                if (intervalle[palier] > 50) // Si le niveau est supérieur a 50ms d'intervalle
                {
                    Thread.Sleep(intervalle[palier]); // Alors on le set avec le dictionnaire
                }
                else
                {
                    Thread.Sleep(50); // Sinon on le set a 50
                }

                if (pieceCourante.PeuxDescendre()) // Si la piece peux descendre
                {
                    pieceCourante.descendre();
                    for (int i = 0; i < NB_CASE_HAUTEUR; i++) // Parcours de chaque ligne
                    {
                        if (ligneEstComplete(plateau, i)) // Si elle est complete
                        {
                            IWavePlayer waveOut = new WaveOut();
                            AudioFileReader reader = new AudioFileReader("Musiques/lineComplete.mp3");
                            waveOut.Init(reader);
                            waveOut.Play();
                            COMPTEUR_LIGNE_COMPLETE++;
                            score += pointLigneComplete;
                            // Suppression de la ligne
                            for (int j = 0; j < NB_CASE_LARGEUR; j++)
                            {
                                plateau[j, i].estColore = false;
                            }
                            // Décaler toutes les lignes au dessus dans le plateau
                            decalerLignesAuDessus(i);
                            OnLineCompleteEvent(new LigneCompleteEvent());
                        }
                    }
                }
                else if (gameOver()) // Sinon si gameOver
                {
                    pieceApres = null;
                    pieceCourante.decolorerPiece(); // On décolore la piece
                    estPerdu = true;
                    RaiseCustomEvent = null; // On supprime les evenements
                    waveOutDevice.Stop(); // On arrête la musique de Tetris

                    new Task(() =>
                    {
                        AudioFileReader reader = new AudioFileReader("Musiques/gameover.wav");
                        WaveOut newWaveOut = new WaveOut();
                        newWaveOut.Init(reader);
                        newWaveOut.Play();
                    }).Start(); // Et on lance de façon asynchrone la musique de gameOver

                    for (int i = 0; i < NB_CASE_HAUTEUR; i++)
                    {
                        for (int j = 0; j < NB_CASE_LARGEUR; j++)
                        {
                            plateau[j, i].estColore = false;
                        }
                    }
                    OnGameOverEvent(new GameOverEvent()); // On notifie l'evenement GameOver
                }
                else // Sinon on doit faire apparaitre la pièce suivante
                {
                    score += pointFinish;
                    // Parcours de la piece
                    for (int i = 0; i < pieceCourante.hauteurPiece; i++) // On inscris la pièce dans le plateau
                    {
                        for (int j = 0; j < pieceCourante.largeurPiece; j++)
                        {
                            Case c = pieceCourante.representation[j, i];
                            if (c.estColore)
                            {
                                if (c.y < 16)
                                {
                                    plateau[c.x, c.y] = c;
                                    if (plateau[c.x, c.y].estColore && c.y == 0)
                                    {
                                        estPerdu = true;
                                    }
                                }
                            }
                        }
                    }
                    pieceCourante = pieceApres;
                    pieceApres = pieceSuivante();// On génére la pièce suivante
                    OnPieceSuivanteEvent(new PieceSuivanteEvent());
                    OnPeuxDescendreEvent(new PeuxDescendreEvent());
                }
                OnRaiseCustomEvent(new RafraichirGUIEvent()); // Rafraichissement du GUI
            }
        }
コード例 #3
0
ファイル: Case.cs プロジェクト: Heliex/Tetris
 // Permet de copier une case (Utile pour le décalage de ligne dans le plateau)
 public void ClonerCase(Case aCloner)
 {
     this.estColore = aCloner.estColore;
     this.piece = aCloner.piece;
 }