fix: suppress unused_signal warning on event_bus signals
This commit is contained in:
@@ -5,67 +5,67 @@ extends BaseAI
|
|||||||
const _C = preload("res://src/core/constants.gd")
|
const _C = preload("res://src/core/constants.gd")
|
||||||
|
|
||||||
func _init():
|
func _init():
|
||||||
ai_name = "Rule AI"
|
ai_name = "Rule AI"
|
||||||
|
|
||||||
func decide(hand: Array, table: Array, current_rank: int, config: RuleConfig) -> HandEvaluator.EvaluatedPlay:
|
func decide(hand: Array, table: Array, current_rank: int, config: RuleConfig) -> HandEvaluator.EvaluatedPlay:
|
||||||
var moves := MoveGenerator.generate(hand, current_rank, config)
|
var moves := MoveGenerator.generate(hand, current_rank, config)
|
||||||
var last_play := _last_non_pass(table)
|
var last_play := _last_non_pass(table)
|
||||||
var candidates: Array = []
|
var candidates: Array = []
|
||||||
for m in moves:
|
for m in moves:
|
||||||
if m.type == -1:
|
if m.type == -1:
|
||||||
continue
|
continue
|
||||||
if last_play == null:
|
if last_play == null:
|
||||||
candidates.append(m)
|
candidates.append(m)
|
||||||
elif _can_beat(m, last_play, config):
|
elif _can_beat(m, last_play, config):
|
||||||
candidates.append(m)
|
candidates.append(m)
|
||||||
if candidates.is_empty():
|
if candidates.is_empty():
|
||||||
return _pass_move()
|
return _pass_move()
|
||||||
var scored := _score_all(candidates, hand.size(), current_rank)
|
var scored := _score_all(candidates, hand.size(), current_rank)
|
||||||
scored.sort_custom(func(a, b): return a["score"] > b["score"])
|
scored.sort_custom(func(a, b): return a["score"] > b["score"])
|
||||||
return scored[0]["move"]
|
return scored[0]["move"]
|
||||||
|
|
||||||
func _score_all(moves: Array, hand_size: int, current_rank: int) -> Array:
|
func _score_all(moves: Array, hand_size: int, current_rank: int) -> Array:
|
||||||
var results := []
|
var results := []
|
||||||
for m in moves:
|
for m in moves:
|
||||||
var score := _score_move(m, hand_size, current_rank)
|
var score := _score_move(m, hand_size, current_rank)
|
||||||
results.append({"move": m, "score": score})
|
results.append({"move": m, "score": score})
|
||||||
return results
|
return results
|
||||||
|
|
||||||
func _score_move(play: HandEvaluator.EvaluatedPlay, hand_size: int, current_rank: int) -> float:
|
func _score_move(play: HandEvaluator.EvaluatedPlay, hand_size: int, current_rank: int) -> float:
|
||||||
var score := 0.0
|
var score := 0.0
|
||||||
var remaining := hand_size - play.cards.size()
|
var remaining := hand_size - play.cards.size()
|
||||||
score += (27.0 - remaining) / 27.0 * 0.3
|
score += (27.0 - remaining) / 27.0 * 0.3
|
||||||
if play.type == _C.TYPE_BOMB or play.type == _C.TYPE_ROCKET:
|
if play.type == _C.TYPE_BOMB or play.type == _C.TYPE_ROCKET:
|
||||||
score -= 0.2
|
score -= 0.2
|
||||||
elif play.type == _C.TYPE_STRAIGHT_FLUSH:
|
elif play.type == _C.TYPE_STRAIGHT_FLUSH:
|
||||||
score -= 0.1
|
score -= 0.1
|
||||||
score += play.cards.size() * 0.02
|
score += play.cards.size() * 0.02
|
||||||
if play.primary_rank >= 14 and remaining > 10:
|
if play.primary_rank >= 14 and remaining > 10:
|
||||||
score -= 0.1
|
score -= 0.1
|
||||||
if remaining <= 3:
|
if remaining <= 3:
|
||||||
score += 0.5
|
score += 0.5
|
||||||
if play.is_pure_bomb:
|
if play.is_pure_bomb:
|
||||||
score += 0.05
|
score += 0.05
|
||||||
return score
|
return score
|
||||||
|
|
||||||
func _can_beat(play: HandEvaluator.EvaluatedPlay, last: HandEvaluator.EvaluatedPlay, config: RuleConfig) -> bool:
|
func _can_beat(play: HandEvaluator.EvaluatedPlay, last: HandEvaluator.EvaluatedPlay, config: RuleConfig) -> bool:
|
||||||
if play.type == _C.TYPE_ROCKET:
|
if play.type == _C.TYPE_ROCKET:
|
||||||
return true
|
return true
|
||||||
if play.type == _C.TYPE_BOMB and last.type != _C.TYPE_ROCKET:
|
if play.type == _C.TYPE_BOMB and last.type != _C.TYPE_ROCKET:
|
||||||
return RuleEngine.compare_bombs(play, last, config) > 0
|
return RuleEngine.compare_bombs(play, last, config) > 0
|
||||||
if play.type == last.type:
|
if play.type == last.type:
|
||||||
return play.primary_rank > last.primary_rank
|
return play.primary_rank > last.primary_rank
|
||||||
return false
|
return false
|
||||||
|
|
||||||
func _last_non_pass(table: Array) -> HandEvaluator.EvaluatedPlay:
|
func _last_non_pass(table: Array) -> HandEvaluator.EvaluatedPlay:
|
||||||
for i in range(table.size() - 1, -1, -1):
|
for i in range(table.size() - 1, -1, -1):
|
||||||
var play: HandEvaluator.EvaluatedPlay = table[i]
|
var play: HandEvaluator.EvaluatedPlay = table[i]
|
||||||
if play.type != -1:
|
if play.type != -1:
|
||||||
return play
|
return play
|
||||||
return null
|
return null
|
||||||
|
|
||||||
func _pass_move() -> HandEvaluator.EvaluatedPlay:
|
func _pass_move() -> HandEvaluator.EvaluatedPlay:
|
||||||
var p := HandEvaluator.EvaluatedPlay.new()
|
var p := HandEvaluator.EvaluatedPlay.new()
|
||||||
p.type = -1
|
p.type = -1
|
||||||
p.primary_rank = 0
|
p.primary_rank = 0
|
||||||
return p
|
return p
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
# src/autoload/event_bus.gd
|
# src/autoload/event_bus.gd
|
||||||
|
@warning_ignore("unused_signal")
|
||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
signal player_played_cards(player_idx: int, play_type: int, cards: Array)
|
signal player_played_cards(player_idx: int, play_type: int, cards: Array)
|
||||||
|
|||||||
@@ -9,10 +9,10 @@ var controller: TrainingController
|
|||||||
@onready var status_label: Label = $StatusLabel
|
@onready var status_label: Label = $StatusLabel
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
play_button.pressed.connect(_on_play_pressed)
|
play_button.pressed.connect(_on_play_pressed)
|
||||||
pass_button.pressed.connect(_on_pass_pressed)
|
pass_button.pressed.connect(_on_pass_pressed)
|
||||||
hint_button.pressed.connect(_on_hint_pressed)
|
hint_button.pressed.connect(_on_hint_pressed)
|
||||||
start_training()
|
start_training()
|
||||||
|
|
||||||
func start_training() -> void:
|
func start_training() -> void:
|
||||||
controller = TrainingController.new()
|
controller = TrainingController.new()
|
||||||
@@ -70,5 +70,5 @@ func _on_game_ended(winner_team: int, reason: String) -> void:
|
|||||||
if hand_area: hand_area.disable_input()
|
if hand_area: hand_area.disable_input()
|
||||||
|
|
||||||
func _refresh_ui() -> void:
|
func _refresh_ui() -> void:
|
||||||
if controller and controller.game_state and hand_area:
|
if controller and controller.game_state and hand_area:
|
||||||
hand_area.update_hand(controller.game_state.get_hand(0))
|
hand_area.update_hand(controller.game_state.get_hand(0))
|
||||||
|
|||||||
Reference in New Issue
Block a user