JSFiddle - React, Tailwind, and code Playground
HTML
<div id="text1"></div>
<div id="text2"></div>
JavaScript
dgrid = [];
dgrid.push([1,1,0]);
dgrid.push([0,-1,0]);
dgrid.push([0,0,0]);
nodesvis = 0;
var ret = findMove(dgrid,-1);
var move = ret.y;
console.log(move);
var x = Math.floor(move/3);
var y = move%3;
var txt1 = "Nodes visited = "+nodesvis;
var txt2 = "minimax returns "+ret.x+" "+ret.y;
document.getElementById('text1').innerHTML = txt1;
document.getElementById('text2').innerHTML = txt2;
function Vector(x, y) {
this.x = x;
this.y = y;
}
function winning(a,type){
//check hor rows
for (var i=0; i<3; i++){
var res = true;
for (var j=0; j<3; j++){
if (a[i][j]!=type){
res = false; break;
}
}
if (res==true) {return true;}
}
//check ver cols
for (var i=0; i<3; i++){
var res = true;
for (var j=0; j<3; j++){
if (a[j][i]!=type){
res = false; break;
}
}
if (res==true) {return true;}
}
//check two dias
var left = true;
var right = true;
for (var i=0; i<3; i++){
if (a[i][i]!=type){left = false;}
if (a[i][2-i]!=type){right = false;}
}
if (left==true){return true;}
if (right==true){return true;}
return false;
}
function draw(a,type){
for (var i=0; i<3; i++){
for (var j=0; j<3; j++){
if (a[i][j]==0){return false;}
}
}
var flag = winning(a,type);
if (flag==true){return false;}
return true;
}
function losing(a,type){
var nextype = type;
nextype = nextype*(-1);
return winning(a,nextype);
}
//////////////////////////////////////////////
function findMove(a,tomove){
nodesvis++;
if (winning(a,-1)){
return new Vector(1,-1);
}
if (losing(a,-1)){
return new Vector(-1,-1);
}
if (draw(a,-1)){
return new Vector(0,-1);
}
var best = -1;
var nbest = -1;
var gstat = -1;
if (tomove==1){
gstat = 1;
}
for (var i=0; i<9;...