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)); }
private void CheckGameOver() { Ruler.GameResult result = Ruler.CheckGame(board); if (result != Ruler.GameResult.NotYet) { state = MainState.Over; this.result = result; } }
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"; } }
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); }
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); }
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(); } } }
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); }
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); }
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(); } } }
public virtual void OnGameOver(Ruler.GameResult result) { Debug.Log("Game Over, result is " + result); }