From 10e6d2d6458253dea192356baf044365b8b0e5ce Mon Sep 17 00:00:00 2001 From: Tiger Date: Tue, 6 Jan 2026 08:12:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E9=83=A8=E5=88=86=E5=92=8C=E6=B8=B8=E6=88=8F=E5=86=85=E6=88=BF?= =?UTF-8?q?=E4=B8=BB=E6=88=BF=E5=AE=A2=E8=BA=AB=E4=BB=BD=E5=8F=8AIP?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E7=9A=84=E8=AF=86=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project.godot | 2 ++ scenes/game.tscn | 31 +++++++++++++++- scenes/main_menu.tscn | 18 +++++++--- scenes/settings.tscn | 54 ++++++++++++++++++++++++++++ scripts/autoload/GameManager.gd | 3 ++ scripts/autoload/GameManager.gd.uid | 1 + scripts/autoload/MultiGame.gd | 6 ++++ scripts/autoload/SceneManager.gd | 11 ++++++ scripts/autoload/SceneManager.gd.uid | 1 + scripts/game/game.gd | 17 +++++++++ scripts/game/game.gd.uid | 1 + scripts/main_menu/create_game_ui.gd | 1 + scripts/main_menu/join_game_ui.gd | 1 + scripts/main_menu/main_menu.gd | 4 +++ scripts/settings/settings.gd | 12 +++++++ scripts/settings/settings.gd.uid | 1 + 16 files changed, 159 insertions(+), 5 deletions(-) create mode 100644 scenes/settings.tscn create mode 100644 scripts/autoload/GameManager.gd create mode 100644 scripts/autoload/GameManager.gd.uid create mode 100644 scripts/autoload/SceneManager.gd create mode 100644 scripts/autoload/SceneManager.gd.uid create mode 100644 scripts/game/game.gd create mode 100644 scripts/game/game.gd.uid create mode 100644 scripts/settings/settings.gd create mode 100644 scripts/settings/settings.gd.uid diff --git a/project.godot b/project.godot index 194649f..370865c 100644 --- a/project.godot +++ b/project.godot @@ -18,6 +18,8 @@ config/icon="res://icon.svg" [autoload] MultiGame="*res://scripts/autoload/MultiGame.gd" +SceneManager="*res://scripts/autoload/SceneManager.gd" +GameManager="*res://scripts/autoload/GameManager.gd" [rendering] diff --git a/scenes/game.tscn b/scenes/game.tscn index cd8bb08..ea0bd22 100644 --- a/scenes/game.tscn +++ b/scenes/game.tscn @@ -1,3 +1,32 @@ -[gd_scene format=3 uid="uid://3gquhwcjfis7"] +[gd_scene load_steps=3 format=3 uid="uid://3gquhwcjfis7"] + +[ext_resource type="FontFile" uid="uid://c2bipf4tpdjj8" path="res://assets/fonts/AlibabaPuHuiTi-3-65-Medium.ttf" id="1_uwrxv"] +[ext_resource type="Script" uid="uid://78lmrp321x85" path="res://scripts/game/game.gd" id="1_yqjtg"] [node name="Game" type="Node2D"] +script = ExtResource("1_yqjtg") + +[node name="Background" type="ColorRect" parent="."] +offset_left = -34.0 +offset_top = -27.0 +offset_right = 1186.0 +offset_bottom = 694.0 +color = Color(0.7058824, 0.6862745, 0, 1) + +[node name="IsServerLabel" type="Label" parent="."] +offset_left = 30.0 +offset_top = 11.0 +offset_right = 227.0 +offset_bottom = 59.0 +theme_override_fonts/font = ExtResource("1_uwrxv") +theme_override_font_sizes/font_size = 20 +text = "啊啊啊啊啊:啊啊啊啊" + +[node name="IPLabel" type="Label" parent="."] +offset_left = 948.0 +offset_top = 11.0 +offset_right = 1052.0 +offset_bottom = 46.0 +theme_override_fonts/font = ExtResource("1_uwrxv") +theme_override_font_sizes/font_size = 24 +text = "127.0.0.2" diff --git a/scenes/main_menu.tscn b/scenes/main_menu.tscn index 6e34dcd..1c19e55 100644 --- a/scenes/main_menu.tscn +++ b/scenes/main_menu.tscn @@ -9,10 +9,10 @@ script = ExtResource("1_ekxnf") [node name="Background" type="ColorRect" parent="."] -offset_left = -21.0 -offset_top = -15.0 -offset_right = 1186.0 -offset_bottom = 654.0 +offset_left = -24.0 +offset_top = -22.0 +offset_right = 1183.0 +offset_bottom = 647.0 color = Color(0.7058824, 0.6862745, 0, 1) [node name="Title" type="Label" parent="."] @@ -138,8 +138,18 @@ offset_bottom = 126.0 theme_override_fonts/font = ExtResource("1_l6cm7") text = "请输入服务器IP(无需加端口)" +[node name="SettingButton" type="Button" parent="."] +offset_left = 1029.0 +offset_top = 14.0 +offset_right = 1137.0 +offset_bottom = 84.0 +theme_override_fonts/font = ExtResource("1_l6cm7") +theme_override_font_sizes/font_size = 30 +text = "设置" + [connection signal="pressed" from="StartGame" to="." method="_on_start_game_pressed"] [connection signal="pressed" from="JoinGame" to="." method="_on_join_game_pressed"] [connection signal="pressed" from="CreateGameUI/CreateGameButton" to="CreateGameUI" method="_on_create_game_button_pressed"] [connection signal="pressed" from="CreateGameUI/Warn/WarnButton" to="CreateGameUI" method="_on_warn_button_pressed"] [connection signal="pressed" from="JoinGameUI/JoinGameButton" to="JoinGameUI" method="_on_join_game_button_pressed"] +[connection signal="pressed" from="SettingButton" to="." method="_on_setting_button_pressed"] diff --git a/scenes/settings.tscn b/scenes/settings.tscn new file mode 100644 index 0000000..c85a05c --- /dev/null +++ b/scenes/settings.tscn @@ -0,0 +1,54 @@ +[gd_scene load_steps=3 format=3 uid="uid://bxbycggrcmo3q"] + +[ext_resource type="Script" uid="uid://deltvf06kqovt" path="res://scripts/settings/settings.gd" id="1_r6d6q"] +[ext_resource type="FontFile" uid="uid://c2bipf4tpdjj8" path="res://assets/fonts/AlibabaPuHuiTi-3-65-Medium.ttf" id="2_6wm04"] + +[node name="Settings" type="Node2D"] +script = ExtResource("1_r6d6q") + +[node name="Background" type="ColorRect" parent="."] +offset_left = -34.0 +offset_top = -27.0 +offset_right = 1186.0 +offset_bottom = 694.0 +color = Color(0.7058824, 0.6862745, 0, 1) + +[node name="DataSetting" type="Node2D" parent="."] + +[node name="DataSetLabel" type="Label" parent="DataSetting"] +offset_left = 45.0 +offset_top = 28.0 +offset_right = 193.0 +offset_bottom = 90.0 +theme_override_fonts/font = ExtResource("2_6wm04") +theme_override_font_sizes/font_size = 30 +text = "数据源设置" + +[node name="LineEdit" type="LineEdit" parent="DataSetting"] +offset_left = 217.0 +offset_top = 18.0 +offset_right = 874.0 +offset_bottom = 81.0 +theme_override_fonts/font = ExtResource("2_6wm04") +theme_override_font_sizes/font_size = 24 + +[node name="SaveButton" type="Button" parent="."] +offset_left = 56.0 +offset_top = 520.0 +offset_right = 220.0 +offset_bottom = 597.0 +theme_override_fonts/font = ExtResource("2_6wm04") +theme_override_font_sizes/font_size = 30 +text = "保存设置" + +[node name="CancelButton" type="Button" parent="."] +offset_left = 243.0 +offset_top = 514.0 +offset_right = 419.0 +offset_bottom = 603.0 +theme_override_fonts/font = ExtResource("2_6wm04") +theme_override_font_sizes/font_size = 30 +text = "取消" + +[connection signal="pressed" from="SaveButton" to="." method="_on_save_button_pressed"] +[connection signal="pressed" from="CancelButton" to="." method="_on_cancel_button_pressed"] diff --git a/scripts/autoload/GameManager.gd b/scripts/autoload/GameManager.gd new file mode 100644 index 0000000..5ee43d4 --- /dev/null +++ b/scripts/autoload/GameManager.gd @@ -0,0 +1,3 @@ +extends Node + +var data_origin: String = "" diff --git a/scripts/autoload/GameManager.gd.uid b/scripts/autoload/GameManager.gd.uid new file mode 100644 index 0000000..d28d611 --- /dev/null +++ b/scripts/autoload/GameManager.gd.uid @@ -0,0 +1 @@ +uid://c11tksjyetdby diff --git a/scripts/autoload/MultiGame.gd b/scripts/autoload/MultiGame.gd index 4cef584..39849e9 100644 --- a/scripts/autoload/MultiGame.gd +++ b/scripts/autoload/MultiGame.gd @@ -1,11 +1,17 @@ extends Node +var isServer: bool + +# 基于低级 ENet 多人游戏 + func create_server(player_num: int) -> void: + isServer = true var peer = ENetMultiplayerPeer.new() peer.create_server(8989, player_num) multiplayer.multiplayer_peer = peer func create_client(ip: String) -> void: + isServer = false var peer = ENetMultiplayerPeer.new() peer.create_client(ip, 8989) multiplayer.multiplayer_peer = peer \ No newline at end of file diff --git a/scripts/autoload/SceneManager.gd b/scripts/autoload/SceneManager.gd new file mode 100644 index 0000000..abc8999 --- /dev/null +++ b/scripts/autoload/SceneManager.gd @@ -0,0 +1,11 @@ +extends Node + +var current_scene = null + +func _ready(): + var root = get_tree().root + current_scene = root.get_child(root.get_child_count() - 1) + +func goto_scene(path: String): + current_scene = path + get_tree().change_scene_to_file("res://scenes/%s.tscn" % [path]) \ No newline at end of file diff --git a/scripts/autoload/SceneManager.gd.uid b/scripts/autoload/SceneManager.gd.uid new file mode 100644 index 0000000..f4e8d37 --- /dev/null +++ b/scripts/autoload/SceneManager.gd.uid @@ -0,0 +1 @@ +uid://dxogo0f6xslqs diff --git a/scripts/game/game.gd b/scripts/game/game.gd new file mode 100644 index 0000000..fb051f1 --- /dev/null +++ b/scripts/game/game.gd @@ -0,0 +1,17 @@ +extends Node2D + +func _ready() -> void: + init() + +func init() -> void: + if MultiGame.isServer: + $IsServerLabel.text = "房间运行中:您是房主" + else: + $IsServerLabel.text = "房间运行中:您是房客" + + var addresses: PackedStringArray = IP.get_local_addresses() + var ipaddress: String = "" + for address in addresses: + if address.substr(0, 8) == "192.168.": + ipaddress = address + $IPLabel.text = ipaddress diff --git a/scripts/game/game.gd.uid b/scripts/game/game.gd.uid new file mode 100644 index 0000000..36b08cf --- /dev/null +++ b/scripts/game/game.gd.uid @@ -0,0 +1 @@ +uid://78lmrp321x85 diff --git a/scripts/main_menu/create_game_ui.gd b/scripts/main_menu/create_game_ui.gd index 4ebe31e..abe16d9 100644 --- a/scripts/main_menu/create_game_ui.gd +++ b/scripts/main_menu/create_game_ui.gd @@ -6,6 +6,7 @@ func _on_create_game_button_pressed() -> void: if 2 <= player_num and player_num <= 4: MultiGame.create_server(int(player_num)) $".".hide() + SceneManager.goto_scene("game") else: $Warn.show() diff --git a/scripts/main_menu/join_game_ui.gd b/scripts/main_menu/join_game_ui.gd index 9062d22..54324a3 100644 --- a/scripts/main_menu/join_game_ui.gd +++ b/scripts/main_menu/join_game_ui.gd @@ -5,3 +5,4 @@ func _on_join_game_button_pressed() -> void: var ip: String = $JoinGameEdit.text MultiGame.create_client(ip) $".".hide() + SceneManager.goto_scene("game") diff --git a/scripts/main_menu/main_menu.gd b/scripts/main_menu/main_menu.gd index 078fd36..3db6c3c 100644 --- a/scripts/main_menu/main_menu.gd +++ b/scripts/main_menu/main_menu.gd @@ -6,3 +6,7 @@ func _on_join_game_pressed() -> void: func _on_start_game_pressed() -> void: $CreateGameUI.show() + + +func _on_setting_button_pressed() -> void: + SceneManager.goto_scene("settings") diff --git a/scripts/settings/settings.gd b/scripts/settings/settings.gd new file mode 100644 index 0000000..872d9a8 --- /dev/null +++ b/scripts/settings/settings.gd @@ -0,0 +1,12 @@ +extends Node2D + +func _ready() -> void: + $DataSetting/LineEdit.text = GameManager.data_origin + +func _on_save_button_pressed() -> void: + GameManager.data_origin = $DataSetting/LineEdit.text + SceneManager.goto_scene("main_menu") + + +func _on_cancel_button_pressed() -> void: + SceneManager.goto_scene("main_menu") diff --git a/scripts/settings/settings.gd.uid b/scripts/settings/settings.gd.uid new file mode 100644 index 0000000..3b36728 --- /dev/null +++ b/scripts/settings/settings.gd.uid @@ -0,0 +1 @@ +uid://deltvf06kqovt