我最近发现了Firebase,我想知道它是否可用于构建具有以下标准的“基本”纸牌游戏应用程序:
这是一副纸牌 :[0,1,3,4,5,6,7,8,9,10]
这是玩家卡 :{player1:[1,6,8],玩家2:[0,2,3],玩家3:[9,7, 10]}
我不知道如何为每位玩家分配牌,而不会将牌从一名玩家转移到另一名玩家。
作为一个例子:第一个玩家可能是将牌分配给其他玩家的玩家,然后是将牌保留在Firebase中的玩家。由于是客户正在进行此操作,因此卡不会保密。
我的问题是:如果没有使用Firebase的外部API以及一些客户端代码,我们如何处理这些应用程序(如果可以的话)?
答案 0 :(得分:2)
只需使用node.js脚本将卡片随机分配给玩家,就可以简化这一过程。
但是,使用以下过程可以很好地完成security rules:
数据结构如下所示:
/random_decks/$game_id/$random_generated_id
/game/$game_id/deck (move deck here when it is claimed)
/my_hand/$user_id/$game_id/$random_generated_id (once card is here, I can read card_names)
/card_names/$game_id/$random_generated_id (real card name goes here)
安全规则将类似于以下内容:
// game_deck/$game_id
// can only be copied from random_decks
".write": "root.child('random_decks/'+$game_id).exists()"
// game_deck/$game_id/deck/$random_generated_id
// must exist in random_decks/$game_id to create it here
".write": "root.child('random_decks/'+$game_id+'/$random_generated_id).exists()"
// random_decks/$game_id
// can only delete pre-generated decks (should be done after copying to a game)
".write": "!newData.exists()"
// card_names/$game_id/$random_generated_id
// can only read it if I own the card
".read": "root.child('my_hand/'+auth.uid+'/'+$game_id+'/'+$random_generated_id).exists()"
// or maybe if the game has reached the "reveal" phase
".read": "root.child('game_deck/'+$game_id+'/revealed').val() === true"
希望这会让你开始。