From 347db984b33f6e983a4507f349b48c9f4eae6f3a Mon Sep 17 00:00:00 2001 From: xianyi Date: Thu, 21 Aug 2025 15:48:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E6=89=8B=E7=89=8C=E6=94=BB?= =?UTF-8?q?=E5=87=BB=E5=8A=9B=E8=AE=A1=E7=AE=97=E5=85=88=E6=89=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TcgEngine/Scripts/GameLogic/GameLogic.cs | 44 ++++++++++++++++--- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/Assets/TcgEngine/Scripts/GameLogic/GameLogic.cs b/Assets/TcgEngine/Scripts/GameLogic/GameLogic.cs index d18b76c..c2710c4 100644 --- a/Assets/TcgEngine/Scripts/GameLogic/GameLogic.cs +++ b/Assets/TcgEngine/Scripts/GameLogic/GameLogic.cs @@ -95,7 +95,6 @@ namespace TcgEngine.Gameplay //Choose first player game_data.state = GameState.Play; - game_data.first_player = random.NextDouble() < 0.5 ? 0 : 1; game_data.current_player = game_data.first_player; game_data.turn_count = 1; @@ -141,10 +140,15 @@ namespace TcgEngine.Gameplay RefreshData(); onGameStart?.Invoke(); - if(should_mulligan) + if (should_mulligan) + { GoToMulligan(); + } else + { + CalculateFirstPlayer(); StartTurn(); + } } //开始回合 @@ -166,7 +170,7 @@ namespace TcgEngine.Gameplay DrawCard(player, GameplayData.Get().cards_per_turn); } - + //Mana player.mana_max += GameplayData.Get().mana_per_turn; player.mana_max = Mathf.Min(player.mana_max, GameplayData.Get().mana_max); @@ -1064,7 +1068,7 @@ namespace TcgEngine.Gameplay { // 不消耗mana强制上场 PlayCard(characterCard, emptySlot, true); // skip_cost = true - + // 设置为疲劳状态 characterCard.exhausted = true; } @@ -1903,18 +1907,19 @@ namespace TcgEngine.Gameplay player.ready = true; DrawCard(player, count); - + // 将换掉的卡牌重新加入牌组并洗牌 foreach (Card card in mulligan_cards) { player.cards_deck.Add(card); } ShuffleDeck(player.cards_deck); - + RefreshData(); if (game_data.AreAllPlayersReady()) { + CalculateFirstPlayer(); StartTurn(); } } @@ -1968,6 +1973,33 @@ namespace TcgEngine.Gameplay RefreshData(); } + // 根据手牌攻击力计算先手玩家 + protected virtual void CalculateFirstPlayer() + { + int f = 0, l = 0; + + foreach (Player player in game_data.players) + { + int allCardAttack = 0; + foreach (Card card in player.cards_hand) + { + allCardAttack += card.CardData.attack; + } + + if (player.player_id == 0) + { + f = allCardAttack; + } + else + { + l = allCardAttack; + } + } + + game_data.first_player = f > l ? 0 : 1; + game_data.current_player = game_data.first_player; + } + //------------- public virtual void RefreshData()