示例#1
0
    private ScoreAndMove Negamax(SimpleBoard simp, int currentDepth)
    {
        if (simp.state == SimpleBoard.State.DRAW)
        {
            return(new ScoreAndMove(0, -1));
        }
        else if (simp.state == SimpleBoard.State.XWON || simp.state == SimpleBoard.State.OWON)
        {
            return(new ScoreAndMove(10 - currentDepth, -1));
        }
        ScoreAndMove worst = new ScoreAndMove(1000, -1);

        foreach (int move in simp.GetMoves())
        {
            simp.MakeMove(move);
            ScoreAndMove sam = Negamax(simp, currentDepth + 1);
            simp.UnDoMove(move);
            sam.score = -sam.score;
            if (sam.score < worst.score)
            {
                worst.score = sam.score;
                worst.move  = move;
            }
        }
        return(worst);
    }
示例#2
0
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Keypad1))
        {
            ExecuteMove(0);
        }
        if (Input.GetKeyDown(KeyCode.Keypad2))
        {
            ExecuteMove(1);
        }
        if (Input.GetKeyDown(KeyCode.Keypad3))
        {
            ExecuteMove(2);
        }
        if (Input.GetKeyDown(KeyCode.Keypad4))
        {
            ExecuteMove(3);
        }
        if (Input.GetKeyDown(KeyCode.Keypad5))
        {
            ExecuteMove(4);
        }
        if (Input.GetKeyDown(KeyCode.Keypad6))
        {
            ExecuteMove(5);
        }
        if (Input.GetKeyDown(KeyCode.Keypad7))
        {
            ExecuteMove(6);
        }
        if (Input.GetKeyDown(KeyCode.Keypad8))
        {
            ExecuteMove(7);
        }
        if (Input.GetKeyDown(KeyCode.Keypad9))
        {
            ExecuteMove(8);
        }

        if (Input.GetKeyDown(KeyCode.Space) &&
            ((mainBoard.turn && xIsAi) || (!mainBoard.turn && oIsAi)))
        {
            if (!mainBoard.IsEnd())
            {
                ScoreAndMove sam = Negamax(mainBoard, 0);

                int move = sam.move;


                if (!mainBoard.turn)
                {
                    ChangeSprite(move, o);
                    currentPlayerImage.GetComponent <Image>().sprite = x;
                }
                else
                {
                    ChangeSprite(move, x);
                    currentPlayerImage.GetComponent <Image>().sprite = o;
                }
                mainBoard.MakeMove(move);
            }
            else
            {
                if (mainBoard.state == SimpleBoard.State.DRAW)
                {
                    currentPlayerText.text = "IT IS A DRAW!";
                }
                else if (mainBoard.state == SimpleBoard.State.XWON)
                {
                    currentPlayerText.text = "X HAS WON!";
                }
                else if (mainBoard.state == SimpleBoard.State.OWON)
                {
                    currentPlayerText.text = "O HAS WON!";
                }
            }
        }
    }