Ejemplo n.º 1
0
    public void OnGameOver(UIStorage storage, int turn, Ruler.GameResult result)
    {
        player0Name.text   = storage.playerDown.playerName.text;
        player1Name.text   = storage.playerUp.playerName.text;
        player0Flag.sprite = storage.playerDown.flag.sprite;
        player0Flag.SetNativeSize();
        player1Flag.sprite = storage.playerUp.flag.sprite;
        player1Flag.SetNativeSize();
        turnNum.text = turn.ToString("D2");
        bool player0Highlight =
            (result == Ruler.GameResult.Black_Win && !GameInfo.Instance.ShouldUpsidedown) ||
            (result == Ruler.GameResult.White_Win && GameInfo.Instance.ShouldUpsidedown);
        bool player1Highlight = (result == Ruler.GameResult.White_Win && !GameInfo.Instance.ShouldUpsidedown) ||
                                (result == Ruler.GameResult.Black_Win && GameInfo.Instance.ShouldUpsidedown);

        player0Name.color    = player0Highlight ? StorageInfo.Orange : Color.white;
        player0Flag.color    = player0Highlight ? StorageInfo.Orange : Color.white;
        player0Result.sprite = player0Highlight ? winSprite : loseSprite;
        player0Result.SetNativeSize();
        player1Name.color    = player1Highlight ? StorageInfo.Orange : Color.white;
        player1Flag.color    = player1Highlight ? StorageInfo.Orange : Color.white;
        player1Result.sprite = player1Highlight ? winSprite : loseSprite;
        player1Result.SetNativeSize();

        infoPanel.localPosition = new Vector3(infoPanel.rect.width, 0, 0);
        iTween.MoveTo(infoPanel.gameObject, iTween.Hash("position", Vector3.zero, "time", moveInTime, "easetype", iTween.EaseType.easeOutBounce, "islocal", true));
    }
Ejemplo n.º 2
0
 private void CheckGameOver()
 {
     Ruler.GameResult result = Ruler.CheckGame(board);
     if (result != Ruler.GameResult.NotYet)
     {
         state       = MainState.Over;
         this.result = result;
     }
 }
Ejemplo n.º 3
0
 public void OnGameOver(Ruler.GameResult result)
 {
     if (result == Ruler.GameResult.Black_Win)
     {
         GetComponent <UISprite>().spriteName = "black_win";
     }
     else if (result == Ruler.GameResult.White_Win)
     {
         GetComponent <UISprite>().spriteName = "white_win";
     }
     else
     {
         GetComponent <UISprite>().spriteName = "draw";
     }
 }
Ejemplo n.º 4
0
 public static double EvaluateResult(Ruler.GameResult result, Unit.OwnerEnum owner)
 {
     if (result == Ruler.GameResult.Black_Win)
     {
         return(owner == Unit.OwnerEnum.Black ? MaxValue : -MaxValue);
     }
     else if (result == Ruler.GameResult.White_Win)
     {
         return(owner == Unit.OwnerEnum.White ? MaxValue : -MaxValue);
     }
     else if (result == Ruler.GameResult.Draw)
     {
         return(0);
     }
     return(0);
 }
Ejemplo n.º 5
0
    public static double Evaluate(GameDescriptor descriptor)
    {
        Unit.OwnerEnum   owner  = descriptor.Turn;
        Ruler.GameResult result = Ruler.CheckGame(descriptor);

        if (result != Ruler.GameResult.NotYet)
        {
            return(EvaluateResult(result, owner));
        }

        double value = 0;

        value += EvalPosition(descriptor, owner) * PosFactor;
        value += EvalCard(descriptor, owner) * CardFactor;
        value += EvalDanger(descriptor, owner) * DangerFactor;
        value += EvalSpecial(descriptor, owner) * SpecialFactor;

        return(value);
    }
