feat: 创建了游戏循环管理器

This commit is contained in:
2026-04-05 14:31:16 +08:00
parent c0c92fb2c4
commit 61ce331a00
6 changed files with 36 additions and 4 deletions
+8 -1
View File
@@ -31,6 +31,7 @@ game/
- DownloadManager.gd # 下载管理
- MultiGame.gd # 多人游戏功能
- SceneManager.gd # 场景管理
- GameLoopManager.gd # 游戏循环管理
- main_menu/
- main_menu.gd
- join_game_ui.gd
@@ -46,6 +47,12 @@ game/
请先运行数据后端,在游戏设置中输入后端 URL(包含端口号和 `http://``https://` 前缀),或者选择本地已有的数据源,然后创建游戏或加入游戏开始游玩。
## 部分游戏逻辑介绍
### 游戏循环
游戏循环管理器(GameLoopManager.gd)负责游戏游戏循环的管理,其中不可避免地与多人游戏管理器(MultiGame.gd)交互与交叉。
## 最佳实践
本项目目前正在使用 Godot 4.6.2 进行开发。开发用语言为 GDScript。
@@ -56,4 +63,4 @@ game/
- 除连接了信号或 HTTPRequest、MultiplayerAPI 的函数外,任何函数都不应该以下划线(`_`)开头。
- 函数之间既可间隔一行,也可间隔两行。建议间隔两行,部分间隔一行的函数为遗留问题。
- 函数之间既可间隔一行,也可间隔两行。建议绑定 Godot 信号的函数间隔两行(自动空行),其余函数间隔一行,部分间隔一行的函数为遗留问题。
+1
View File
@@ -25,6 +25,7 @@ MultiGame="*res://scripts/autoload/MultiGame.gd"
SceneManager="*res://scripts/autoload/SceneManager.gd"
GameManager="*res://scripts/autoload/GameManager.gd"
DownloadManager="*res://scripts/autoload/DownloadManager.gd"
GameLoopManager="*uid://qxowgxfp4iwm"
[display]
+22
View File
@@ -0,0 +1,22 @@
extends Node
var game_round: int = -1
signal end_game
func _ready() -> void:
end_game.connect(_on_end_game)
func start_game() -> void:
game_round = 1
func settle_round() -> void:
game_round += 1
if check_game_end():
end_game.emit()
func check_game_end() -> bool:
return false
func _on_end_game() -> void:
game_round = -1
+1
View File
@@ -0,0 +1 @@
uid://qxowgxfp4iwm
+1 -2
View File
@@ -2,7 +2,7 @@ extends Node
const PORT: int = 8989
const MAX_HAND_SIZE: int = 8
const INITIAL_HP: int = 100
const INITIAL_HP: int = 4
const DEFAULT_DRAW_COUNT: int = 4
const FIRST_ROUND_DRAW_COUNT: int = 3
@@ -19,7 +19,6 @@ var cards: Array[String] = []
var my_card: Array[String] = []
var server_round: int = 0
var client_round: int = 0
var game_started: bool = false
func add_player(id: int) -> void:
+3 -1
View File
@@ -4,17 +4,18 @@ var card_list: Array
func _ready() -> void:
init()
GameLoopManager.start_game()
var card = create_card("Oxygen")
card.show()
card.set_pos(300, 300)
print(card.get_pos())
func init() -> void:
# 设置 UI 展示文本
if multiplayer.is_server():
$IsServerLabel.text = "GAMEUI_URHOST"
else:
$IsServerLabel.text = "GAMEUI_URGUEST"
var addresses: PackedStringArray = IP.get_local_addresses()
var ipaddress: String = ""
for address in addresses:
@@ -24,6 +25,7 @@ func init() -> void:
$IPLabel.text = ipaddress
$Player1/Username.text = GameManager.username
func create_card(card_name: String):
var card = SceneManager.Card.instantiate()
add_child(card)