Esempio n. 1
0
File: Gioco.cs Progetto: nickxbs/IA
        public IGioco Clone()
        {
            ITavola tavola  = (ITavola)this.Tavola.Clone();
            Gioco   newGame = new Gioco(tavola);

            newGame.Vincitore      = this.Vincitore;
            newGame._parita        = this.Parita;
            newGame._prossimoTurno = this.ProssimoTurno;

            return(newGame);
        }
Esempio n. 2
0
        protected override ValoreMossa GetValoreMossa(IGioco gioco, int depth)
        {
            ValoreMossa resultMove = null;

            if (depth <= _max)
            {
                ITavola tavola   = gioco.Tavola;
                Lato    latoStep = gioco.ProssimoTurno;
                int?    beta     = null;
                for (int i = tavola.Buche.Count - 2; i >= 0; --i)
                {
                    IBuca p = tavola.Buche[i];
                    if (p.Lato == latoStep && i != 6 && i != 13 && p.Semi > 0 && !gioco.Finito)
                    {
                        IGioco giocoClone = gioco.Clone();
                        giocoClone.Muovi(i);
                        int valoreAttuale = ValoreAttuale(giocoClone);

                        if (depth == _max - 1 && beta.HasValue && latoStep == LatoPlayer && valoreAttuale < beta.Value)
                        {
                            continue;
                        }
                        else
                        {
                            bool        cambioTurno = gioco.ProssimoTurno != giocoClone.ProssimoTurno;
                            ValoreMossa valoreProssimaMossa;
                            if (!giocoClone.Finito)
                            {
                                valoreProssimaMossa = ValoreProssimaMossa(depth, giocoClone, cambioTurno);
                            }
                            else
                            {
                                valoreProssimaMossa = null;
                            }
                            ValoreMossa valore = new ValoreMossa(valoreProssimaMossa, i, valoreAttuale);
                            if (null == resultMove) //serve per il taglio
                            {
                                resultMove = valore;
                            }
                            else
                            {
                                resultMove = AggiornoValore(resultMove, valore, latoStep);
                                if (depth == _max - 1 && latoStep == LatoPlayer)
                                {
                                    beta = resultMove.Valore;
                                }
                            }
                        }
                    }
                }
            }
            return(resultMove);
        }
Esempio n. 3
0
        private ValoreMossa MinValue(IGioco gioco, int depth, int alfa, int beta)
        {
            ValoreMossa resultMove = null;

            if (depth <= _max && !gioco.Finito)
            {
                ITavola tavola   = gioco.Tavola;
                Lato    latoStep = gioco.ProssimoTurno;

                int[] heuristc = _heuristicFunction.HeuristicFunction(gioco.Clone());
                for (int j = 0; j < heuristc.Length; ++j)
                {
                    int i = heuristc[j];
                    OperationCount++;
                    IGioco giocoClone = gioco.Clone();
                    giocoClone.Muovi(i);
                    bool        cambioTurno         = gioco.ProssimoTurno != giocoClone.ProssimoTurno;
                    ValoreMossa valoreProssimaMossa = null;
                    if (!giocoClone.Finito)
                    {
                        if (!cambioTurno)
                        {
                            valoreProssimaMossa = MinValue(giocoClone, depth, alfa, beta);
                        }
                        else
                        {
                            valoreProssimaMossa = MaxValue(giocoClone, depth + 1, alfa, beta);
                        }
                    }

                    ValoreMossa valore = new ValoreMossa(valoreProssimaMossa, i, ValoreAttuale(giocoClone));
                    if (null == resultMove)//inizializzazione
                    {
                        resultMove = valore;
                    }
                    else
                    {
                        resultMove = AggiornoValore(resultMove, valore, latoStep);
                    }
                    if (resultMove.Valore < alfa)
                    {
                        return(resultMove);
                    }
                    beta = resultMove.Valore < beta ? resultMove.Valore : beta;
                }
            }
            return(resultMove);
        }
Esempio n. 4
0
        private ValoreMossa MinValue(IGioco gioco, int depth)
        {
            ValoreMossa resultMove = null;

            if (depth <= _max && !gioco.Finito)
            {
                ITavola tavola   = gioco.Tavola;
                Lato    latoStep = gioco.ProssimoTurno;


                for (int i = tavola.Buche.Count - 2; i >= 0; --i)
                {
                    IBuca p = tavola.Buche[i];
                    if (p.Lato == latoStep && i != 6 && i != 13 && p.Semi > 0 && !gioco.Finito)
                    {
                        OperationCount++;

                        IGioco giocoClone = gioco.Clone();
                        giocoClone.Muovi(i);
                        bool        cambioTurno         = gioco.ProssimoTurno != giocoClone.ProssimoTurno;
                        ValoreMossa valoreProssimaMossa = null;
                        if (!giocoClone.Finito)
                        {
                            if (!cambioTurno)
                            {
                                valoreProssimaMossa = MinValue(giocoClone.Clone(), depth);
                            }
                            else
                            {
                                valoreProssimaMossa = MaxValue(giocoClone.Clone(), depth + 1);
                            }
                        }

                        ValoreMossa valore = new ValoreMossa(valoreProssimaMossa, i, ValoreAttuale(giocoClone));
                        if (null == resultMove)//inizializzazione
                        {
                            resultMove = valore;
                        }
                        else
                        {
                            resultMove = AggiornoValore(resultMove, valore, latoStep);
                        }
                    }
                }
            }
            return(resultMove);
        }
