gpt4 book ai didi

javascript - 二十一点荷官 AI 中的非工作嵌套循环

转载 作者:行者123 更新时间:2023-12-03 10:18:57 26 4
gpt4 key购买 nike

我正在寻找有关经销商 AI 上的 javascript 功能的建议,该功能相当简单且不言自明,并且遵守既定的规则集。该代码是通过单独的软值和硬值计算器来实现的,一旦抽出一张牌就会发生,以便在 GUI 游戏框架中呈现可访问的两个值。

关键目的是,一旦庄家的牌数未能超过 17 点,就将其连续添加到庄家手中,并在满足这些先决条件时打破获胜条件函数的循环。使用a<4for循环有点随机,因为其他解决方案被拒绝。

之前的实验

  1. While 循环。结果产生了无限循环死胡同。

  2. GOTO 项目的夏天。完整版和迷你版都在编译器上返回了错误。

感知到的问题

尽管这两个值在通过 dealerStrategy 后都会更新函数(在继续命令之前使用 console.log 提取信息后确认),出于某种奇怪的原因,新牌被添加到经销商的手上,而忽略了其他循环部分上的兼容条件。

var dealerValue = {initial: 0, soft: 0, hard: 0};
var dealerCards = [];
var playerValue = {initial: 0, soft: 0, hard: 0};
var playerCards = [];
var firstDeck = [];
var origValue = 0;

function shuffle(o) {
for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
}

function createShuffledDeckNumber(array, x) {
for (var i = 0; i < 4*x; i++) {
array.push(1,2,3,4,5,6,7,8,9,10,11,12,13);
}
shuffle(array);
}

function checkDeckDrawOneDealer() {
if (firstDeck.length === 0) {
createShuffledDeckNumber(firstDeck, 1);//Creates a number of normal shuffled decks.
dealerCards.push(firstDeck[0]);
dealerValue.soft = calculateHand(firstDeck[0], dealerValue.soft, 0);
dealerValue.hard = calculateHand(firstDeck[0], dealerValue.hard, 1);
firstDeck.shift();

}else{
dealerCards.push(firstDeck[0]);
dealerValue.soft = calculateHand(firstDeck[0], dealerValue.soft, 0);
dealerValue.hard = calculateHand(firstDeck[0], dealerValue.hard, 1);
firstDeck.shift();
}
}

function dealerStrategy(dS, dH) {
for (var a = 0; a < 3; a++){
if (dH == dS) {
if (dH >= 17 && dH <= 21) {break;}
else if (dH < 17) {checkDeckDrawOneDealer(); continue;}
else if (dH > 21) {break;}
}
else if (dH < dS) {
if (dS <= 21) {
if (dS >= 17 && dS <= 21) {break;}
else if (dS < 17) {checkDeckDrawOneDealer(); continue;}
}
else if (dS > 21) {
if (dH >= 17 && dH <= 21) {break;}
else if (dH < 17) {checkDeckDrawOneDealer(); continue;}
else if (dH > 21) {break;}
}
}
}
}

for (i = 0; i < 5; i++) {
console.log(i);
dealerCards = [];
dealerValue.soft = 0;
dealerValue.hard = 0;
checkDeckDrawOneDealer();
checkDeckDrawOneDealer();
dealerStrategy(dealerValue.soft, dealerValue.hard, playerValue.soft, playerValue.hard);
console.log("dealerCards",dealerCards);
console.log("dS:", dealerValue.soft,"dH:", dealerValue.hard);
}

最佳答案

dealerStrategy 中,您传入 dSdH 并使用它们来确定行为。当您在循环中抽出额外的牌时,dSdH 的值永远不会更新,因此无论您抽出什么牌,下一个循环的行为都将是与第一个相同。

关于javascript - 二十一点荷官 AI 中的非工作嵌套循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29732103/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com