From f4a2686810c78d81bc71f439f4fd9df2767f9aca Mon Sep 17 00:00:00 2001 From: xiaji Date: Sat, 30 May 2026 07:55:38 +0800 Subject: [PATCH] fix: resolve GDScript type errors and warnings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix Array[Card] type mismatch in move_generator.gd (rank_counts arrays) - Fix shadowed variables in card.gd (create, from_packed parameters) - Fix integer division warning in deck.gd (/ → //) - Fix unused_signal warnings in event_bus.gd (per-signal annotations) - Fix unused_parameter warning in audio_manager.gd - Normalize whitespace in training_controller.gd --- project.godot | 4 +- src/autoload/audio_manager.gd | 14 +++--- src/autoload/event_bus.gd | 6 ++- src/core/card.gd | 62 +++++++++++++------------- src/core/deck.gd | 78 ++++++++++++++++----------------- src/core/move_generator.gd | 20 ++++----- src/game/training_controller.gd | 14 +++--- 7 files changed, 102 insertions(+), 96 deletions(-) diff --git a/project.godot b/project.godot index a679103..bf45533 100644 --- a/project.godot +++ b/project.godot @@ -11,8 +11,10 @@ config_version=5 [application] config/name="Guandan Card Game" -config/version="0.1.0" config/description="掼蛋卡牌训练模式" +config/version="0.1.0" +run/main_scene="res://src/ui/scenes/main_menu.tscn" +config/features=PackedStringArray("4.6") [autoload] diff --git a/src/autoload/audio_manager.gd b/src/autoload/audio_manager.gd index cd563c7..448d90c 100644 --- a/src/autoload/audio_manager.gd +++ b/src/autoload/audio_manager.gd @@ -2,19 +2,19 @@ extends Node func play_card_place() -> void: - pass + pass func play_bomb() -> void: - pass + pass func play_pass() -> void: - pass + pass func play_victory() -> void: - pass + pass func play_tribute() -> void: - pass + pass -func set_muted(muted: bool) -> void: - pass +func set_muted(_muted: bool) -> void: + pass diff --git a/src/autoload/event_bus.gd b/src/autoload/event_bus.gd index 2cda64a..9a498e0 100644 --- a/src/autoload/event_bus.gd +++ b/src/autoload/event_bus.gd @@ -1,9 +1,13 @@ # src/autoload/event_bus.gd -@warning_ignore("unused_signal") extends Node +@warning_ignore("unused_signal") signal player_played_cards(player_idx: int, play_type: int, cards: Array) +@warning_ignore("unused_signal") signal bomb_detonated(player_idx: int, rank: int) +@warning_ignore("unused_signal") signal player_finished(player_idx: int, position: int) +@warning_ignore("unused_signal") signal turn_changed(player_idx: int) +@warning_ignore("unused_signal") signal game_over(winner_team: int, reason: String) diff --git a/src/core/card.gd b/src/core/card.gd index f0b5d0a..741af55 100644 --- a/src/core/card.gd +++ b/src/core/card.gd @@ -12,59 +12,59 @@ var original_id: int var _suit: int var _rank: int -static func create(original_id: int, suit: int, rank: int) -> Card: - var c := Card.new() - c.original_id = original_id - c._suit = suit - c._rank = rank - c.card_id = original_id - return c +static func create(p_original_id: int, p_suit: int, p_rank: int) -> Card: + var c := Card.new() + c.original_id = p_original_id + c._suit = p_suit + c._rank = p_rank + c.card_id = p_original_id + return c static func make_full_deck_ids() -> Array[int]: - var ids: Array[int] = [] - for i in range(108): - ids.append(i) - return ids + var ids: Array[int] = [] + for i in range(108): + ids.append(i) + return ids -static func card_id_from_deck(original_id: int, deck_index: int) -> int: - return original_id + deck_index * 54 +static func card_id_from_deck(p_original_id: int, deck_index: int) -> int: + return p_original_id + deck_index * 54 func suit() -> int: - return _suit + return _suit func rank() -> int: - return _rank + return _rank func card_value() -> int: - return _suit * 20 + _rank + return _suit * 20 + _rank func is_joker() -> bool: - return _rank == 15 or _rank == 16 + return _rank == 15 or _rank == 16 func is_heart() -> bool: - return _suit == 1 + return _suit == 1 func matches(other: Card) -> bool: - return card_value() == other.card_value() + return card_value() == other.card_value() func equals(other: Card) -> bool: - return card_id == other.card_id + return card_id == other.card_id func compare_to(other: Card) -> int: - var r := _rank - other._rank - if r != 0: - return r - return _suit - other._suit + var r := _rank - other._rank + if r != 0: + return r + return _suit - other._suit func to_packed() -> int: - return (_suit << 8) | (_rank & 0xFF) + return (_suit << 8) | (_rank & 0xFF) static func from_packed(packed: int) -> Card: - var suit := (packed >> 8) & 0xFF - var rank := packed & 0xFF - return Card.create(0, suit, rank) + var p_suit := (packed >> 8) & 0xFF + var p_rank := packed & 0xFF + return Card.create(0, p_suit, p_rank) func _to_string() -> String: - var suits := ["S", "H", "C", "D", "SJ", "BJ"] - var ranks := ["", "", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "SJ", "BJ"] - return "%s%s" % [suits[_suit], ranks[_rank]] + var suits := ["S", "H", "C", "D", "SJ", "BJ"] + var ranks := ["", "", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "SJ", "BJ"] + return "%s%s" % [suits[_suit], ranks[_rank]] diff --git a/src/core/deck.gd b/src/core/deck.gd index 462ef13..2a77cd7 100644 --- a/src/core/deck.gd +++ b/src/core/deck.gd @@ -5,54 +5,54 @@ extends RefCounted var _cards: Array[Card] = [] static func _suit_for(original_id: int) -> int: - if original_id == 52: - return 4 - if original_id == 53: - return 5 - return original_id % 4 + if original_id == 52: + return 4 + if original_id == 53: + return 5 + return original_id % 4 static func _rank_for(original_id: int) -> int: - if original_id == 52: - return 15 - if original_id == 53: - return 16 - return 2 + (original_id / 4) + if original_id == 52: + return 15 + if original_id == 53: + return 16 + return 2 + (original_id // 4) static func create(seed: int = -1) -> Deck: - var d := Deck.new() - d._cards = [] - for deck_idx in range(2): - for orig_id in range(54): - var global_id := Card.card_id_from_deck(orig_id, deck_idx) - var suit := _suit_for(orig_id) - var rank := _rank_for(orig_id) - var c := Card.create(orig_id, suit, rank) - c.card_id = global_id - d._cards.append(c) - if seed >= 0: - d._shuffle_with_seed(seed) - else: - d._shuffle_random() - return d + var d := Deck.new() + d._cards = [] + for deck_idx in range(2): + for orig_id in range(54): + var global_id := Card.card_id_from_deck(orig_id, deck_idx) + var suit := _suit_for(orig_id) + var rank := _rank_for(orig_id) + var c := Card.create(orig_id, suit, rank) + c.card_id = global_id + d._cards.append(c) + if seed >= 0: + d._shuffle_with_seed(seed) + else: + d._shuffle_random() + return d func _shuffle_with_seed(seed: int) -> void: - var rng := RandomNumberGenerator.new() - rng.seed = seed - for i in range(_cards.size() - 1, 0, -1): - var j := rng.randi_range(0, i) - var tmp := _cards[i] - _cards[i] = _cards[j] - _cards[j] = tmp + var rng := RandomNumberGenerator.new() + rng.seed = seed + for i in range(_cards.size() - 1, 0, -1): + var j := rng.randi_range(0, i) + var tmp := _cards[i] + _cards[i] = _cards[j] + _cards[j] = tmp func _shuffle_random() -> void: - _shuffle_with_seed(Time.get_unix_time_from_system() as int) + _shuffle_with_seed(Time.get_unix_time_from_system() as int) func deal(count: int) -> Array[Card]: - var result: Array[Card] = [] - var actual := mini(count, _cards.size()) - for _i in range(actual): - result.append(_cards.pop_back()) - return result + var result: Array[Card] = [] + var actual := mini(count, _cards.size()) + for _i in range(actual): + result.append(_cards.pop_back()) + return result func remaining() -> int: - return _cards.size() + return _cards.size() diff --git a/src/core/move_generator.gd b/src/core/move_generator.gd index 03064aa..bc13cca 100644 --- a/src/core/move_generator.gd +++ b/src/core/move_generator.gd @@ -42,10 +42,10 @@ static func _gen_pairs(sorted: Array[Card], results: Array[HandEvaluator.Evaluat var rank_counts := {} for c in sorted: var rk := c.rank() - if not rank_counts.has(rk): rank_counts[rk] = [] + if not rank_counts.has(rk): rank_counts[rk] = [] as Array[Card] rank_counts[rk].append(c) for rk in rank_counts: - var cards: Array = rank_counts[rk] + var cards: Array[Card] = rank_counts[rk] if cards.size() >= 2: var ep := HandEvaluator.evaluate(cards.slice(0, 2), current_rank, config) if ep != null: results.append(ep) @@ -54,10 +54,10 @@ static func _gen_triples(sorted: Array[Card], results: Array[HandEvaluator.Evalu var rank_counts := {} for c in sorted: var rk := c.rank() - if not rank_counts.has(rk): rank_counts[rk] = [] + if not rank_counts.has(rk): rank_counts[rk] = [] as Array[Card] rank_counts[rk].append(c) for rk in rank_counts: - var cards: Array = rank_counts[rk] + var cards: Array[Card] = rank_counts[rk] if cards.size() >= 3: var ep := HandEvaluator.evaluate(cards.slice(0, 3), current_rank, config) if ep != null: results.append(ep) @@ -77,10 +77,10 @@ static func _gen_bombs(sorted: Array[Card], results: Array[HandEvaluator.Evaluat var rank_counts := {} for c in sorted: var rk := c.rank() - if not rank_counts.has(rk): rank_counts[rk] = [] + if not rank_counts.has(rk): rank_counts[rk] = [] as Array[Card] rank_counts[rk].append(c) for rk in rank_counts: - var cards: Array = rank_counts[rk] + var cards: Array[Card] = rank_counts[rk] if cards.size() >= 4: var ep := HandEvaluator.evaluate(cards.slice(0, 4), current_rank, config) if ep != null: results.append(ep) @@ -112,16 +112,16 @@ static func _gen_rocket(sorted: Array[Card], results: Array[HandEvaluator.Evalua var ep := HandEvaluator.evaluate(cards, current_rank, config) if ep != null: results.append(ep) -static func _find_pairs(hand: Array[Card]) -> Array: - var result := [] +static func _find_pairs(hand: Array[Card]) -> Array[Array]: + var result: Array[Array] = [] var rank_groups := {} for c in hand: var rk := c.rank() - if not rank_groups.has(rk): rank_groups[rk] = [] + if not rank_groups.has(rk): rank_groups[rk] = [] as Array[Card] rank_groups[rk].append(c) for rk in rank_groups: if rank_groups[rk].size() >= 2: - result.append(rank_groups[rk].slice(0, 2)) + result.append(rank_groups[rk].slice(0, 2) as Array[Card]) return result static func _card_in(cards: Array[Card], target: Card) -> bool: diff --git a/src/game/training_controller.gd b/src/game/training_controller.gd index 64d2323..993ac65 100644 --- a/src/game/training_controller.gd +++ b/src/game/training_controller.gd @@ -5,12 +5,12 @@ extends GameController var _current_hint: HandEvaluator.EvaluatedPlay = null func get_hint() -> HandEvaluator.EvaluatedPlay: - var hand := game_state.get_hand(game_state.round.active_player_idx) - if hand.is_empty(): - return null - var ai := L2RuleAI.new() - return ai.decide(hand, game_state.round.table, game_state.current_rank, game_state.rule_config) + var hand := game_state.get_hand(game_state.round.active_player_idx) + if hand.is_empty(): + return null + var ai := L2RuleAI.new() + return ai.decide(hand, game_state.round.table, game_state.current_rank, game_state.rule_config) func get_all_legal_moves() -> Array: - var hand := game_state.get_hand(game_state.round.active_player_idx) - return MoveGenerator.generate(hand, game_state.current_rank, game_state.rule_config) + var hand := game_state.get_hand(game_state.round.active_player_idx) + return MoveGenerator.generate(hand, game_state.current_rank, game_state.rule_config)