Пример #1
0
        //toto by malo vracat aktualny tah + diagnosticke data(list poloziek point,score)
        public static ComputerMove GetComputerMove(int [,] gameMap)
        {
            //MINIMAX
            //v prvom kole prejst vsetky mozne tahy a ohodnotit ich
            //ak je niekde vyherny tah, pouzit ho
            //ak su niekde neutralne tahy, rozvinut ich dalej
            //vytvorit strom protivnikovych tahov
            //kazdu polozku stromu dalej ohodnotit


            //vytvorenie noveho stromu so vsetkymi tahmi podla aktualneho stavu
            AItree root     = new AItree(gameMap);
            int    maxScore = -1000;
            int    index    = 0;

            //prejst vsetkych hlavnych potomkov korena stromu
            for (int i = 0; i < root.tree.Count; i++)
            {
                //vybrat potomka s najvyssim skore, ak je ale skore protivnika vyssie, vybrat to
                if (root.tree[i].score > maxScore || Math.Abs(root.tree[i].score) > maxScore)
                {
                    maxScore = root.tree[i].score;
                    index    = i;
                }
            }

            //protivnik ma vyssie skore, treba branit
            maxScore = -1000;
            if (maxScore < 0)
            {
                index = 0;
                for (int i = 0; i < root.tree.Count; i++)
                {
                    if (root.tree[i].score > maxScore)
                    {
                        maxScore = root.tree[i].score;
                        index    = i;
                    }
                }
            }

            //zahrat tah s najlepsim skore
            ComputerMove move = new ComputerMove
            {
                finalPosition = root.tree[index].position
            };

            foreach (AItree leaf in root.tree)
            {
                MoveData data = new MoveData()
                {
                    coords = leaf.position, score = leaf.score
                };
                move.allMoves.Add(data);
            }

            return(move);
        }
Пример #2
0
        /// <summary>
        /// Tah protivnika
        /// </summary>
        private async void ComputerMove()
        {
            await Task.Delay(200);

            //zahrat tah s najlepsim skore
            ComputerMove allData = GameEngine.GetComputerMove(gameMap);
            Point        move    = allData.finalPosition;

            ShowGameData(allData.allMoves);

            int row    = (int)move.X;
            int column = (int)move.Y;

            Button opponentButton = (Button)GetGridElement(GameGrid, row, column);

            opponentButton.Content    = (playerSymbol == PlayerSymbol.O) ? PlayerSymbol.X : PlayerSymbol.O;
            opponentButton.Foreground = (playerSymbol == PlayerSymbol.X) ? Brushes.LightBlue : Brushes.LightPink;
            opponentButton.Background = Brushes.DarkGreen;

            gameMap[row, column] = 2;

            isPlayerTurn = true;
            CheckEndGame();
        }