public void UpdateCardTexture(bool alwaysShow, BoardState board, Card card, CardStates State, string classType) { StringBuilder ImagePath = new StringBuilder(@"Textures/Cards/"); ImagePath.Append(card.GetCardGFX()); StringBuilder CardbackPath = new StringBuilder(@"Textures/"); if (card.PlayerID == 0) CardbackPath.Append("Lannister cardback"); else CardbackPath.Append("Stark cardback"); int attack = board.GetCardAttack(card); string manaString = "<b>" + board.GetCardManaCost(card).ToString() + "</b>"; string attackString = "<b>" + attack.ToString() + "</b>"; string healthString = "<b>" + board.GetCardHealth(card).ToString() + "</b>"; if (board.GetCardMaxHealth(card) > board.GetCardHealth(card)) healthString = "<color=MAROON>" + healthString + "</color>"; UpdateCard(alwaysShow || State == CardStates.InHand && card.PlayerID == 0,@"<b>" + card.GetName() + @"</b>", ImagePath.ToString(), CardbackPath.ToString(), manaString, attackString, attack > 0, healthString, State, classType); }
/*private void UpdateBoard() { foreach(Card card in Cards) if (card.State == CardStates.OnBoard && card.Health <= 0) DoDie (card.ID); }*/ public static bool CanDoAction(BoardState InitialState, BoardAction Action) { if (Action.Type == "ACTION_DRAW_CARDS") return true; if (Action.Type == "ACTION_DEAL_DAMAGE") return true; if (Action.Type == "ACTION_START_TURN") return true; if (Action.Type == "ACTION_END_TURN") return true; if (Action.Type == "ACTION_PLAY_CARD") { Card ActorCard = InitialState.GetCard((int)Action.Actor); BoardState.Player Player = InitialState.Players[(int)Action.Player]; return Player.CurrentMana >= InitialState.GetCardManaCost(ActorCard) && Action.Player == InitialState.ActivePlayer && ActorCard.State == CardStates.InHand; } if (Action.Type == "ACTION_ATTACK") { Card ActorCard = InitialState.GetCard((int)Action.Actor); int TargetID = (int)Action.Target; Card TargetCard = InitialState.GetCard(TargetID); if (ActorCard.CanAttack == false) return false; if (Action.Player != InitialState.ActivePlayer) return false; if (ActorCard.PlayerID == TargetCard.PlayerID) return false; if (InitialState.GetCardAttack(ActorCard) > 0 && (ActorCard.State == CardStates.Hero || ActorCard.State == CardStates.OnBoard) && (TargetCard.State == CardStates.Hero || TargetCard.State == CardStates.OnBoard)) return true; return false; } if (Action.Type == "ACTION_DIE") return true; return true; }
private static double AI_GetPlayerScore(BoardState State, int playerID) { double score = 0; int opponentID; int heroHealth = State.GetCardHealth(State.GetCard(State.GetHeroID(playerID))); score += heroHealth * 0.5; if (playerID == 0) opponentID = 1; else opponentID = 0; int enemyHeroHealth = State.GetCardHealth(State.GetCard(State.GetHeroID(opponentID))); score = score - 0.65 * enemyHeroHealth; List<Card> boardCards = State.GetPlayerOnBoardMinions(playerID); foreach (Card card in boardCards) { int cardHealth = State.GetCardHealth(card); int cardAttack = State.GetCardAttack(card); score += 0.8 * cardHealth + 0.7 * cardAttack; } List<Card> enemyBoardCards = State.GetPlayerOnBoardMinions(opponentID); foreach (Card card in enemyBoardCards) { int cardHealth = State.GetCardHealth(card); int cardAttack = State.GetCardAttack(card); score = score - 2.0 * (cardAttack + cardHealth); } if (heroHealth < 1) score = Mathf.NegativeInfinity; if (enemyHeroHealth < 1) score = Mathf.Infinity; return score; }
void UpdateGraphics(BoardState Board, Card Card) { this.cardID = Card.ID; Hand.SetActive(false); Hero.SetActive(false); Minion.SetActive(false); #region build mana string StringBuilder manaString = new StringBuilder("<b>"); int mana = Board.GetCardManaCost(Card); manaString.Append(mana); manaString.Append("</b>"); #endregion #region build attack string StringBuilder attackString = new StringBuilder("<b>"); int attack = Board.GetCardAttack(Card); attackString.Append(attack); attackString.Append("</b>"); #endregion #region build health string StringBuilder healthString = new StringBuilder("<b>"); int health = Board.GetCardHealth(Card); bool isDamaged = false; if (health < Card.GetBaseMaxHealth()) isDamaged = true; if (isDamaged) healthString.Append("<color=RED>"); healthString.Append(health); if (isDamaged) healthString.Append("</color>"); healthString.Append("</b>"); #endregion #region build name string StringBuilder nameString = new StringBuilder(); nameString.Append(Card.GetName()); #endregion #region build texture path StringBuilder texturePath = new StringBuilder(@"Textures/Cards"); texturePath.Append(Card.GetCardGFX()); #endregion if (Card.State == CardStates.Hero) { Hero.SetTexturePath(texturePath.ToString()); Hero.SetAttack(attackString.ToString(), attack != 0); Hero.SetHealth(healthString.ToString(), true); Hero.SetActive(true); } else if (Card.State == CardStates.InHand || Card.State == CardStates.InDeck) { Hand.SetTexturePath(texturePath.ToString()); Hand.SetMana(manaString.ToString()); Hand.SetAttack(attackString.ToString()); Hand.SetHealth(healthString.ToString()); Hand.SetName(nameString.ToString()); Hand.SetActive(true); } else if (Card.State == CardStates.OnBoard) { Minion.SetTexturePath(texturePath.ToString()); Minion.SetTexturePath(Card.GetCardGFX()); Minion.SetAttack(attackString.ToString()); Minion.SetHealth(healthString.ToString()); } }