恢复总费用

This commit is contained in:
xianyi
2025-08-20 16:08:18 +08:00
parent 6bacf3cb39
commit f0c1643f30
17 changed files with 39 additions and 1572 deletions

View File

@@ -44,7 +44,7 @@ namespace TcgEngine
public HashSet<string> cards_attacked = new HashSet<string>();
public Game() { }
public Game(string uid, int nb_players)
{
this.game_uid = uid;
@@ -84,13 +84,13 @@ namespace TcgEngine
public virtual bool IsPlayerActionTurn(Player player)
{
return player != null && current_player == player.player_id
return player != null && current_player == player.player_id
&& state == GameState.Play && phase == GamePhase.Main && selector == SelectorType.None;
}
public virtual bool IsPlayerSelectorTurn(Player player)
{
return player != null && selector_player_id == player.player_id
return player != null && selector_player_id == player.player_id
&& state == GameState.Play && phase == GamePhase.Main && selector != SelectorType.None;
}
@@ -98,7 +98,7 @@ namespace TcgEngine
{
return phase == GamePhase.Mulligan && !player.ready;
}
//Check if a card is allowed to be played on slot
public virtual bool CanPlayCard(Card card, Slot slot, bool skip_cost = false)
{
@@ -106,18 +106,13 @@ namespace TcgEngine
return false;
Player player = GetPlayer(card.player_id);
if (!skip_cost && !player.CanPayTeamMana(card))
if (!skip_cost && !player.CanPayMana(card))
return false; //Cant pay mana
if (!player.HasCard(player.cards_hand, card))
return false; // Card not in hand
// AI 不能在没有对应阵营mana时使用动态费用卡牌
if (player.is_ai && card.CardData.IsDynamicManaCost())
{
string team_id = card.CardData.team?.id;
int available_mana = string.IsNullOrEmpty(team_id) ? player.mana : player.GetTeamMana(team_id);
if (available_mana == 0)
return false; // AI cant play X-cost card at 0 cost
}
if (player.is_ai && card.CardData.IsDynamicManaCost() && player.mana == 0)
return false; // AI cant play X-cost card at 0 cost AI 不能在没有mana时使用动态费用卡牌
if (card.CardData.IsBoardCard())
{
@@ -177,7 +172,7 @@ namespace TcgEngine
//Check if a card is allowed to attack a player
public virtual bool CanAttackTarget(Card attacker, Player target, bool skip_cost = false)
{
if(attacker == null || target == null)
if (attacker == null || target == null)
return false;
if (!attacker.CanAttack(skip_cost))
@@ -465,7 +460,7 @@ namespace TcgEngine
}
return null;
}
public virtual Player GetRandomPlayer(System.Random rand)
{
Player player = GetPlayer(rand.NextDouble() < 0.5 ? 1 : 0);
@@ -558,7 +553,7 @@ namespace TcgEngine
if (dest.players == null)
{
dest.players = new Player[source.players.Length];
for(int i=0; i< source.players.Length; i++)
for (int i = 0; i < source.players.Length; i++)
dest.players[i] = new Player(i);
}