JavaScript computer AI
JavaScript computer AI
我有一个用JavaScript构建的井字游戏。我已经在函数中为计算机AI部分编写了逻辑。我想调用代码上部的函数,但它不起作用。有人对如何实现代码的Ai功能有什么建议吗?我想成功,所以很难赢。有什么问题吗?
谢谢。
这是我的JSFiddle链接:http://jsfiddle.net/fnez/rvacaer4/
HTML:
<body>
<div id="container">
<header>
<h1>Tic Tac Toe</h1>
</header>
<ul id="board">
<li id="spot1"></li>
<li id="spot2"></li>
<li id="spot3"></li>
<li id="spot4"></li>
<li id="spot5"></li>
<li id="spot6"></li>
<li id="spot7"></li>
<li id="spot8"></li>
<li id="spot9"></li>
</ul>
<div class="clearfix"></div>
<footer id="reset">Reset</footer>
</div>
</body>
JavaScript:
$(document).ready(function() {
var x = "x";
var o = "o";
var turns = 0;
// spots stored in variables
var spot1 = $("#spot1");
var spot2 = $("#spot2");
var spot3 = $("#spot3");
var spot4 = $("#spot4");
var spot5 = $("#spot5");
var spot6 = $("#spot6");
var spot7 = $("#spot7");
var spot8 = $("#spot8");
var spot9 = $("#spot9");
// function for resetting the board
function remove() {
$("#board li").text("");
$("#board li").removeClass("disable");
$("#board li").removeClass("o");
$("#board li").removeClass("x");
turns = 0;
}
// Board click
$("#board li").on("click", function() {
console.log(turns);
if(turns % 2 === 0) {
$(this).text(x);
$(this).addClass('disable x');
}
xWins();
if(turns % 2 !== 0) {
compCheck();
}
oWins();
turns ++;
draw();
});
//Checking for Wins
function xWins() {
if(spot1.hasClass(x) && spot2.hasClass(x) && spot3.hasClass(x) ||
spot1.hasClass(x) && spot4.hasClass(x) && spot7.hasClass(x) ||
spot1.hasClass(x) && spot5.hasClass(x) && spot9.hasClass(x) ||
spot2.hasClass(x) && spot5.hasClass(x) && spot8.hasClass(x) ||
spot3.hasClass(x) && spot5.hasClass(x) && spot7.hasClass(x) ||
spot3.hasClass(x) && spot6.hasClass(x) && spot9.hasClass(x) ||
spot4.hasClass(x) && spot5.hasClass(x) && spot6.hasClass(x) ||
spot7.hasClass(x) && spot8.hasClass(x) && spot9.hasClass(x)
) {
alert("Winner is X");
remove();
}
}
function oWins() {
if(spot1.hasClass(o) && spot2.hasClass(o) && spot3.hasClass(o) ||
spot1.hasClass(o) && spot4.hasClass(o) && spot7.hasClass(o) ||
spot1.hasClass(o) && spot5.hasClass(o) && spot9.hasClass(o) ||
spot2.hasClass(o) && spot5.hasClass(o) && spot8.hasClass(o) ||
spot3.hasClass(o) && spot5.hasClass(o) && spot7.hasClass(o) ||
spot3.hasClass(o) && spot6.hasClass(o) && spot9.hasClass(o) ||
spot4.hasClass(o) && spot5.hasClass(o) && spot6.hasClass(o) ||
spot7.hasClass(o) && spot8.hasClass(o) && spot9.hasClass(o)
) {
alert("Winner is O");
remove();
}
}
//Checks for tie
function draw() {
while(turns == 9) {
alert("It's a tie !");
remove();
}
};
//Reset button function
$("#reset").on("click", function() {
remove();
});
// Computer AI MOVES
function compCheck() {
if (spot1.text == "" && ((spot3.text == "x" && spot2 == "x") || (spot9 == "x" && spot5 == "x") || (spot7 == "x" && spot4 == "x"))) {
spot1.text(o);
spot1.addClass('disable o');
turns++;
} else {
if (spot1.text == "" && ((spot1.text == "x" && spot3.text == "x") || (spot8.text == "x" && spot5 == "x"))) {
spot2.text(o);
spot2.addClass('disable o');
turns++;
}
else{
if (spot3.text == "" && ((spot1.text == "x" && spot2.text == "x") || (spot7.text == "x" && spot5.text == "x") || (spot9.text == "x" && spot6.text == "x"))) {
spot3.text(o);
spot3.addClass('disable o');
turns++;
}
else{
if (spot9.text == "" && ((spot7.text == "x" && spot8.text == "x") || (spot1.text == "x" && spot5.text == "x") || (spot3.text == "x" && spot6.text == "x"))) {
spot9.text(o);
spot9.addClass('disable o');
turns++;
}
else{
if (spot7.text == "" && ((spot9.text == "x" && spot8.text == "x") || (spot3.text == "x" && spot2.text == "x") || (spot1.text == "x" && spot4.text == "x"))) {
spot7.text(o);
spot7.addClass('disable o');
turns++;
}
else{
if (spot8.text == "" && ((spot9.text == "x" && spot7 == "x") || (spot2.text == "x" && spot5.text == "x"))) {
spot8.text(o);
spot8.addClass('disable o');
turns++;
}
else{
if (spot4.text == "" && ((spot6.text == "x" && spot5.text == "x") || (spot1.text == "x" && spot7.text == "x"))) {
spot4.text(o);
spot4.addClass('disable o');
turns++;
}
else{
if (spot6.text == "" && ((spot3.text == "x" && spot9.text == "x") || (spot5.text == "x" && spot4.text == "x"))) {
spot4.text(o);
spot4.addClass('disable o');
turns++;
}
else{
if (spot5.text == "" && ((spot3.text == "x" && spot7.text == "x") || (spot9.text == "x" && spot1.text == "x") || (spot6.text == "x" && spot4.text == "x") || (spot8.text == "x" && spot2.text == "x"))) {
spot4.text(o);
spot4.addClass('disable o');
turns++;
}
else{ // if no spot to block then play these spots....
if (spot5.text == "") {
spot5.text(o);
spot5.addClass('disable o');
turns++;
}
else{
if (spot1.text == "") {
spot1.text(o);
spot1.addClass('disable o');
turns++;
}
else{
if (spot9.text == "") {
spot9.text(o);
spot9.addClass('disable o');
turns++;
}
else {
if (spot8.text == "") {
spot8.text(o);
spot8.addClass('disable o');
turns++;
}
else{
if (spot4.text == "") {
spot4.text(o);
spot4.addClass('disable o');
turns++;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
};
});
这里有一个固定版本:
http://jsfiddle.net/rvacaer4/4/
我根据自己的评论修改了轮次,还修复了*.text
调用。
人工智能仍然有一些错误(有时不玩,没有正确防守(玩1,3,2总是赢),没有做制胜的动作,等等),但我相信你会发现的。
如果你真的想让玩家感到困难,我建议你放弃手动AI,写一个递归检查,在每种情况下都能找出最佳动作。正如我在第一条评论中所说,游戏很简单,所以如果编写得当,即使是今天最慢的机器也会在纳秒内计算出来。那样的话,人类只能做一场平局。
相关文章:
- TicTacToe minimax AI in Javascript
- toDataURL(), from the Web onto my Computer
- wit.ai机器人引擎故事连接到hubot
- 如何搜索术语“;AI”;使用regex
- 如何通过ai关键字识别元素
- Javascript/Node AI-如何使用match从单词数组中重复单词
- 改进基于Angular的国际象棋游戏的基本AI
- 为瓷砖游戏制作AI
- 我可以用JavaScript创建AI吗
- 让AI追逐最近的食物
- Javascript TIC TAC TOE - AI not working?
- 为什么我的乒乓球AI如此紧张
- 如何将.ai文件转换为png
- JavaScript computer AI
- Node.js/Socket.IO中的基本AI
- 为什么我的AI在井字游戏中表现得很奇怪?
- 测试页面是否有水平滚动条(computer &移动设备)
- 智慧.ai不解析数据聊天响应
- 用于web应用程序的服务器端AI
- Javascript ai跳跃平台