예제 #1
0
 public Spielfeld(IEnumerable <ISpieler> spieler)
 {
     Spieler = spieler.ToDictionary(s => s.Socket, s => s);
     InitStapel();
     Austeilen();
     GelegteKarten.Add(Stapel.Dequeue());
     AktiverSpieler = Spieler.Values.First();
 }
예제 #2
0
파일: Spielfeld.cs 프로젝트: Feriixu/PONG
 public void SetSpieler(ISpieler spieler1, ISpieler spieler2)
 {
     if (spieler1 == null)
     {
         throw new ArgumentNullException(nameof(spieler1));
     }
     if (spieler2 == null)
     {
         throw new ArgumentNullException(nameof(spieler2));
     }
     this.spieler1 = spieler1;
     this.spieler2 = spieler2;
 }
예제 #3
0
        public void SpielEnde()
        {
            List <ISpieler> AlleSpielerImSpiel = AllSpieler.Concat(FertigeSpieler).ToList();

            foreach (ISpieler sp in AlleSpielerImSpiel)
            {
                if (sp.Karten.Count > 0)
                {
                    sp.Karten.RemoveAll(x => (true));
                }
            }

            AllSpieler.RemoveRange(0, AllSpieler.Count - 1);
            FertigeSpieler.RemoveRange(0, FertigeSpieler.Count - 1);
            Stapel.Clear();
            GelegteKarten.RemoveRange(0, GelegteKarten.Count - 1);
            AllSpieler = AlleSpielerImSpiel;

            for (int i = 0; i < AllSpieler.Count; i++)
            {
                object ki = AllSpieler.Where(x => x.Ki == true).FirstOrDefault();
                if (ki != null)
                {
                    AllSpieler.Remove(AllSpieler.Where(x => x.Ki == true).FirstOrDefault());
                    i--;
                }
            }
            foreach (ISpieler qwe in AllSpieler)
            {
                qwe.Spielstarten = false;
                var obj  = new { spielEnde = true };
                var json = new JavaScriptSerializer().Serialize(obj);
                qwe.Socket.Send(json);
            }

            if (AllSpieler.Count > 1)
            {
                ISpieler ersterSpieler = AllSpieler.First();
                while (ersterSpieler.Spielstarten != true)
                {
                    Thread.Sleep(200);
                }
                SpielStart();
            }
        }
예제 #4
0
파일: Ball.cs 프로젝트: Feriixu/PONG
 public void SetSpieler(ISpieler spieler1, ISpieler spieler2)
 {
     this.spieler1 = spieler1;
     this.spieler2 = spieler2;
 }
예제 #5
0
 private void WechsleSpieler()
 {
     aktueller_spieler = aktueller_spieler == Spieler1 ? Spieler2 : Spieler1;
 }
예제 #6
0
        private void Spielzug()
        {
            if (AllSpieler.Count == 1)
            {
                SpielNeustart();
            }

            AktiverSpieler = AllSpieler.First();

            if (AktiverSpieler.Aussetzen == true)
            {
                if (AktiverSpieler.Ki == true)
                {
                    ((KI)AktiverSpieler).Aussetzen = false;
                }
                else
                {
                    ((Spieler)AktiverSpieler).Aussetzen = false;
                }
                NächsterSpieler();
            }
            foreach (ISpieler temp in AllSpieler)
            {
                if (temp.Ki == false)
                {
                    if (temp == AktiverSpieler)
                    {
                        temp.TeileSpielStand(GelegteKarten.Last(), true, AllSpieler);
                    }
                    else
                    {
                        temp.TeileSpielStand(GelegteKarten.Last(), false, AllSpieler);
                    }
                }
            }

            if (AktiverSpieler.Ki)
            {
                Stopwatch st = new Stopwatch();
                st.Start();
                while (st.ElapsedMilliseconds < 1500)
                {
                }
                st.Stop();
            }
            NichtGelegt = true;
            Stopwatch stopWatch = new Stopwatch();

            stopWatch.Start();
            while (stopWatch.ElapsedMilliseconds < 20000 && NichtGelegt)
            {
                if (AktiverSpieler.Ki == true)
                {
                    KIMachtZug();
                    break;
                }
                else if (AktiverSpieler.CardIndex != null)
                {
                    IKarte gelegteKarteSpieler = AktiverSpieler.Karten[(int)AktiverSpieler.CardIndex];
                    if (VersuchtKarteLegen(gelegteKarteSpieler))
                    {
                        if (gelegteKarteSpieler.Farbe == KartenFarbe.Schwarz || gelegteKarteSpieler.Typ == KartenTyp.VierZiehen)
                        {
                            int blauCounter = 0;
                            int rotCounter  = 0;
                            int gelbCounter = 0;
                            int grünCounter = 0;
                            foreach (IKarte zk in AktiverSpieler.Karten)
                            {
                                switch (zk.Farbe)
                                {
                                case KartenFarbe.Gelb:
                                    gelbCounter++;
                                    break;

                                case KartenFarbe.Rot:
                                    rotCounter++;
                                    break;

                                case KartenFarbe.Blau:
                                    blauCounter++;
                                    break;

                                case KartenFarbe.Gruen:
                                    grünCounter++;
                                    break;

                                default:
                                    break;
                                }
                            }
                            if (blauCounter > rotCounter && blauCounter > grünCounter && blauCounter > gelbCounter)
                            {
                                gelegteKarteSpieler.Farbe = KartenFarbe.Blau;
                            }
                            else if (rotCounter > blauCounter && rotCounter > grünCounter && rotCounter > gelbCounter)
                            {
                                gelegteKarteSpieler.Farbe = KartenFarbe.Rot;
                            }
                            else if (grünCounter > rotCounter && grünCounter > blauCounter && grünCounter > gelbCounter)
                            {
                                gelegteKarteSpieler.Farbe = KartenFarbe.Gruen;
                            }
                            else
                            {
                                gelegteKarteSpieler.Farbe = KartenFarbe.Gelb;
                            }
                            if (gelegteKarteSpieler.Typ == KartenTyp.VierZiehen)
                            {
                                vierziehenAktiv = true;
                                KartenZiehen   += 4;
                            }
                            LegtKarte(gelegteKarteSpieler);
                        }
                        else
                        {
                            LegtKarte(gelegteKarteSpieler);
                        }
                        break;
                    }
                    else
                    {
                        if (vierziehenAktiv)
                        {
                            for (int i = 0; i < KartenZiehen; i++)
                            {
                                GenugKartenImStapel();
                                AktiverSpieler.ZiehtKarte(Stapel);
                            }
                            KartenZiehen    = 0;
                            vierziehenAktiv = false;
                            ((Spieler)AktiverSpieler).Ziehen    = false;
                            ((Spieler)AktiverSpieler).CardIndex = null;
                        }
                        else
                        {
                            if (AktiverSpieler.Ziehen == true)
                            {
                                break;
                            }
                            GenugKartenImStapel();
                            AktiverSpieler.ZiehtKarte(Stapel);
                            ((Spieler)AktiverSpieler).CardIndex = null;
                        }
                        NächsterSpieler();
                    }
                }
            }
            if (GelegteKarten.Last().Typ == KartenTyp.Ziehen && !NichtGelegt)
            {
                if (AllSpieler[1].Ki)
                {
                    ((KI)AllSpieler[1]).Ziehen = true;
                }
                else
                {
                    ((Spieler)AllSpieler[1]).Ziehen = true;
                }
                if (AktiverSpieler.Ki)
                {
                    ((KI)AktiverSpieler).Ziehen = false;
                }
                else
                {
                    ((Spieler)AktiverSpieler).Ziehen = false;
                }
                KartenZiehen += 2;
            }
            else if (KartenZiehen != 0)
            {
                if (NichtGelegt)
                {
                    for (int i = 0; i < KartenZiehen; i++)
                    {
                        GenugKartenImStapel();
                        AktiverSpieler.ZiehtKarte(Stapel);
                    }
                    vierziehenAktiv = false;
                    KartenZiehen    = 0;
                    if (AktiverSpieler.Ki)
                    {
                        ((KI)AktiverSpieler).Ziehen = false;
                    }
                    else
                    {
                        ((Spieler)AktiverSpieler).Ziehen = false;
                    }
                }
            }
            else if (KartenZiehen == 0 && NichtGelegt)
            {
                GenugKartenImStapel();
                AktiverSpieler.ZiehtKarte(Stapel);
            }
            stopWatch.Stop();
            if (AktiverSpieler.Karten.Count == 0)
            {
                SpielerGewinnt();
                AktiverSpieler.HastGewonnen();
                Spielzug();
            }
            if (AllSpieler.Count > 1)
            {
                if (!AktiverSpieler.Ki)
                {
                    ((Spieler)AktiverSpieler).CardIndex = null;
                }
                NächsterSpieler();
            }
        }