From 0f9297a9e1d1310d1ece8271aae34346df150da0 Mon Sep 17 00:00:00 2001 From: Tiger Date: Fri, 3 Apr 2026 13:04:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/game/game.tscn | 8 ++-- scenes/menus/settings.tscn | 16 +++---- scripts/autoload/MultiGame.gd | 85 +++++++++++++++-------------------- 3 files changed, 48 insertions(+), 61 deletions(-) diff --git a/scenes/game/game.tscn b/scenes/game/game.tscn index f1966ed..8feaa79 100644 --- a/scenes/game/game.tscn +++ b/scenes/game/game.tscn @@ -7,10 +7,10 @@ script = ExtResource("1_yqjtg") [node name="Background" type="ColorRect" parent="." unique_id=802635055] -offset_left = -34.0 -offset_top = -27.0 -offset_right = 2594.0 -offset_bottom = 1476.0 +offset_left = -29.0 +offset_top = -18.0 +offset_right = 2599.0 +offset_bottom = 1485.0 color = Color(0.7058824, 0.6862745, 0, 1) [node name="IsServerLabel" type="Label" parent="." unique_id=592205212] diff --git a/scenes/menus/settings.tscn b/scenes/menus/settings.tscn index 461323f..b331d71 100644 --- a/scenes/menus/settings.tscn +++ b/scenes/menus/settings.tscn @@ -34,7 +34,7 @@ theme_override_fonts/font = ExtResource("2_6wm04") theme_override_font_sizes/font_size = 24 [node name="IPBeginSetting" type="Node2D" parent="." unique_id=1428256194] -position = Vector2(-1, 94) +position = Vector2(0, 100) metadata/_edit_group_ = true [node name="IPBeginSetLabel" type="Label" parent="IPBeginSetting" unique_id=561890346] @@ -55,7 +55,7 @@ theme_override_fonts/font = ExtResource("2_6wm04") theme_override_font_sizes/font_size = 24 [node name="UsernameSetting" type="Node2D" parent="." unique_id=564366013] -position = Vector2(0, 208) +position = Vector2(0, 200) metadata/_edit_group_ = true [node name="UsernameSetLabel" type="Label" parent="UsernameSetting" unique_id=1569658441] @@ -76,7 +76,7 @@ theme_override_fonts/font = ExtResource("2_6wm04") theme_override_font_sizes/font_size = 24 [node name="LoadSource" type="Node2D" parent="." unique_id=230611076] -position = Vector2(44, 314) +position = Vector2(40, 300) metadata/_edit_group_ = true [node name="LoadSourceLabel" type="Label" parent="LoadSource" unique_id=299353496] @@ -96,7 +96,7 @@ offset_bottom = 60.0 theme_override_font_sizes/font_size = 25 [node name="ChooseLanguage" type="Node2D" parent="." unique_id=323270128] -position = Vector2(39, 405) +position = Vector2(40, 400) metadata/_edit_group_ = true [node name="ChooseLanguageLabel" type="Label" parent="ChooseLanguage" unique_id=1719434618] @@ -130,10 +130,10 @@ theme_override_font_sizes/font_size = 30 text = "SETTINGS_SAVESETTINGS" [node name="DownloadButton" type="Button" parent="." unique_id=315804661] -offset_left = 598.0 -offset_top = 1316.0 -offset_right = 774.0 -offset_bottom = 1405.0 +offset_left = 595.0 +offset_top = 1299.0 +offset_right = 923.0 +offset_bottom = 1388.0 theme_override_fonts/font = ExtResource("2_6wm04") theme_override_font_sizes/font_size = 30 text = "SETTINGS_DOWNLOAD" diff --git a/scripts/autoload/MultiGame.gd b/scripts/autoload/MultiGame.gd index 8ab669d..bb045e6 100644 --- a/scripts/autoload/MultiGame.gd +++ b/scripts/autoload/MultiGame.gd @@ -17,22 +17,22 @@ var client_round: int = 0 var game_started: bool = false func add_player(id: int) -> void: - if players.size() < max_players and not players.has(id): - players.append(id) - player_cards[id] = [] - if not player_turns.has(id): - player_turns[id] = 0 - if not player_hp.has(id): - player_hp[id] = 100 + if players.size() >= max_players or players.has(id): + return + players.append(id) + player_cards[id] = [] + player_turns[id] = 0 + player_hp[id] = 100 func remove_player(id: int) -> void: var index = players.find(id) - if index != -1: - players.remove_at(index) - player_cards.erase(id) - player_turns.erase(id) - player_hp.erase(id) - player_username.erase(id) + if index == -1: + return + players.remove_at(index) + player_cards.erase(id) + player_turns.erase(id) + player_hp.erase(id) + player_username.erase(id) func create_server(playern: int) -> void: max_players = playern @@ -40,11 +40,9 @@ func create_server(playern: int) -> void: if error != OK: push_error("Failed to create server: " + str(error)) return - multiplayer.multiplayer_peer = peer multiplayer.peer_connected.connect(_on_peer_connected) multiplayer.peer_disconnected.connect(_on_peer_disconnected) - add_player(1) func create_client(ip: String) -> void: @@ -52,7 +50,6 @@ func create_client(ip: String) -> void: if error != OK: push_error("Failed to create client: " + str(error)) return - multiplayer.multiplayer_peer = peer func _on_peer_connected(id: int) -> void: @@ -69,11 +66,9 @@ func start_game() -> void: if not multiplayer.is_server(): push_error("Only the server can start the game") return - if players.size() != max_players: push_error("Not enough players to start the game") return - game_started = true server_round = 1 deal_cards() @@ -82,7 +77,6 @@ func start_game() -> void: func extract() -> String: if cards.is_empty(): return "" - var index = randi() % cards.size() var card = cards[index] cards.remove_at(index) @@ -92,14 +86,14 @@ func deal_cards() -> void: for player_id in players: while player_cards[player_id].size() < 8: var card = extract() - if card != "": - player_cards[player_id].append(card) + if card.is_empty(): + break + player_cards[player_id].append(card) func next_round() -> void: if not multiplayer.is_server(): push_error("Only the server can advance rounds") return - settle_round() server_round += 1 sync_game_state.rpc() @@ -112,18 +106,16 @@ func request_card_draw(player_id: int) -> void: if not player_cards.has(player_id): push_error("Player not found: " + str(player_id)) return - - var cards_to_draw: int = 4 - - if server_round == 1 and player_turns.has(player_id) and 0 <= player_turns[player_id] <= 1: + var cards_to_draw := 4 + if server_round == 1 and player_turns.get(player_id, -1) <= 1: cards_to_draw = 3 - - for i in range(cards_to_draw): + for i in cards_to_draw: if player_cards[player_id].size() >= 8: break var card = extract() - if card != "": - player_cards[player_id].append(card) + if card.is_empty(): + break + player_cards[player_id].append(card) func get_my_cards() -> void: request_cards.rpc_id(1) @@ -131,8 +123,7 @@ func get_my_cards() -> void: @rpc("any_peer", "call_remote", "reliable") func request_cards() -> void: var sender_id = multiplayer.get_remote_sender_id() - var data: Array = player_cards.get(sender_id, []) - send_cards.rpc_id(sender_id, data) + send_cards.rpc_id(sender_id, player_cards.get(sender_id, [])) @rpc("authority", "call_remote", "reliable") func send_cards(data: Array) -> void: @@ -141,16 +132,14 @@ func send_cards(data: Array) -> void: func sync_game_state() -> void: if not multiplayer.is_server(): return - - var data: Dictionary = {} - data["cards"] = cards - data["player_cards"] = player_cards - data["player_turns"] = player_turns - data["player_hp"] = player_hp - data["server_round"] = server_round - data["game_started"] = game_started - - sync_game_state_rpc.rpc(data) + sync_game_state_rpc.rpc({ + "cards": cards, + "player_cards": player_cards, + "player_turns": player_turns, + "player_hp": player_hp, + "server_round": server_round, + "game_started": game_started + }) @rpc("authority", "call_remote", "reliable") func sync_game_state_rpc(data: Dictionary) -> void: @@ -164,13 +153,11 @@ func sync_game_state_rpc(data: Dictionary) -> void: func sync_players() -> void: if not multiplayer.is_server(): return - - var data: Dictionary = {} - data["players"] = players - data["player_username"] = player_username - data["player_hp"] = player_hp - - sync_players_rpc.rpc(data) + sync_players_rpc.rpc({ + "players": players, + "player_username": player_username, + "player_hp": player_hp + }) @rpc("authority", "call_remote", "reliable") func sync_players_rpc(data: Dictionary) -> void: