不可能的井字游戏Javascript
Impossible tic tac toe game Javascript
我正在开发一款基本的Javascript Tic-Tac-Toe游戏,让用户可以在电脑上玩。这个游戏的要求之一是用户永远无法击败电脑——他们能做的最多就是打平。我很难弄清楚它的逻辑,我还没有看到任何我能理解的关于如何实现它的例子。现在,计算机只是随机选择一个地点,将它的决定放在轮到它的时候。如果这个随机点是左上角(randomChoice==0)或右下角(random Choice==9),它会将其更改为旁边的框。我已经在下面发布了代码。任何关于这方面的提示都会有所帮助。此外,这是我迄今为止在CodePen上拥有的所有代码的链接。http://codepen.io/Android162010/pen/LGZXQa
function playRandom() {
randomChoice = Math.round(Math.random() * 10);
if (randomChoice == 0) {
randomChoice = 1;
}
if (randomChoice == 10) {
randomChoice = 9;
}
if ($('#' + randomChoice).hasClass('hoverable')) {
makeTic('#' + randomChoice, false);
}
else {
playRandom();
}
}
您可以使用minimax算法创建一个玩抖音的AI。
以下是一篇关于使用Tic-Tac Toe的minimax的文章:http://neverstopbuilding.com/minimax
这个想法是,与其随机选择动作,不如展望游戏未来可能的状态,并根据它们的好坏对它们进行排名。作者提出了一个系统,其中获胜的节点被分配值+10,而失败的节点得到-10。
# @player is the turn taking player
def score(game)
if game.win?(@player)
return 10
elsif game.win?(@opponent)
return -10
else
return 0
end
end
一旦你有了一个根据未来状态对你的影响程度对其进行排名的系统,你就可以制定一个选择最佳状态的算法。以下是作者对算法的简明英文解释:
对算法的描述,假设X是"X";轮流上场的球员;看起来像:
- 如果游戏结束,从X的角度返回分数
- 否则,获取每个可能移动的新游戏状态列表
- 创建分数列表
- 对于这些状态中的每一个,将该状态的最小-最大结果添加到分数列表中
- 如果轮到X,返回分数列表中的最高分数
- 如果轮到O,从分数列表中返回最低分数
最后,这里是作者的解决方案
def minimax(game, depth)
return score(game) if game.over?
depth += 1
scores = [] # an array of scores
moves = [] # an array of moves
# Populate the scores array, recursing as needed
game.get_available_moves.each do |move|
possible_game = game.get_new_state(move)
scores.push minimax(possible_game, depth)
moves.push move
end
# Do the min or the max calculation
if game.active_turn == @player
# This is the max calculation
max_score_index = scores.each_with_index.max[1]
@choice = moves[max_score_index]
return scores[max_score_index]
else
# This is the min calculation
min_score_index = scores.each_with_index.min[1]
@choice = moves[min_score_index]
return scores[min_score_index]
end
end
相关文章:
- Javascript游戏输入失去焦点
- HTML5内存游戏-JavaScript功能
- 正面或反面游戏javascript do/while循环
- 结束一个反应游戏Javascript
- 如何在制作简单的纸牌游戏(Javascript)时给卡牌一个数值
- 根据游戏 JavaScript 中的级别更改背景图像
- 匹配游戏.Javascript.DOM lastChild
- 不可能的井字游戏Javascript
- 第一个编程游戏(javascript/jQuery)的问题
- 随机颜色猜测游戏(JavaScript)
- 井字游戏JavaScript帮助(我没有得到我想要的警报)
- 井字游戏Javascript不会改变玩家
- 井字游戏JavaScript
- 简单纸牌游戏javascript中的indexOf问题
- 游戏JavaScript / JSON链接文本框
- 西蒙游戏javascript,我如何同步按钮的灯不踩在彼此与动画()和延迟()JQUERY
- 井字游戏javascript.如何储存玩家的胜利,并提醒是否有平局
- 内存游戏Javascript中瓦片的悬停状态
- 在游戏 JavaScript 中添加暂停键
- 重新启动逻辑井字游戏(JavaScript)时遇到问题