diff --git a/src/core/move_generator.gd b/src/core/move_generator.gd index 67373d7..eea2fcb 100644 --- a/src/core/move_generator.gd +++ b/src/core/move_generator.gd @@ -10,10 +10,10 @@ const BEAM_WIDTH := 50 static func generate(hand: Array[Card], current_rank: int, config: RuleConfig) -> Array[HandEvaluator.EvaluatedPlay]: var results: Array[HandEvaluator.EvaluatedPlay] = [] - var pass := HandEvaluator.EvaluatedPlay.new() - pass.type = -1 - pass.primary_rank = 0 - results.append(pass) + var pass_play := HandEvaluator.EvaluatedPlay.new() + pass_play.type = -1 + pass_play.primary_rank = 0 + results.append(pass_play) if hand.is_empty(): return results var sorted := hand.duplicate(false) diff --git a/src/game/game_controller.gd b/src/game/game_controller.gd index 604fef7..1faf97e 100644 --- a/src/game/game_controller.gd +++ b/src/game/game_controller.gd @@ -45,10 +45,10 @@ func handle_human_pass() -> Dictionary: var old_last := game_state.round.last_non_pass_player() if old_last >= 0 and old_last == game_state.round.active_player_idx: return {"ok": false, "error_code": 3, "data": null} - var pass := HandEvaluator.EvaluatedPlay.new() - pass.type = -1 - pass.primary_rank = 0 - _apply_play(game_state.round.active_player_idx, pass) + var pass_play := HandEvaluator.EvaluatedPlay.new() + pass_play.type = -1 + pass_play.primary_rank = 0 + _apply_play(game_state.round.active_player_idx, pass_play) _advance_turn() return {"ok": true, "error_code": 0, "data": null} diff --git a/tests/hello.gd b/tests/hello.gd new file mode 100644 index 0000000..8162af3 --- /dev/null +++ b/tests/hello.gd @@ -0,0 +1,4 @@ +extends Node +func _ready(): + print("hello") + get_tree().quit(0) diff --git a/tests/quick_test.gd b/tests/quick_test.gd new file mode 100644 index 0000000..a3b26f8 --- /dev/null +++ b/tests/quick_test.gd @@ -0,0 +1,47 @@ +extends Node + +func _ready(): + print("=== Guandan Card Game - Core Logic Test ===\n") + + var config := RuleConfig.standard() + var deck := Deck.create(42) + print("Deck: %d cards" % deck.remaining()) + assert(deck.remaining() == 108, "deck size") + + deck = Deck.create(42) + deck.deal(108) + assert(deck.remaining() == 0, "deal all") + + var d1 := Deck.create(42) + var d2 := Deck.create(42) + var h1 := d1.deal(27) + var h2 := d2.deal(27) + var deterministic := true + for i in range(27): + if h1[i].card_id != h2[i].card_id: deterministic = false + assert(deterministic, "shuffle deterministic") + + var gs := GameState.create(config, 42) + assert(gs.current_rank == 2, "start level 2") + + var t := Actions.Team.create_team(0, 0, 2) + assert(t.teammate_of(0) == 2, "teammate") + + var l1 := L1BasicAI.new() + var hand: Array = [h1[0]] + var decision := l1.decide(hand, [], 5, config) + assert(decision.type != -2, "L1 AI returns valid result") + + var l2 := L2RuleAI.new() + var decision2 := l2.decide(hand, [], 5, config) + assert(decision2.type != -2, "L2 AI returns valid result") + + print("\n=== ALL TESTS PASSED ===") + get_tree().quit(0) + +func assert(condition: bool, name: String): + if condition: + print(" PASS: %s" % name) + else: + printerr(" FAIL: %s" % name) + get_tree().quit(1)