Esempio n. 5
0
        protected override ValoreMossa GetValoreMossa(IGioco gioco, int depth)
        {
            ValoreMossa resultMove = null;

            if (depth <= _max)
            {
                ITavola tavola   = gioco.Tavola;
                Lato    latoStep = gioco.ProssimoTurno;

                for (int i = tavola.Buche.Count - 2; i >= 0; --i)
                {
                    IBuca p = tavola.Buche[i];
                    if (p.Lato == latoStep && i != 6 && i != 13 && p.Semi > 0 && !gioco.Finito)
                    {
                        OperationCount++;
                        IGioco giocoClone = gioco.Clone();
                        giocoClone.Muovi(i);
                        int         valoreAttuale = ValoreAttuale(giocoClone);
                        ValoreMossa valoreProssimaMossa;
                        if (!giocoClone.Finito)
                        {
                            bool cambioTurno = gioco.ProssimoTurno != giocoClone.ProssimoTurno;
                            valoreProssimaMossa = ValoreProssimaMossa(depth, giocoClone.Clone(), cambioTurno);
                        }
                        else
                        {
                            valoreProssimaMossa = null;
                        }
                        ValoreMossa m = new ValoreMossa(valoreProssimaMossa, i, valoreAttuale);

                        if (null == resultMove)//inizializzazione
                        {
                            resultMove = m;
                        }
                        else
                        {
                            resultMove = AggiornoValore(resultMove, m, latoStep);
                        }
                    }
                }
            }
            return(resultMove);
        }
Esempio n. 6
0
File: Stato.cs Progetto: nickxbs/IA
 public Stato(ITavola tavola, IPlayer currentTurn)
 {
     Tavola      = tavola;
     CurrentTurn = currentTurn;
 }
Esempio n. 7
0
File: Gioco.cs Progetto: nickxbs/IA
 public Gioco(ITavola tavola, Lato prossimoLato)
 {
     Tavola = tavola;
     _prossimoTurno = prossimoLato;
     _parita = false;
 }
Esempio n. 8
0
File: Gioco.cs Progetto: nickxbs/IA
 public Gioco(ITavola tavola)
 {
     Tavola = tavola;
     _prossimoTurno = Lato.A;
     _parita = false;
 }
Esempio n. 9
0
 public static void Render(ITavola tavola)
 {
     Console.WriteLine(String.Format(" {0}  {1}  {2}  {3}  {4}  {5}  {6}  {7}  ", " ", tavola.Buche[12].Semi, tavola.Buche[11].Semi, tavola.Buche[10].Semi, tavola.Buche[9].Semi, tavola.Buche[8].Semi, tavola.Buche[7].Semi, " "));
     Console.WriteLine(String.Format(" {0}  {1}  {2}  {3}  {4}  {5}  {6}  {7}  ", tavola.Buche[13].Semi, " ", " ", " ", " ", " ", " ", tavola.Buche[6].Semi));
     Console.WriteLine(String.Format(" {0}  {1}  {2}  {3}  {4}  {5}  {6}  {7}  ", " ", tavola.Buche[0].Semi, tavola.Buche[1].Semi, tavola.Buche[2].Semi, tavola.Buche[3].Semi, tavola.Buche[4].Semi, tavola.Buche[5].Semi, " "));
 }
Esempio n. 10
0
 public static void Render(ITavola tavola)
 {
     Console.WriteLine(String.Format(" {0}  {1}  {2}  {3}  {4}  {5}  {6}  {7}  ", " ", tavola.Buche[12].Semi, tavola.Buche[11].Semi, tavola.Buche[10].Semi, tavola.Buche[9].Semi, tavola.Buche[8].Semi, tavola.Buche[7].Semi, " "));
     Console.WriteLine(String.Format(" {0}  {1}  {2}  {3}  {4}  {5}  {6}  {7}  ", tavola.Buche[13].Semi, " ", " ", " ", " ", " ", " ", tavola.Buche[6].Semi));
     Console.WriteLine(String.Format(" {0}  {1}  {2}  {3}  {4}  {5}  {6}  {7}  ", " ", tavola.Buche[0].Semi, tavola.Buche[1].Semi, tavola.Buche[2].Semi, tavola.Buche[3].Semi, tavola.Buche[4].Semi, tavola.Buche[5].Semi, " "));
 }
Esempio n. 11
0
File: Gioco.cs Progetto: nickxbs/IA
 public Gioco(ITavola tavola, Lato prossimoLato)
 {
     Tavola         = tavola;
     _prossimoTurno = prossimoLato;
     _parita        = false;
 }
Esempio n. 12
0
File: Gioco.cs Progetto: nickxbs/IA
 public Gioco(ITavola tavola)
 {
     Tavola         = tavola;
     _prossimoTurno = Lato.A;
     _parita        = false;
 }
Esempio n. 13
0
 public GiocoRuba2(ITavola tavola)
     : base(tavola)
 {
 }
Esempio n. 14
0
 public GiocoRuba2(ITavola tavola, Lato prossimoLato)
     : base(tavola, prossimoLato)
 {
 }