2016-11-04 2 views
-1

J'essaie de simuler un jeu de poker où je dois distribuer des cartes à un nombre n de joueurs jouant à un point. J'ai écrit un court morceau de code qui regarde le jeu existant et donne des cartes à d'autres joueurs, mais ce code est assez dur. Je me demande s'il existe un moyen de faire cette activité sans coder en dur en utilisant une boucle où l'on pourrait définir le nombre de joueurs et le code est capable de regarder le deck révisé et de donner de nouvelles cartes aux autres joueurs. loin:Shuffle et distribution de cartes en 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

'échantillon (cartes)' se mélange le paquet, puis allez attribuer des cartes d'index 1 et les retirer du pont. Il n'y a pas besoin de remaniement. –

Répondre

0

Pourquoi vous êtes-brouiller chaque fois que vous traitez une carte plutôt, mélangez une fois, puis suivre l'indice de la carte à traiter vous pouvez, si vous vouliez vraiment, retirer les cartes, mais?. qui est inutile

d'abord, générer la plate-forme (ce qui est plus facile comme vecteur, sauf si vous avez d'autres informations attachées aux cartes):.

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

Ensuite, la lecture aléatoire pour cette main:

deckThisHand <- sample(cards) 

Définir l'index pour traiter la carte du dessus:

currCardToDeal <- 1 

Ensuite, commencer à traiter. Notez, j'ai inclus une variable pour stocker le nombre à traiter, bien que ce ne soit pas strictement nécessaire. Simplement, il est plus facile si vous passez d'un hold-em à un tirage de cinq cartes.

nToDeal <- 2 

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

currCardToDeal <- currCardToDeal+nToDeal-1 

Ensuite, vous pouvez itérer sur les joueurs:

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

currCardToDeal <- currCardToDeal+nToDeal-1 

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

currCardToDeal <- currCardToDeal+nToDeal-1