【问题标题】:Card Shuffle and Distribution in RR中的洗牌和分配
【发布时间】:2016-11-04 11:45:24
【问题描述】:

我正在尝试模拟一种扑克游戏,在该游戏中,我需要将卡片分发给同时玩的“n”个玩家。我已经编写了一段简短的代码,它查看现有的牌组并向其他玩家发放卡片,但是这是非常硬编码的。我想知道是否有一种方法可以在不使用硬编码的情况下使用“循环来执行此活动,其中一个可以定义玩家的数量并且代码能够查看修改后的套牌并将新卡牌提供给其他玩家。这就是我写的远:

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

【问题讨论】:

  • sample(cards) 将洗牌,然后从索引 1 分配牌并将它们从牌组中移除。无需重新洗牌。

标签: r distribution shuffle poker


【解决方案1】:

为什么每次发牌都要重新洗牌?相反,洗牌一次,然后跟踪要处理的牌的索引。如果你真的想要,你可以移除卡片,但这是不必要的。

首先,生成卡片组(作为矢量更容易,除非卡片上附加了其他信息):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    相关资源
    最近更新 更多