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