(function() { //var geometry = Model.Game.cbBoardGeometryCubic(4,5,3,["01","02","03","04","12","13","15","24","25","34","35","45"]); var geometry = Model.Game.cbBoardGeometryCubic(4,4,4,["01","04","35","25"]); Model.Game.cbDefine = function() { return { geometry: geometry, pieceTypes: { 0: { name: 'pawn-w', aspect: 'pawn', //graph: this.cbPawnGraph(geometry,1), graph: this.cbAuthorGraph(geometry), value: 1, abbrev: '', fenAbbrev: 'P', epCatch: true, }, 1: { name: 'ipawn-w', aspect: 'pawn', //graph: this.cbInitialPawnGraph(geometry,1), graph: this.cbAuthorGraph(geometry), value: 1, abbrev: '', fenAbbrev: 'P', initial: [{s:1,p:0},{s:1,p:1},{s:1,p:2},{s:1,p:3},{s:1,p:12},{s:1,p:13},{s:1,p:14},{s:1,p:15}], epTarget: true, }, 2: { name: 'pawn-b', aspect: 'pawn', //graph: this.cbPawnGraph(geometry,-1), graph: this.cbAuthorGraph(geometry), value: 1, abbrev: '', fenAbbrev: 'P', epCatch: true, }, 3: { name: 'ipawn-b', aspect: 'pawn', //graph: this.cbInitialPawnGraph(geometry,-1), graph: this.cbAuthorGraph(geometry), value: 1, abbrev: '', fenAbbrev: 'P', initial: [{s:-1,p:80},{s:-1,p:84},{s:-1,p:88},{s:-1,p:92},{s:-1,p:83},{s:-1,p:87},{s:-1,p:91},{s:-1,p:95}], epTarget: true, }, 4: { name: 'knight', //graph: this.cbKnightGraph(geometry), graph: this.cbAuthorGraph(geometry), value: 2.9, abbrev: 'N', initial: [{s:1,p:8},{s:1,p:7},{s:-1,p:81},{s:-1,p:94}], }, 5: { name: 'bishop', //graph: this.cbBishopGraph(geometry), graph: this.cbAuthorGraph(geometry), value: 3.1, abbrev: 'B', initial: [{s:1,p:5},{s:1,p:9},{s:-1,p:85},{s:-1,p:86}], }, 6: { name: 'rook', //graph: this.cbCubicRookGraph(geometry), graph: this.cbAuthorGraph(geometry), value: 5, abbrev: 'R', initial: [{s:1,p:4},{s:1,p:11},{s:-1,p:82},{s:-1,p:93}], //castle: true, }, 7: { name: 'queen', //graph: this.cbMergeGraphs(geometry,this.cbCubicRookGraph(geometry),this.cbBishopGraph(geometry)), graph: this.cbAuthorGraph(geometry), value: 9, abbrev: 'Q', initial: [{s:1,p:6},{s:-1,p:90}], }, 8: { name: 'king', isKing: true, //graph: this.cbKingGraph(geometry), graph: this.cbAuthorGraph(geometry), abbrev: 'K', initial: [{s:1,p:10},{s:-1,p:89}], }, }, /* promote: function(aGame,piece,move) { if(piece.t==1) return [0]; else if(piece.t==3) return [2]; else if(piece.t==0 && geometry.R(move.t)==7) return [4,5,6,7]; else if(piece.t==2 && geometry.R(move.t)==0) return [4,5,6,7]; return []; }, castle: { "4/0": {k:[3,2],r:[1,2,3],n:"O-O-O"}, "4/7": {k:[5,6],r:[6,5],n:"O-O"}, "60/56": {k:[59,58],r:[57,58,59],n:"O-O-O"}, "60/63": {k:[61,62],r:[62,61],n:"O-O"}, }, */ evaluate: function(aGame,evalValues,material) { return; // check lack of material to checkmate var white=material[1].count; var black=material[-1].count; if(!white[0] && !white[1] && !white[4] && !white[5] && !white[6] && !white[7]) { // white king single if(!black[2] && !black[3] && !black[6] && !black[7] && (black[4]+black[5]<2 || black[5]<2)) { this.mFinished=true; this.mWinner=JocGame.DRAW; } } if(!black[2] && !black[3] && !black[4] && !black[5] && !black[6] && !black[7]) { // black king single if(!white[0] && !white[1] && !white[6] && !white[7] && (white[4]+white[5]<2 || white[5]<2)) { this.mFinished=true; this.mWinner=JocGame.DRAW; } } // check 50 moves without capture if(this.noCaptCount>=100) { this.mFinished=true; this.mWinner=JocGame.DRAW; } // motivate pawns to reach the promotion line var distPromo=aGame.cbUseTypedArrays?new Int8Array(3):[0,0,0]; var height=geometry.height; var pawns=material[1].byType[0],pawnsLength; if(pawns) { pawnsLength=pawns.length; for(var i=0;i=-1;s-=2) { var pieces=material[s].byType[t]; if(pieces) for(var i=0;i