game now correctly rotates through plays and goes to the next rounds when all cards have been played

This commit is contained in:
2025-07-15 19:38:27 +02:00
parent 231e861416
commit e0cea82394
6 changed files with 60 additions and 10 deletions
+22 -3
View File
@@ -7,6 +7,20 @@ enum CardStyle {
STICKMAN,
}
func _ready() -> void:
# wizard wins
assert(get_winning_card([1, 2, 3, 59], -1) == 59)
assert(get_winning_card([1, 2, 3, 59], 3) == 59)
# trump wins
assert(get_winning_card([1, 14, 2, 3], 4) == 3)
assert(get_winning_card([29, 14, 27, 31], 15) == 14)
assert(get_winning_card([1, 12, 6, 31], 30) == 31)
# joker win
assert(get_winning_card([54, 52, 55, 53], 31) == 54)
# other wins
assert(get_winning_card([14, 15, 18, 13], 16) == 18)
assert(get_winning_card([14, 15, 18, 13], 46) == 18)
func get_shuffled_cards(client_ids: Array[String], cards_to_pick: int) -> Dictionary: # Dictionary[String, Array[int]]
var dict: Dictionary = {}
var deck: Array[int] = full_deck.keys()
@@ -35,20 +49,25 @@ func get_card_texture(card_id: int, style: CardStyle = CardStyle.STICKMAN) -> Te
return load("res://cards/textures/" + style_name + "/" + _get_card_name(card_id) + ".webp")
func get_winning_card(card_ids: Array[int], trump: int) -> int:
print("ids: " + str(card_ids) + ", trump: " + str(trump))
if card_ids.has(56) or card_ids.has(57) or card_ids.has(58) or card_ids.has(59):
# cards contain magician
print("checking magician route")
for card_id in card_ids:
if full_deck[card_id].card_type == Card.CardType.MAGICIAN:
print("picked magician")
return card_id
return -1 # should not happen
elif not trump == -1:
# trump exists, determine winner from this
print("trump route")
var largest_trump_card_id: int = -1
var trump_color: Card.CardColor = full_deck[trump].color
for card_id in card_ids:
if full_deck[card_id].color == trump_color and card_id > largest_trump_card_id:
largest_trump_card_id = card_id
if not largest_trump_card_id == -1:
print("picked " + str(largest_trump_card_id))
return largest_trump_card_id
# no trump played; determine from highest played card
@@ -60,14 +79,16 @@ func get_winning_card(card_ids: Array[int], trump: int) -> int:
func _get_largest_non_trump_card(card_ids: Array[int]) -> int:
var largest_card_id: int = -1
print("nontrump route")
var first_color: Card.CardColor = _get_first_color_card(card_ids)
if first_color == Card.CardColor.WHITE:
print("all white")
return card_ids[0] # first one wins if all played cards are white
else:
for card_id in card_ids:
if full_deck[card_id].color == first_color and card_id > largest_card_id:
largest_card_id = card_id
print("picked " + str(largest_card_id))
return largest_card_id
## Returns the color of the first non-white card played.
@@ -82,8 +103,6 @@ func _get_card_name(card_id: int) -> String:
var color: String
var suffix: String
print("looking up card with id " + str(card_id))
if card_id < 13:
color = "blue"
elif card_id < 26: