2016-11-04 8 views
-1

Я пытаюсь смоделировать игру в покер, где мне необходимо раздавать карты «n» числу игроков, играющих в одной точке. Я написал короткий фрагмент кода, который смотрит на существующую колоду и выдает карты другим игрокам, однако это довольно жестко закодировано. Интересно, есть ли способ сделать эту деятельность без жесткого кодирования, используя «цикл», в котором можно определить количество игроков, и код сможет просматривать пересмотренную колоду и давать новые карты другим игрокам. Вот что я написал так далеко:Карточка Shuffle and Distribution в 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 = "_" 
)) 

Затем перетасовать для этой руки:

deckThisHand <- sample(cards) 

Установить индекс для решения верхней карты:

currCardToDeal <- 1 

Затем начать дело. Заметьте, я включил переменную, чтобы сохранить номер, чтобы иметь дело, хотя это не является абсолютно необходимым. Просто упрощается, если вы когда-либо переходите от удержания до пяти карт.

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 

 Смежные вопросы

  • Нет связанных вопросов^_^