2014-04-04 59 views
1

我最近發現火力地堡,我不知道它是否可以用來構建具有以下規定 - 「基本」的紙牌遊戲應用:火力建立一個基本的紙牌遊戲

  • 分配X卡在每個球員遊戲
  • 每卡必須是唯一的,而且必須是甲板的一部分
  • 每個玩家無法知道哪些卡每個玩家都有

這裏是一副撲克牌:[0,1,3,4,5,6,7,8,9,10]

這裏是玩家卡:{PLAYER1:[1 ,6,8],player2:[0,2,3],player3:[9,7,10]}

我不知道如何將卡片分配給每個玩家,另一個。

舉個例子:第一個玩家可能是將卡分配給其他玩家,然後是持卡人在Firebase中的玩家。因爲這是執行此操作的客戶,所以這些卡片不會保密。

我的問題是:如何在沒有外部API的情況下處理這樣的應用程序(如果可以的話)?使用Firebase加上一些客戶端代碼?

回答

2

通過簡單地使用node.js腳本隨機地將玩家卡分配給玩家,您可以使其變得相當簡單。

但是,您可以通過以下步驟與security rules做到這一點相當不錯:

  1. 生成幾百/千「random_decks」通過寫一個快速的JavaScript在每個甲板上隨機排序卡(使用Firebase中的push()命令);同時生成卡片名稱/值,以便每個卡組中的隨機ID映射到特定(未知)卡片
  2. 讓「經銷商」選擇下一個可用卡組(並將其移動到存儲使用卡組的新路徑)
  3. 當玩家想要抽牌時,他們將其從game_deck移到他們的「手牌」;他們不知道哪張牌直到被放在他們的手中
  4. 一旦他們被要求,玩家就不能從他們的手中刪除牌,因此將無法交易
  5. 只允許牌的面值所以只有主人可以讀取他擁有的牌,直到「揭示」爲止
  6. 一旦牌被顯示出來,也許所有玩家都可以在他們的「牌組」中看到任何東西來查看哪些牌屬於(假設遊戲中的展示是合適的)

數據結構看起來像這樣:

/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" 

希望這將讓你開始。

+0

非常感謝!很好的回答,我嘗試了一些東西。 – gab