tictactoejs
Version:
provide a library like chess.js but for tic tac toe.. you can make your own GUI
7 lines • 2.08 kB
JavaScript
/*
* @license
* Copyright (c) 2016 ryan hs <mr.ryansilalahi@gmail.com>
* MIT License
* https://github.com/ryanhs/TicTacToeJS.git
*/
!function(){"use strict";var r=function(r){function n(){var r,n,t,o,i,a,f,s,l,c,v=!0;for(t=o=i=a=f=s=l=c=0,r=0;e>r;r++){for(t=o=i=a=0,n=0;e>n;n++)null==u[r][n]&&(v=!1),"X"==u[r][n]&&t++,"O"==u[r][n]&&o++,"X"==u[n][r]&&i++,"O"==u[n][r]&&a++;if(t==e||i==e)return"X";if(o==e||a==e)return"O";"X"==u[r][r]&&f++,"O"==u[r][r]&&s++,"X"==u[r][e-r-1]&&l++,"O"==u[r][e-r-1]&&c++}return f==e||l==e?"X":s==e||c==e?"O":v?"draw":"in progress"}var t={},e=3,u=[],o=1,i=[],a=[o,"in progress"],f=[0,[]];return t.reset=function(r){parseInt(r)>=3&&(e=r);var n,t,a=[];for(u=[],n=0;e>n;n++){for(a=[],t=0;e>t;t++)a.push(null);u.push(a)}o=1,i=[]},t.getSize=function(){return e},t.turn=function(){return o%2==0?"O":"X"},t.ascii=function(){var r,n,t="";for(r=0;e>r;r++){for(n=0;e>n;n++)0==n&&(t+=" "),t+=null==u[r][n]?" ":u[r][n],e-1>n&&(t+=" | ");e-1>r&&(t+="\r\n"+"-".repeat(4*e-1)+"\r\n")}return t},t.ascii2=function(){var r,n,t="";for(r=0;e>r;r++){for(n=0;e>n;n++)0==n&&(t+=e-r+" "),t+=" ",t+=null==u[r][n]?".":u[r][n],t+=" ";t+="\r\n"}for(t+=" ",n=0;e>n;n++)t+=n+1+" ";return t},t.move=function(r,n){return r--,n=Math.abs(n-e),0>n||n>=e||0>r||r>=e?!1:null!=u[n][r]?!1:(u[n][r]=t.turn(),o++,!0)},t.exists=function(r,n){return r--,n=Math.abs(n-e),0>n||n>=e||0>r||r>=e?!1:null!=u[n][r]},t.moveArray=function(r,n){return 0>r||r>=e||0>n||n>=e?!1:null!=u[r][n]?!1:(u[r][n]=t.turn(),o++,!0)},t.status=function(){return a[0]==o?a[1]:(a[0]=o,a[1]=n(),t.status())},t.gameOver=function(){return"in progress"!=t.status()},t.isDraw=function(){return"draw"==t.status()},t.legalMoves=function(){if(f[0]==o)return f[1];var r,n,i=[];for(n=0;e>n;n++)for(r=0;e>r;r++)null==u[n][r]&&i.push({x:r+1,y:e-n});return f[0]=o,f[1]=i,t.legalMoves()},t.randomMove=function(){var r=t.legalMoves()[Math.floor(Math.random()*t.legalMoves().length)];return t.move(r.x,r.y),r},t.reset(r),t};"undefined"!=typeof exports&&(exports.TicTacToe=r),"undefined"!=typeof window&&(window.TicTacToe=r)}();