extends Node2D @onready var card_manager = $CardManager @onready var deck = $CardManager/deck @onready var player_1_hand = $CardManager/Player1Hand @onready var player_1_pile = $CardManager/Player1PlayPile @onready var player_2_hand = $CardManager/Player2Hand @onready var player_2_pile = $CardManager/Player2PlayPile @onready var player_3_hand = $CardManager/Player3Hand @onready var player_3_pile = $CardManager/Player3PlayPile @onready var player_4_hand = $CardManager/Player4Hand @onready var player_4_pile = $CardManager/Player4PlayPile @onready var team_1_stiche = $CardManager/Team1Stiche @onready var team_2_stiche = $CardManager/Team2Stiche @onready var trumpbuttons = $ButtonsTrumpSelect @onready var first_player = $CardManager/Player1PlayPile var trump : String var rounds_played : int var team_1_points :int = 0 var team_2_points :int = 0 const DEAL_PAUSE = 0.5 signal dealt func _ready(): trumpbuttons.trump.connect(define_trump.bind()) player_1_pile.enable_drop_zone = false player_1_pile.sensor_visibility = false setup_game() func setup_game(): # Create a deck of cards create_standard_deck() deck._held_cards.shuffle() player_1_hand.allow_movement = true player_2_hand.allow_movement = true player_3_hand.allow_movement = true player_4_hand.allow_movement = true # Deal initial hand var deal_r: int =1 while true: deal_cards_to_hand(3, player_1_hand) await get_tree().create_timer(DEAL_PAUSE).timeout deal_cards_to_hand(3, player_2_hand) await get_tree().create_timer(DEAL_PAUSE).timeout deal_cards_to_hand(3, player_3_hand) await get_tree().create_timer(DEAL_PAUSE).timeout deal_cards_to_hand(3, player_4_hand) if deal_r == 3: dealt.emit() break else: await get_tree().create_timer(DEAL_PAUSE).timeout deal_r += 1 await get_tree().create_timer(DEAL_PAUSE).timeout trumpbuttons.visible = true func define_trump(suit : String): trump = suit play_round() func play_round(): var player = first_player rounds_played += 1 if rounds_played == 10: count_points() return var n : int = 1 while true: await turn(player) if n == 4: break match player: player_1_pile: player = player_2_pile player_2_pile: player = player_3_pile player_3_pile: player = player_4_pile player_4_pile: player = player_1_pile n += 1 get_turn_winner() play_round() func turn(player): player.sensor_visibility = true player.enable_drop_zone = true player._redraw_drop_zone() await player.played player.enable_drop_zone = false player._redraw_drop_zone() func count_points(): for i in team_1_stiche._held_cards: match i[0].card_info["value"]: 6: if trump == "Down": team_1_points += 11 8: if trump == "Top" or trump == "Down": team_1_points += 8 9: if i.card_info.suit == trump: team_1_points += 14 10: team_1_points += 10 11: if i.card_info.suit == trump: team_1_points += 20 else: team_1_points += 2 12: team_1_points += 3 13: team_1_points += 4 14: if trump != "Down": team_1_points += 11 print(team_1_points) for i in team_2_stiche._held_cards: match i.card_info["value"]: 6: if trump == "Down": team_2_points += 11 8: if trump == "Top" or trump == "Down": team_2_points += 8 9: if i.card_info.suit == trump: team_2_points += 14 10: team_2_points += 10 11: if i.card_info.suit == trump: team_2_points += 20 else: team_2_points += 2 12: team_2_points += 3 13: team_2_points += 4 14: if trump != "Down": team_2_points += 11 print(team_2_points) func get_turn_winner(): var cards = { 1: {"value": int(player_1_pile.get_top_cards(1)[0].card_info.value), "suit": player_1_pile.get_top_cards(1)[0].card_info.suit}, 2: {"value": int(player_2_pile.get_top_cards(1)[0].card_info.value), "suit": player_2_pile.get_top_cards(1)[0].card_info.suit}, 3: {"value": int(player_3_pile.get_top_cards(1)[0].card_info.value), "suit": player_3_pile.get_top_cards(1)[0].card_info.suit}, 4: {"value": int(player_4_pile.get_top_cards(1)[0].card_info.value), "suit": player_4_pile.get_top_cards(1)[0].card_info.suit} } print(trump) if trump != "Top" and trump != "Down": print("pass") for card in cards: if trump == cards[card]["suit"]: match cards[card]["value"]: 11: cards[card]["value"] += 80 9: cards[card]["value"] += 50 _: cards[card]["value"] += 20 print(cards[card]["value"]) elif trump == "Down": for card in cards: cards[card]["value"] = cards[card]["value"] * (-1) print(cards[card]["value"]) var played_suit = first_player.get_top_cards(1)[0].card_info.suit var highest_card: int var highest_value: int = -15 for i in cards: var card = cards[i] if card["suit"] == played_suit and card["value"] > highest_value or card["suit"] == trump and card["value"] > highest_value: highest_value = card["value"] highest_card = i await get_tree().create_timer(DEAL_PAUSE).timeout match highest_card: 1: first_player = player_1_pile move_to_stiche(1) 2: first_player = player_2_pile move_to_stiche(2) 3: first_player = player_3_pile move_to_stiche(1) 4: first_player = player_4_pile move_to_stiche(2) func move_to_stiche(team: int): if team == 1: team_1_stiche.move_cards(player_1_pile.get_top_cards(1)) team_1_stiche.move_cards(player_2_pile.get_top_cards(1)) team_1_stiche.move_cards(player_3_pile.get_top_cards(1)) team_1_stiche.move_cards(player_4_pile.get_top_cards(1)) else: team_2_stiche.move_cards(player_1_pile.get_top_cards(1)) team_2_stiche.move_cards(player_2_pile.get_top_cards(1)) team_2_stiche.move_cards(player_3_pile.get_top_cards(1)) team_2_stiche.move_cards(player_4_pile.get_top_cards(1)) turn(first_player) func create_standard_deck(): var suits = ["Club", "Diamond", "Heart", "Spade"] var values = ["A", "6", "7", "8", "9", "10", "B", "Q", "K"] for suit in suits: for value in values: var card_name = "%s_%s" % [suit, value] var card = card_manager.card_factory.create_card(card_name, deck) deck.add_card(card) func deal_cards_to_hand(count: int, player): for i in count: if deck.get_card_count() > 0: var card = deck.get_top_cards(1).front() player.move_cards([card])