我想创建某种算法,让电脑赢得比在改装的二十一点游戏中失败更多。
红牌是负面的,黑卡是正面的。
我会用伪代码编写它我想确定计算机赢得更多游戏的概率部分(最后一行)。
这是我的尝试:
//Hand out 2 random cards for each person selection of 2,3,4,5,6,7,8,9,J,Q,K,A.
//Store these in an array with their equivalent value.
Card =[2,3,4,5,6,7,8,9,J,Q,K,A]
Also, colour of card is random red or black.
Value_AI=0
Value_Human=0
Bust_Human=0
Bust_ AI=0
All of the below is in a big loop that loops each time a player is bust
Do this for both players, until Value_AI or Value_Human>21
If colour==red then
Value=value – card
Else
Value=value+card
If Value_AI >21 then
Bust_ AI+=1
Print “Computer has bust”
Break
If Value_Human >21
Bust_ human+=1
Print “You have bust”
Break
Else
Hand out another card for both
If Bust_ AI> Bust_ human then
**//Increase the probability of getting an ace and a card with a value of 10 for the computer**
答案 0 :(得分:2)
你可以让人类走在电脑前。然后,当它们都被破坏时,默认情况下计算机将获胜,因为计算机不需要运行。这应该将公平的游戏变成一个有利于计算机的游戏。
答案 1 :(得分:1)
现在,你的伪代码似乎没有让任何一个玩家选择停止接收卡的选项,这是在二十一点中做出的核心选择。收到最新的卡后,您需要让AI选择是否需要其他卡。这可能是算法中用于在AI中构建实际智能的最佳点,因此您可以增加其获胜概率,而无需像您在伪代码中建议的那样进行硬编码。最简单的选择是让你的AI计算下一张卡将其值发送到21的概率。这里有一些伪代码(看起来你在绘制它们之后从牌组中删除了卡片,所以我不是考虑到这一点):
highest_safe = 21 - value_AI
n_safe_cards = highest_safe - 1 + 13 //the second 13 is for all of the red cards and the - 1 is because 1 is not a card
prob_safe = n_safe_cards/26 //since there are 28 possible cards (I'm assuming you didn't mean to leave 10 off your list)
if prob_safe < .5:
stop taking cards
这会导致你的AI赢得更多,因为它会使它以最佳状态发挥。如果你想让它更容易被击败,你可以在它决定停止拍卡的门槛上添加一些噪音。