示例#1
0
 public IksOksIgra(int XuUIO, int YuUIO, UltimateIksOks parent = null)
 {
     matrica = new Mjesto[3, 3];
     for (int i = 0; i < 3; i++)
     {
         for (int j = 0; j < 3; j++)
         {
             matrica[i, j] = new Mjesto()
             {
                 X      = i,
                 Y      = j,
                 Parent = this,
                 player = null
             };
         }
     }
     this.Parent = parent;
     this.XuUIO  = XuUIO;
     this.YuUIO  = YuUIO;
 }
示例#2
0
        private int heuristic(UltimateIksOks igra, Player MaximizingPlayer, int dubina)
        {
            int bodoviZaMaks = 0;

            if (igra.Pobjednik != null)
            {
                bodoviZaMaks  = igra.Pobjednik == MaximizingPlayer ? 100 : -100;
                bodoviZaMaks += igra.Pobjednik == MaximizingPlayer ? -dubina : dubina;
            }
            else
            {
                foreach (var malaigra in igra.igre)
                {
                    if (malaigra.Pobjednik != null)
                    {
                        bodoviZaMaks += (malaigra.Pobjednik == MaximizingPlayer) ? 20 : -20;
                    }
                }
            }
            Posjeceno++;
            //Console.WriteLine("Bodovi " + bodoviZaMaks + " Dubina " + dubina + "; Posjeceno :" + Posjeceno);
            return(bodoviZaMaks);
        }
示例#3
0
        public int doMinimax(UltimateIksOks igra, int dubina, Player MaximizingPlayer, int alpha, int beta)
        {
            if (dubina == 0)
            {
                stoperica.Reset();
                stoperica.Start();
                bestMjesto = null;
                Posjeceno  = 0;
            }

            if (igra.DostupnaMjesta.Count == 0 || dubina > MAX_DEPTH || igra.Pobjednik != null)
            {
                return(heuristic(igra, MaximizingPlayer, dubina));
            }

            if (igra.PlayerPlaying == MaximizingPlayer)
            {
                int max = Int32.MinValue;
                foreach (var mjesto in igra.DostupnaMjesta)
                {
                    var nextGame = igra.NextIgraToBePlayed;
                    igra.MakeMove(mjesto);
                    var value = doMinimax(igra, dubina + 1, MaximizingPlayer, alpha, beta);

                    if (value > max && dubina == 0)
                    {
                        bestMjesto = mjesto;
                    }
                    max   = Math.Max(value, max);
                    alpha = Math.Max(alpha, max);
                    igra.UndoMove(mjesto.X, mjesto.Y, mjesto.Parent.XuUIO, mjesto.Parent.YuUIO);
                    igra.NextIgraToBePlayed = nextGame;
                    if (beta <= alpha)
                    {
                        break;
                    }
                }
                if (dubina == 0)
                {
                    stoperica.Stop();
                    vrijemeRacunanja = stoperica.Elapsed;
                }
                return(max);
            }
            else
            {
                int min = Int32.MaxValue;
                foreach (var mjesto in igra.DostupnaMjesta)
                {
                    var nextGame = igra.NextIgraToBePlayed;
                    igra.MakeMove(mjesto);
                    var value = doMinimax(igra, dubina + 1, MaximizingPlayer, alpha, beta);
                    min  = Math.Min(min, value);
                    beta = Math.Min(beta, min);
                    igra.UndoMove(mjesto.X, mjesto.Y, mjesto.Parent.XuUIO, mjesto.Parent.YuUIO);
                    igra.NextIgraToBePlayed = nextGame;
                    if (beta <= alpha)
                    {
                        break;
                    }
                }
                if (dubina == 0)
                {
                    stoperica.Stop();
                    vrijemeRacunanja = stoperica.Elapsed;
                }
                return(min);
            }
        }