Ejemplo n.º 6
0
 public void NextTurn()
 {
     if (state == MainState.Wait || state == MainState.AI_Running)
     {
         Ruler.GameResult result = Ruler.CheckGame(board);
         if (result == Ruler.GameResult.NotYet)
         {
             turn  = Unit.Opposite(turn);
             state = MainState.Move;
             NewTurn();
         }
         else
         {
             state       = MainState.Over;
             this.result = result;
             OnGameOver();
         }
     }
 }
Ejemplo n.º 7
0
    double AlphaBeta(GameDescriptor descriptor, int depth, double alpha, double beta)
    {
        Ruler.GameResult result = Ruler.CheckGame(descriptor);

        if (result != Ruler.GameResult.NotYet)
        {
            return(Evaluator.EvaluateResult(result, descriptor.Turn) - depth);
        }
        if (depth == 0 || nodeCount >= Max_Node)
        {
            nodeCount++;
            return(Evaluator.Evaluate(descriptor) - depth); // the quicker, the better
        }

        List <PlayerAction> actions = descriptor.QueryAllActions();

        Disturb(actions);

        foreach (PlayerAction tryAction in actions)
        {
            descriptor.DoAction(tryAction);
            var tmp = -AlphaBeta(descriptor, depth - 1, -beta, -alpha);
            tryAction.UnDo(descriptor);

            if (tmp >= beta)
            {
                return(beta);
            }
            if (tmp > alpha)
            {
                alpha = tmp;
                if (depth == Max_Depth)
                {
                    action = tryAction;
                }
            }
        }
        return(alpha);
    }
Ejemplo n.º 8
0
    double AlphaBeta_Slow(GameDescriptor descriptor, int depth, double alpha, double beta)
    {
        Ruler.GameResult result = Ruler.CheckGame(descriptor);
        if (result != Ruler.GameResult.NotYet)
        {
            return(Evaluator.EvaluateResult(result, descriptor.Turn) - depth);
        }
        if (depth == 0)
        {
            nodeCount++;
            return(Evaluator.Evaluate(descriptor) - depth);
        }

        List <PlayerAction> actions = descriptor.QueryAllActions_Slow();

        Disturb(actions);

        foreach (PlayerAction tryAction in actions)
        {
            GameDescriptor clone = descriptor.Clone() as GameDescriptor;
            clone.DoAction(tryAction);
            var tmp = -AlphaBeta_Slow(clone, depth - 1, -beta, -alpha);

            if (tmp >= beta)
            {
                return(beta);
            }
            if (tmp > alpha)
            {
                alpha = tmp;
                if (depth == Max_Depth)
                {
                    action = tryAction;
                }
            }
        }
        return(alpha);
    }
Ejemplo n.º 9
0
 public void NextTurn(bool lastTurnIsMe = false)
 {
     if (lastTurnIsMe)
     {
         DoAction(PlayerAction.CreateComplete());
     }
     _DoTurnOver();
     if (state == MainState.Wait || state == MainState.AgentRunning || state == MainState.AgentEffectWaiting)
     {
         Ruler.GameResult result = Ruler.CheckGame(board);
         if (result == Ruler.GameResult.NotYet)
         {
             turn  = Unit.Opposite(turn);
             state = MainState.Move;
             NewTurn(false);
         }
         else
         {
             state       = MainState.Over;
             this.result = result;
             OnGameOver();
         }
     }
 }
Ejemplo n.º 10
0
 public virtual void OnGameOver(Ruler.GameResult result)
 {
     Debug.Log("Game Over, result is " + result);
 }
Ejemplo n.º 11
0
 private void CheckGameOver()
 {
     Ruler.GameResult result = Ruler.CheckGame(board);
     if (result != Ruler.GameResult.NotYet)
     {
         state = MainState.Over;
         this.result = result;
     }
 }
Ejemplo n.º 12
0
 public void NextTurn()
 {
     if (state == MainState.Wait || state == MainState.AI_Running)
     {
         Ruler.GameResult result = Ruler.CheckGame(board);
         if (result == Ruler.GameResult.NotYet)
         {
             turn = Unit.Opposite(turn);
             state = MainState.Move;
             NewTurn();
         }
         else
         {
             state = MainState.Over;
             this.result = result;
             OnGameOver();
         }
     }
 }