示例#1
0
文件: Spiel.cs 项目: dcadis/MsgTests
 /// <summary>
 /// Checks the board for a winner or a draw, and updates the game state accordingly.
 /// Überprüft das Spielbrett auf einen Gewinner oder ein Unentschieden und aktualisiert den Spielstatus entsprechend.
 /// </summary>
 /// <returns>True if there was a win or draw, false otherwise.</returns>
 private bool CheckForWinOrDraw()
 {
     if (this.Spielbrett != null)
     {
         for (int X = 0; X <= this._Spielbrett.Spielsteine.GetUpperBound(0); X++)
         {
             for (int Y = 0; Y <= this._Spielbrett.Spielsteine.GetUpperBound(1); Y++)
             {
                 var discCurrentlyChecking = this._Spielbrett.Spielsteine[X, Y];
                 if (discCurrentlyChecking != null)
                 {
                     if (this.gewinnAlgoritmus != null &&
                         this.gewinnAlgoritmus.Any(algo => algo.PruefenGewinnbedingung(this._Spielbrett, discCurrentlyChecking)))
                     {
                         this._AkutellesStatus = discCurrentlyChecking.Seite == Enums.Seiten.Red ?
                                                 Enums.SpielStatus.RedWins :
                                                 Enums.SpielStatus.YellowWins;
                         return(true);
                     }
                 }
             }
         }
         // Check for a draw
         if (this._Spielbrett.IstVoll)
         {
             this._AkutellesStatus = Enums.SpielStatus.Draw;
             return(true);
         }
     }
     return(false);
 }
示例#2
0
文件: Spiel.cs 项目: dcadis/MsgTests
        /// <summary>
        /// Spielstein zu Spielnrett hinzufuegen
        /// </summary>
        /// <param name="spielstein"></param>
        /// <param name="spalteIndex"></param>
        public void AddSpielstein(Spielstein spielstein, int spalteIndex)
        {
            if (this._AkutellesStatus != Enums.SpielStatus.KeinSpielstein &&
                this._AkutellesStatus != Enums.SpielStatus.RedsTurn &&
                this._AkutellesStatus != Enums.SpielStatus.YellowsTurn)
            {
                throw new SpielBeebdetException(String.Format("Das Spiel ist bereits beendet! {0}", SpielStatus));
            }

            Console.WriteLine(string.Format("Spielstein {0}", spielstein));
            if (this._AkutellesStatus == Enums.SpielStatus.YellowsTurn && spielstein.Seite == Enums.Seiten.Red)
            {
                throw new FalscherSpielerzugException("Derzeit ist Gelb an der Reihe. Spielen Sie ein gelbes Spielstein ab.");
            }
            else if (this._AkutellesStatus == Enums.SpielStatus.RedsTurn && spielstein.Seite == Enums.Seiten.Yellow)
            {
                throw new FalscherSpielerzugException("Derzeit ist Rot an der Reihe. Spielen Sie eine rotes Spielstein ab.");
            }

            this._Spielbrett.AddSpielstein(spielstein, spalteIndex);

            if (!CheckForWinOrDraw()) // Need to switch the sides that are currently playing around
            {
                if (this._AkutellesStatus == Enums.SpielStatus.KeinSpielstein)
                {
                    this._AkutellesStatus = spielstein.Seite == Enums.Seiten.Red ? Enums.SpielStatus.YellowsTurn : Enums.SpielStatus.RedsTurn;
                }
                else if (this._AkutellesStatus == Enums.SpielStatus.RedsTurn)
                {
                    this._AkutellesStatus = Enums.SpielStatus.YellowsTurn;
                }
                else
                {
                    this._AkutellesStatus = Enums.SpielStatus.RedsTurn;
                }
            }
        }
示例#3
0
文件: Spiel.cs 项目: dcadis/MsgTests
        /// <summary>
        /// Konstructor.
        /// </summary>
        /// <param name="Zeilen">Zeilen nummer fuer Spielbrett (>0)</param>
        /// <param name="Spalten">Spalte nummer fuer Spielbrett</param>
        public Spiel(int Zeilen, int Spalten)
        {
            if (Zeilen <= 0 || Spalten <= 0)
            {
                throw new InvalidSpielbrettDimensionsException("Die Höhe und Breite der Spielbrett muss größer als 0 sein.");
            }

            if (Zeilen < STEINLAENGE || Spalten < STEINLAENGE)
            {
                throw new InvalidSpielbrettDimensionsException("Spielbrett ist zu klein.");
            }

            this.gewinnAlgoritmus = new List <IGewinnAlgoritmus>()
            {
                new DiagonalGewinnAlgoritmus(),
                new HorizontalGewinnAlgoritmus(),
                new VerticalGewinnAlgoritmus()
            };

            this._Zeilen          = Zeilen;
            this._Spalten         = Spalten;
            this._AkutellesStatus = Enums.SpielStatus.KeinSpielstein;
            _Spielbrett           = new Spielbrett(Zeilen, Spalten);
        }