2016-11-04 1 views
-1

私は1点でプレーしているプレイヤーの数にn個のカードを分配する必要があるポーカーゲームをシミュレートしようとしています。私は、既存のデッキを見て、他のプレイヤーにカードを渡すという簡単なコードを書いていますが、これはかなりハードコードされています。私はハードコーディングなしでこのアクティビティを行う方法があるのだろうかと思います。 "ループを使ってプレイヤーの数を定義でき、コードは改訂されたデッキを見ることができ、他のプレイヤーに新しいカードを与えることができます。はるか:。?Rのカードシャッフルと配信

Player_1 <- cards[sample(nrow(cards), 2), ] 
Player_1 

Remaining_Deck <- sqldf('SELECT * FROM cards EXCEPT SELECT * FROM Player_1') # subset from t1 not in t2 

Player_2 <- cards[sample(nrow(Remaining_Deck), 2), ] 
Player_2 

Remaining_Deck2 <- sqldf('SELECT * FROM Remaining_Deck EXCEPT SELECT * FROM Player_2') # subset from t1 not in t2 

Player_3 <- cards[sample(nrow(Remaining_Deck2), 2), ] 
Player_3 

Remaining_Deck3 <- sqldf('SELECT * FROM Remaining_Deck2 EXCEPT SELECT * FROM Player_3') # subset from t1 not in t2 

Player_1 
Player_2 
Player_3 
+0

'サンプル(カード)'インデックス1からカードを割り当て、デッキからそれらを取り除くに行く、その後、デッキをシャッフルします。再交渉する必要はありません。 –

答えて

0

は、なぜあなたは代わりに、あなたが本当に望んでいた場合は、カードを取り外すことができ、その後に対処するために、カードのインデックスを追跡し、一度シャッフルカードを扱うたびに再シャッフルされていますが、それは不要です

まず、デッキを生成する(あなたがカードに接続されている他の情報を持っていない限り、これは、ベクトルのように簡単です):。

cards <- 
    as.character(outer(
    c(2:10, "J", "Q", "K", "A") 
    , c("S", "H", "D", "C") 
    , paste 
    , sep = "_" 
)) 

その後、この手のためにシャッフル:扱っ開始、その後

currCardToDeal <- 1 

deckThisHand <- sample(cards) 

は、一番上のカードを対処するためのインデックスを設定します。注意すべきは、厳密には必要ではないが、取引する数値を格納するための変数が含まれていることに注意してください。あなたがhold-emから5枚のカード引き分けに変更した場合、それは簡単になります。

nToDeal <- 2 

player1 <- deckThisHand[currCardToDeal:(currCardToDeal+nToDeal-1)] 

currCardToDeal <- currCardToDeal+nToDeal-1 

その後、あなたは選手を反復処理することができます。

player2 <- deckThisHand[currCardToDeal:(currCardToDeal+nToDeal-1)] 

currCardToDeal <- currCardToDeal+nToDeal-1 

player3 <- deckThisHand[currCardToDeal:(currCardToDeal+nToDeal-1)] 

currCardToDeal <- currCardToDeal+nToDeal-1