我正在使用 Phoenix 频道和 GenServer 在 Phoenix 创建一个有 2 名玩家的纸牌游戏。这是我的游戏结构的样子:
schema "games" do
field :winner, :integer
field :player_1, :id, default: nil
field :player_2, :id, default: nil
field :status, :string
## VIRTUAL FIELDS ##
field :player_1_hand, :map, virtual: :true
field :player_2_hand, :map, virtual: :true
timestamps()
end
因此,如您所见,我将使用虚拟字段处理玩家手牌,然后将玩家和获胜者保存到数据库中。
我现在设置了一个大厅频道,玩家可以在这里聊天。我有一个没有功能的游戏频道。如何让玩家互相邀请玩游戏,接受或拒绝,然后让两个玩家一起进入游戏?
到目前为止,这是我在大厅频道中的内容(关于游戏):
def handle_in("game_invite", %{"username" => username}, socket) do
data = %{"username" => username, "sender" => socket.assigns.current_player.username }
broadcast! socket, "game_invite", data
{:noreply, socket}
end
intercept ["game_invite"]
def handle_out("game_invite", %{"username" => username, "sender" => sender}, socket) do
if socket.assigns.current_player.username == username do
push socket, "game_invite", %{ username: sender}
end
{:noreply, socket}
end
我不知道我是否问对了问题。我正在尝试生成一个新的游戏 ID(来自 postgres),将两个玩家 ID 放入游戏中,然后让 GameServer 使用 GenServer 来管理玩家的手。