JSFiddle - React, Tailwind, and code Playground

by blesh

JavaScript

(function (window) {
    function AI(board) {
        var mark = 'O',
            oppMark = 'X',
            planned = null;
        this.allMovesCount = function () {
            var bd = board.board(),
                x, y, c = 0;
            for (y = 0; y < bd.length; y++) {
                for (x = 0; x < bd[y].length; x++) {
                    if (bd[y][x]) c++;
                }
            }
            return c;
        };

        function loc(x, y) {
            return {
                x: x,
                y: y
            };
        }
        
        function findKills(m) {
        }

        this.nextMove = function () {
            var moveCount = this.allMovesCount(board);
            switch (moveCount) {
                case 0:
                    //first move: take center.
                    return loc(1, 1);
                case 1:
                    //second move
                    //try to take center
                    if (!board.get(1, 1)) {
                        return loc(1, 1);
                    }
                    //go for a corner
                    return loc(0, 0);
                case 2:
                    //third move
                    var aiCenter = board.get(1, 1) === mark;
                    if (aiCenter) {
                        //we own the center
                        var oppx, oppy;

                        var oppCorner = board.get(oppx = 0, oppy = 0) === oppMark || board.get(oppx, oppy = 2) === oppMark || board.get(oppx = 2, oppy = 0) === oppMark || board.get(oppx, oppy = 2) === oppMark;

                        if (oppCorner) {
                            //opponent has a corner.
                            //take opposite corner (defensive)                 
                            return loc(oppx ? 0 : 2, oppy ? 0 : 2);
                        } else {
                            //take a corner next to their move
                            var oppMid = board.get(oppx = 0, oppy = 1) === oppMark...