diff --git a/README.md b/README.md index 36211b9..7a136db 100644 --- a/README.md +++ b/README.md @@ -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 信号的函数间隔两行(自动空行),其余函数间隔一行,部分间隔一行的函数为遗留问题。 diff --git a/project.godot b/project.godot index 4f3512f..0bbb471 100644 --- a/project.godot +++ b/project.godot @@ -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] diff --git a/scripts/autoload/GameLoopManager.gd b/scripts/autoload/GameLoopManager.gd new file mode 100644 index 0000000..24a837c --- /dev/null +++ b/scripts/autoload/GameLoopManager.gd @@ -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 diff --git a/scripts/autoload/GameLoopManager.gd.uid b/scripts/autoload/GameLoopManager.gd.uid new file mode 100644 index 0000000..5d90182 --- /dev/null +++ b/scripts/autoload/GameLoopManager.gd.uid @@ -0,0 +1 @@ +uid://qxowgxfp4iwm diff --git a/scripts/autoload/MultiGame.gd b/scripts/autoload/MultiGame.gd index 4e18807..cc6b44a 100644 --- a/scripts/autoload/MultiGame.gd +++ b/scripts/autoload/MultiGame.gd @@ -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: diff --git a/scripts/game/game.gd b/scripts/game/game.gd index 8a6e549..a3291ed 100644 --- a/scripts/game/game.gd +++ b/scripts/game/game.gd @@ -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)