feat: 优化代码

This commit is contained in:
2026-04-03 13:04:50 +08:00
parent 62f2c998b7
commit 0f9297a9e1
3 changed files with 48 additions and 61 deletions
+4 -4
View File
@@ -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]
+8 -8
View File
@@ -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"
+25 -38
View File
@@ -17,17 +17,17 @@ 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):
if players.size() >= max_players or players.has(id):
return
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
func remove_player(id: int) -> void:
var index = players.find(id)
if index != -1:
if index == -1:
return
players.remove_at(index)
player_cards.erase(id)
player_turns.erase(id)
@@ -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 != "":
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,17 +106,15 @@ 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 != "":
if card.is_empty():
break
player_cards[player_id].append(card)
func get_my_cards() -> void:
@@ -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: