示例#1
0
 protected bool IsRand(Veld veld, Bord bord)
 {
     if (veld == bord[0, 1] || veld == bord[1, 0] || veld == bord[1, 2] || veld == bord[2, 1])
     {
         return(true);
     }
     return(false);
 }
示例#2
0
 protected bool IsHoek(Veld veld, Bord bord)
 {
     if (veld == bord[0, 0] || veld == bord[2, 2] || veld == bord[2, 0] || veld == bord[0, 2])
     {
         return(true);
     }
     return(false);
 }
示例#3
0
 protected bool ZijnOpposRanden(Veld veld1, Veld veld2, Bord bord)
 {
     if (veld1 == bord[0, 1] && veld2 == bord[2, 1] || veld1 == bord[1, 0] && veld2 == bord[1, 2] ||
         veld2 == bord[0, 1] && veld1 == bord[2, 1] || veld2 == bord[1, 0] && veld1 == bord[1, 2])
     {
         return(true);
     }
     return(false);
 }
示例#4
0
 protected bool IsCenter(Veld veld)
 {
     if (veld.Kolom == 2 && veld.Rij == 2)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
示例#5
0
 protected Veld Vork(Veld randofhoek, Veld hoek, Bord bord)
 {
     if (randofhoek.Kolom == 2)
     {
         return(bord[randofhoek.Rij - 1, hoek.Kolom - 1]);
     }
     else
     {
         return(bord[hoek.Rij - 1, randofhoek.Kolom - 1]);
     }
 }
示例#6
0
        public override Veld VerkiestVeld(Spel spel)
        {
            //1) Probeer zelf een reeks te maken:
            Veld winnendVeld = WinnendVeld(spel);

            if (winnendVeld != null)
            {
                return(winnendVeld);
            }

            //2) Kan er geen reeks gemaakt worden => tegenstander blokkeren:
            return(base.VerkiestVeld(spel));
        }
 public static int AddVeld(string afkorting, string naam, int blokid)
 {
     using (TimechasersEntities te = new TimechasersEntities())
     {
         Veld veld = te.Veld.Add(new Veld()
         {
             Afkorting = afkorting,
             ANaam     = naam,
             BlokID    = blokid
         });
         te.SaveChanges();
         return(veld.Id);
     }
 }
示例#8
0
    public ReversiForm()
    {
        int veldomvang;
        //Variabelen om gemakkelijk omvang van het veld aan te passen
        // gerben heeft iets aangepast
        breedte = 6;
        hoogte = 6;
        veldomvang = 80;
        //Rode speler is 1, blauwe speler is 2
        beurt = 1;
        //Array met het hele speelbord, opgedeeld in velden
        velden = new Veld[breedte, hoogte];

        //Form opmaken
        this.Text = "Reversi";
        this.Size = new Size((breedte+1)*veldomvang, (hoogte+2)*veldomvang);
        this.BackColor = Color.DimGray;
        this.Paint += ReversiForm_Paint;

        //buttons nieuw spel en help
        Button nieuw;
        nieuw = new Button();

        Button help;
        help = new Button();

        nieuw.Location = new Point();
        nieuw.Location = new Point();

        //Velden initialiseren
        for (int x = 0; x < breedte; x++)
        {
            for (int y = 0; y < hoogte; y++)
            {
                velden[x, y] = new Veld(this, x, y, veldomvang);
                velden[x, y].Location = new Point(x*veldomvang+veldomvang/2, y*veldomvang+veldomvang/2);
                Controls.Add(velden[x, y]);
            }
        }
    }
示例#9
0
        protected Veld GespiegeldeHoek(Bord bord, Veld eigenMove)
        {
            Veld gespiegeldeHoek = null;

            for (int iLijnen = 6; iLijnen < 8; iLijnen++)
            {
                for (int iVeld = 0; iVeld < 3; iVeld++)
                {
                    if (bord.Lijnen[iLijnen].Velden[iVeld] == eigenMove)
                    {
                        if (iVeld == 2)
                        {
                            gespiegeldeHoek = bord.Lijnen[iLijnen].Velden[0];
                        }
                        else
                        {
                            gespiegeldeHoek = bord.Lijnen[iLijnen].Velden[2];
                        }
                    }
                }
            }
            return(gespiegeldeHoek);
        }
示例#10
0
        public void Speel(Spel spel)
        {
            Veld veld = VerkiestVeld(spel);

            spel.Speel(veld);
        }
示例#11
0
        public override Veld VerkiestVeld(Spel spel)
        {
            #region checks en variabelen
            int         aantalIngenomen = AantalIngenomen(spel.Bord);
            List <Lijn> randLijnen      = GetRandLijnen(spel.Bord);

            Veld doel = null;

            doel = WinnendVeld(spel);
            if (doel != null)
            {
                return(doel);
            }

            doel = BlokkerendVeld(spel);
            if (doel != null)
            {
                return(doel);
            }
            #endregion

            //SPELER 1
            if (Speler == Speler.O)
            {
                #region Eerste beurt speler 1
                //neemt een hoek (hoogste kans), center of rand
                if (aantalIngenomen == 0)
                {
                    int rnd = RandomInt();
                    if (rnd <= 15)
                    {
                        doel = spel.Bord[4];
                        return(doel);
                    }
                    else if (rnd >= 85)
                    {
                        doel = RandomRand(spel.Bord);
                        return(doel);
                    }
                    doel = RandomHoek(spel.Bord);
                    return(doel);
                }
                #endregion

                #region Tweede beurt speler 1
                else if (aantalIngenomen == 2)
                {
                    Veld eigenMove        = VeldenSpeler(spel.Bord, Speler)[0];
                    Veld tegenstanderMove = VeldenSpeler(spel.Bord, Tegenstander)[0];

                    #region Speler 1 speelde hoek
                    if (IsHoek(eigenMove, spel.Bord))
                    {
                        Veld gespiegeldeEersteMove = GespiegeldeHoek(spel.Bord, eigenMove);
                        #region Tegenstander speelde hoek of rand
                        //x speelt geen center
                        if (tegenstanderMove != spel.Bord[1, 1])
                        {
                            Veld excludeHoek = null;

                            foreach (Lijn lijn in randLijnen)
                            {
                                if (lijn.AantalVrijeVelden() == 1)
                                {
                                    if (lijn.Velden[0].Speler == Speler)
                                    {
                                        excludeHoek = lijn.Velden[2];
                                    }
                                    else
                                    {
                                        excludeHoek = lijn.Velden[0];
                                    }
                                }
                            }
                            do
                            {
                                doel = RandomHoek(spel.Bord);
                            } while (doel == excludeHoek || doel == gespiegeldeEersteMove || !doel.IsVrij());
                            return(doel);
                        }
                        #endregion
                        #region Tegenstander speelde center
                        //x speelt center
                        else
                        {
                            int rnd = RandomInt();
                            if (rnd <= 10)
                            {
                                foreach (Lijn lijn in randLijnen)
                                {
                                    if (lijn.AantalVrijeVelden() == 3)
                                    {
                                        doel = lijn.Velden[1];
                                        if (doel.IsVrij())
                                        {
                                            return(doel);
                                        }
                                    }
                                }
                            }
                            return(gespiegeldeEersteMove);
                        }
                        #endregion
                    }
                    #endregion
                    #region Speler 1 speelde center
                    else if (IsCenter(eigenMove))
                    {
                        #region Tegenstander speelde hoek
                        //gespiegelde hoek nemen, daarna nog vorkpoging
                        if (IsHoek(tegenstanderMove, spel.Bord))
                        {
                            Veld gespiegeldeHoek = GespiegeldeHoek(spel.Bord, tegenstanderMove);
                            return(gespiegeldeHoek);
                        }
                        #endregion
                        #region Tegenstander speelde rand
                        else
                        {
                            do
                            {
                                doel = RandomHoek(spel.Bord);
                            } while (!doel.IsVrij());

                            return(doel);
                        }
                        #endregion
                    }
                    #endregion
                    #region Speler 1 speelde rand
                    else if (IsRand(eigenMove, spel.Bord))
                    {
                        #region Tegenstander speelde rand
                        if (IsRand(tegenstanderMove, spel.Bord))
                        {
                            //tegenstander speelt near rand
                            if (!ZijnOpposRanden(tegenstanderMove, eigenMove, spel.Bord))
                            {
                                doel = Vork(tegenstanderMove, eigenMove, spel.Bord);
                                if (doel.IsVrij())
                                {
                                    return(doel);
                                }
                            }
                            //tegenstander speelt opposite rand
                            else
                            {
                                foreach (Lijn lijn in randLijnen)
                                {
                                    foreach (Veld v in lijn.Velden)
                                    {
                                        if (v.Speler == Tegenstander)
                                        {
                                            //2 mogelijke hoeken, neem ééntje at random
                                            int rnd = RandomInt();
                                            if (rnd >= 50)
                                            {
                                                doel = lijn.Velden[0];
                                                if (doel.IsVrij())
                                                {
                                                    return(doel);
                                                }
                                            }
                                            else
                                            {
                                                doel = lijn.Velden[2];
                                                if (doel.IsVrij())
                                                {
                                                    return(doel);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        #endregion
                        #region Tegenstander speelde hoek
                        else if (IsHoek(tegenstanderMove, spel.Bord))
                        //zoek eerst naar near corner
                        {
                            foreach (Lijn lijn in randLijnen)
                            {
                                if (lijn.AantalVrijeVelden() == 1)//if true=> near corner
                                {
                                    foreach (Veld v in lijn.Velden)
                                    {
                                        if (v.IsVrij())
                                        {
                                            doel = GespiegeldeHoek(spel.Bord, v);
                                            if (doel.IsVrij())
                                            {
                                                return(doel);
                                            }
                                        }
                                    }
                                }
                            }
                            //niets gevonden? tegenstander speelt far corner
                            doel = GespiegeldeHoek(spel.Bord, Vork(eigenMove, tegenstanderMove, spel.Bord));
                            if (doel.IsVrij())
                            {
                                return(doel);
                            }
                        }
                        #endregion
                        #region Tegenstander speelde center
                        int rnd2 = RandomInt();
                        //random hoek
                        if (rnd2 <= 10)
                        {
                            foreach (Lijn lijn in randLijnen)
                            {
                                if (lijn.Velden[1].Speler == Speler)
                                {
                                    Veld excludeHoek1 = lijn.Velden[0];
                                    Veld excludeHoek2 = lijn.Velden[2];
                                    do
                                    {
                                        doel = RandomHoek(spel.Bord);
                                    } while (doel == excludeHoek1 || doel == excludeHoek2);
                                    return(doel);
                                }
                            }
                        }
                        //random rand die niet opposite is van eigen move
                        else
                        {
                            do
                            {
                                doel = RandomRand(spel.Bord);
                            } while (!doel.IsVrij() || ZijnOpposRanden(doel, eigenMove, spel.Bord));
                            return(doel);
                        }
                        #endregion
                    }
                    #endregion
                }
                #endregion
            }
            //SPELER 2
            else
            {
                #region Eerste beurt speler 2
                if (aantalIngenomen == 1)
                {
                    Veld move1 = VeldenSpeler(spel.Bord, Tegenstander)[0];
                    if (IsCenter(move1))
                    {
                        doel = RandomHoek(spel.Bord);
                        return(doel);
                    }
                    else
                    {
                        doel = spel.Bord[4];
                        return(doel);
                    }
                }
                #endregion

                #region Tweede beurt speler 2
                else if (aantalIngenomen == 3)
                {
                    Veld move1 = VeldenSpeler(spel.Bord, Tegenstander)[0];
                    Veld move2 = VeldenSpeler(spel.Bord, Tegenstander)[1];
                    //al op vrij checken in method
                    //o neemt 2 hoeken
                    if (IsHoek(move1, spel.Bord) && IsHoek(move2, spel.Bord))
                    {
                        do
                        {
                            doel = RandomRand(spel.Bord);
                        } while (!doel.IsVrij());
                        return(doel);
                    }
                    //o neemt center en hoek
                    else if (IsCenter(move1) && IsHoek(move2, spel.Bord) || IsCenter(move2) && IsHoek(move1, spel.Bord))
                    {
                        do
                        {
                            doel = RandomHoek(spel.Bord);
                        } while (!doel.IsVrij());
                        return(doel);
                    }
                    //o neemt 2 randen
                    else if (IsRand(move1, spel.Bord) && IsRand(move2, spel.Bord))
                    {
                        if (ZijnOpposRanden(move1, move2, spel.Bord))
                        {
                            do
                            {
                                doel = RandomHoek(spel.Bord);
                            } while (!doel.IsVrij());//checks op is vrij en while lus in method,
                            return(doel);
                        }
                        else
                        {
                            doel = Vork(move1, move2, spel.Bord);
                            if (doel.IsVrij())
                            {
                                return(doel);
                            }
                        }
                    }
                    //o neemt rand en hoek
                    else if (IsRand(move1, spel.Bord) && IsHoek(move2, spel.Bord) || IsHoek(move1, spel.Bord) && IsRand(move2, spel.Bord))
                    {
                        Veld hoek;
                        Veld rand;
                        hoek = IsHoek(move1, spel.Bord) ? move1 : move2;
                        rand = IsRand(move1, spel.Bord) ? move1 : move2;
                        doel = Vork(rand, hoek, spel.Bord);
                        if (doel.IsVrij())
                        {
                            return(doel);
                        }
                    }
                }
                #endregion
            }

            #region "Overige beurten of geen returns"
            doel = MinimaxVeld(spel.Bord);
            if (doel == null || (!doel.IsVrij()))
            {
                return(base.VerkiestVeld(spel));
            }
            return(doel);

            #endregion
        }
        public ActionResult EditBoekingPost(BoekingViewModel reserveringsModel)
        {
            reserveringsModel.Velden   = repository.Velds.Where(p => p.VeldID.Equals(reserveringsModel.Reserv.VeldID)).ToList();
            reserveringsModel.Plaatsen = repository.Plaatss.Where(p => p.VeldID.Equals(reserveringsModel.Reserv.VeldID)).ToList();
            Plaats GekozenPlaats = reserveringsModel.Plaatsen.First();
            Veld   GekozenVeld   = reserveringsModel.Velden.FirstOrDefault();

            reserveringsModel.Resveringens = repository.Reserverings.Where(p => p.BeginDatum >= reserveringsModel.Reserv.BeginDatum && p.BeginDatum <= reserveringsModel.Reserv.EindDatum || p.EindDatum <= reserveringsModel.Reserv.BeginDatum && p.EindDatum >= reserveringsModel.Reserv.EindDatum).ToList();
            reserveringsModel.Boekings     = repository.Boekings.Where(p => p.BeginDatum >= reserveringsModel.Boeking.BeginDatum && p.BeginDatum <= reserveringsModel.Boeking.EindDatum || p.EindDatum <= reserveringsModel.Boeking.BeginDatum && p.EindDatum >= reserveringsModel.Boeking.EindDatum).ToList();

            if (GekozenPlaats == null)
            {
                db.SaveChanges();
                return(RedirectToAction("ReserveringSucces", "Bezoeker", new { area = "" }));
            }

            if (reserveringsModel.Resveringens != null)
            {
                int i = 0;


                foreach (var id in reserveringsModel.Resveringens)
                {
                    idList.Add(id.PlaatsId);
                }
                foreach (var id in reserveringsModel.Boekings)
                {
                    if (!idList.Contains(id.PlaatsId))
                    {
                        idList.Add(id.PlaatsId);
                    }
                }

                var resvIdArray = idList.ToArray();
                var PlaatsArray = reserveringsModel.Plaatsen.ToArray();

                while (i <= PlaatsArray.Length)
                {
                    if (resvIdArray.Contains(PlaatsArray[i].PlaatsID))
                    {
                        i++;

                        if (i == PlaatsArray.Length)
                        {
                            //throw new Exception("Geen plek");

                            return(RedirectToAction("GeenPlek", "Bezoeker", new { area = "" }));
                        }
                        else
                        {
                            continue;
                        }
                    }
                    else
                    {
                        reserveringsModel.Reserv.PlaatsId = PlaatsArray[i].PlaatsID;
                    }


                    if (ModelState.IsValid)
                    {
                        if (reserveringsModel.Reserv.EindDatum > reserveringsModel.Reserv.BeginDatum)
                        {
                            db.Entry(reserveringsModel.Boeking).State = System.Data.Entity.EntityState.Modified;
                            db.SaveChanges();
                            return(RedirectToAction("ReserveringSucces", "Bezoeker", new { area = "" }));
                        }
                    }

                    return(View(reserveringsModel));
                }
            }

            else
            {
                if (ModelState.IsValid)
                {
                    if (reserveringsModel.Reserv.EindDatum > reserveringsModel.Reserv.BeginDatum)
                    {
                        db.Entry(reserveringsModel.Reserv).State = System.Data.Entity.EntityState.Modified;
                        db.SaveChanges();
                        return(RedirectToAction("ReserveringSucces", "Bezoeker", new { area = "" }));
                    }
                }

                return(View(reserveringsModel));
            }

            return(View(reserveringsModel));
        }