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") script = ExtResource("1_yqjtg")
[node name="Background" type="ColorRect" parent="." unique_id=802635055] [node name="Background" type="ColorRect" parent="." unique_id=802635055]
offset_left = -34.0 offset_left = -29.0
offset_top = -27.0 offset_top = -18.0
offset_right = 2594.0 offset_right = 2599.0
offset_bottom = 1476.0 offset_bottom = 1485.0
color = Color(0.7058824, 0.6862745, 0, 1) color = Color(0.7058824, 0.6862745, 0, 1)
[node name="IsServerLabel" type="Label" parent="." unique_id=592205212] [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 theme_override_font_sizes/font_size = 24
[node name="IPBeginSetting" type="Node2D" parent="." unique_id=1428256194] [node name="IPBeginSetting" type="Node2D" parent="." unique_id=1428256194]
position = Vector2(-1, 94) position = Vector2(0, 100)
metadata/_edit_group_ = true metadata/_edit_group_ = true
[node name="IPBeginSetLabel" type="Label" parent="IPBeginSetting" unique_id=561890346] [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 theme_override_font_sizes/font_size = 24
[node name="UsernameSetting" type="Node2D" parent="." unique_id=564366013] [node name="UsernameSetting" type="Node2D" parent="." unique_id=564366013]
position = Vector2(0, 208) position = Vector2(0, 200)
metadata/_edit_group_ = true metadata/_edit_group_ = true
[node name="UsernameSetLabel" type="Label" parent="UsernameSetting" unique_id=1569658441] [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 theme_override_font_sizes/font_size = 24
[node name="LoadSource" type="Node2D" parent="." unique_id=230611076] [node name="LoadSource" type="Node2D" parent="." unique_id=230611076]
position = Vector2(44, 314) position = Vector2(40, 300)
metadata/_edit_group_ = true metadata/_edit_group_ = true
[node name="LoadSourceLabel" type="Label" parent="LoadSource" unique_id=299353496] [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 theme_override_font_sizes/font_size = 25
[node name="ChooseLanguage" type="Node2D" parent="." unique_id=323270128] [node name="ChooseLanguage" type="Node2D" parent="." unique_id=323270128]
position = Vector2(39, 405) position = Vector2(40, 400)
metadata/_edit_group_ = true metadata/_edit_group_ = true
[node name="ChooseLanguageLabel" type="Label" parent="ChooseLanguage" unique_id=1719434618] [node name="ChooseLanguageLabel" type="Label" parent="ChooseLanguage" unique_id=1719434618]
@@ -130,10 +130,10 @@ theme_override_font_sizes/font_size = 30
text = "SETTINGS_SAVESETTINGS" text = "SETTINGS_SAVESETTINGS"
[node name="DownloadButton" type="Button" parent="." unique_id=315804661] [node name="DownloadButton" type="Button" parent="." unique_id=315804661]
offset_left = 598.0 offset_left = 595.0
offset_top = 1316.0 offset_top = 1299.0
offset_right = 774.0 offset_right = 923.0
offset_bottom = 1405.0 offset_bottom = 1388.0
theme_override_fonts/font = ExtResource("2_6wm04") theme_override_fonts/font = ExtResource("2_6wm04")
theme_override_font_sizes/font_size = 30 theme_override_font_sizes/font_size = 30
text = "SETTINGS_DOWNLOAD" text = "SETTINGS_DOWNLOAD"
+25 -38
View File
@@ -17,17 +17,17 @@ var client_round: int = 0
var game_started: bool = false var game_started: bool = false
func add_player(id: int) -> void: 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) players.append(id)
player_cards[id] = [] player_cards[id] = []
if not player_turns.has(id):
player_turns[id] = 0 player_turns[id] = 0
if not player_hp.has(id):
player_hp[id] = 100 player_hp[id] = 100
func remove_player(id: int) -> void: func remove_player(id: int) -> void:
var index = players.find(id) var index = players.find(id)
if index != -1: if index == -1:
return
players.remove_at(index) players.remove_at(index)
player_cards.erase(id) player_cards.erase(id)
player_turns.erase(id) player_turns.erase(id)
@@ -40,11 +40,9 @@ func create_server(playern: int) -> void:
if error != OK: if error != OK:
push_error("Failed to create server: " + str(error)) push_error("Failed to create server: " + str(error))
return return
multiplayer.multiplayer_peer = peer multiplayer.multiplayer_peer = peer
multiplayer.peer_connected.connect(_on_peer_connected) multiplayer.peer_connected.connect(_on_peer_connected)
multiplayer.peer_disconnected.connect(_on_peer_disconnected) multiplayer.peer_disconnected.connect(_on_peer_disconnected)
add_player(1) add_player(1)
func create_client(ip: String) -> void: func create_client(ip: String) -> void:
@@ -52,7 +50,6 @@ func create_client(ip: String) -> void:
if error != OK: if error != OK:
push_error("Failed to create client: " + str(error)) push_error("Failed to create client: " + str(error))
return return
multiplayer.multiplayer_peer = peer multiplayer.multiplayer_peer = peer
func _on_peer_connected(id: int) -> void: func _on_peer_connected(id: int) -> void:
@@ -69,11 +66,9 @@ func start_game() -> void:
if not multiplayer.is_server(): if not multiplayer.is_server():
push_error("Only the server can start the game") push_error("Only the server can start the game")
return return
if players.size() != max_players: if players.size() != max_players:
push_error("Not enough players to start the game") push_error("Not enough players to start the game")
return return
game_started = true game_started = true
server_round = 1 server_round = 1
deal_cards() deal_cards()
@@ -82,7 +77,6 @@ func start_game() -> void:
func extract() -> String: func extract() -> String:
if cards.is_empty(): if cards.is_empty():
return "" return ""
var index = randi() % cards.size() var index = randi() % cards.size()
var card = cards[index] var card = cards[index]
cards.remove_at(index) cards.remove_at(index)
@@ -92,14 +86,14 @@ func deal_cards() -> void:
for player_id in players: for player_id in players:
while player_cards[player_id].size() < 8: while player_cards[player_id].size() < 8:
var card = extract() var card = extract()
if card != "": if card.is_empty():
break
player_cards[player_id].append(card) player_cards[player_id].append(card)
func next_round() -> void: func next_round() -> void:
if not multiplayer.is_server(): if not multiplayer.is_server():
push_error("Only the server can advance rounds") push_error("Only the server can advance rounds")
return return
settle_round() settle_round()
server_round += 1 server_round += 1
sync_game_state.rpc() sync_game_state.rpc()
@@ -112,17 +106,15 @@ func request_card_draw(player_id: int) -> void:
if not player_cards.has(player_id): if not player_cards.has(player_id):
push_error("Player not found: " + str(player_id)) push_error("Player not found: " + str(player_id))
return return
var cards_to_draw := 4
var cards_to_draw: int = 4 if server_round == 1 and player_turns.get(player_id, -1) <= 1:
if server_round == 1 and player_turns.has(player_id) and 0 <= player_turns[player_id] <= 1:
cards_to_draw = 3 cards_to_draw = 3
for i in cards_to_draw:
for i in range(cards_to_draw):
if player_cards[player_id].size() >= 8: if player_cards[player_id].size() >= 8:
break break
var card = extract() var card = extract()
if card != "": if card.is_empty():
break
player_cards[player_id].append(card) player_cards[player_id].append(card)
func get_my_cards() -> void: func get_my_cards() -> void:
@@ -131,8 +123,7 @@ func get_my_cards() -> void:
@rpc("any_peer", "call_remote", "reliable") @rpc("any_peer", "call_remote", "reliable")
func request_cards() -> void: func request_cards() -> void:
var sender_id = multiplayer.get_remote_sender_id() var sender_id = multiplayer.get_remote_sender_id()
var data: Array = player_cards.get(sender_id, []) send_cards.rpc_id(sender_id, player_cards.get(sender_id, []))
send_cards.rpc_id(sender_id, data)
@rpc("authority", "call_remote", "reliable") @rpc("authority", "call_remote", "reliable")
func send_cards(data: Array) -> void: func send_cards(data: Array) -> void:
@@ -141,16 +132,14 @@ func send_cards(data: Array) -> void:
func sync_game_state() -> void: func sync_game_state() -> void:
if not multiplayer.is_server(): if not multiplayer.is_server():
return return
sync_game_state_rpc.rpc({
var data: Dictionary = {} "cards": cards,
data["cards"] = cards "player_cards": player_cards,
data["player_cards"] = player_cards "player_turns": player_turns,
data["player_turns"] = player_turns "player_hp": player_hp,
data["player_hp"] = player_hp "server_round": server_round,
data["server_round"] = server_round "game_started": game_started
data["game_started"] = game_started })
sync_game_state_rpc.rpc(data)
@rpc("authority", "call_remote", "reliable") @rpc("authority", "call_remote", "reliable")
func sync_game_state_rpc(data: Dictionary) -> void: func sync_game_state_rpc(data: Dictionary) -> void:
@@ -164,13 +153,11 @@ func sync_game_state_rpc(data: Dictionary) -> void:
func sync_players() -> void: func sync_players() -> void:
if not multiplayer.is_server(): if not multiplayer.is_server():
return return
sync_players_rpc.rpc({
var data: Dictionary = {} "players": players,
data["players"] = players "player_username": player_username,
data["player_username"] = player_username "player_hp": player_hp
data["player_hp"] = player_hp })
sync_players_rpc.rpc(data)
@rpc("authority", "call_remote", "reliable") @rpc("authority", "call_remote", "reliable")
func sync_players_rpc(data: Dictionary) -> void: func sync_players_rpc(data: Dictionary) -> void: