A ColdFusion function for printing chess diagrams from FEN notation. Try it out here.
function IsWhiteSquare(row,column) { // function determines square color // odd rows start on white - odd columns are white evens are black // even rows on black - odd columns are black and evens are white if((row MOD 2) NEQ 0) // odd row { if((column MOD 2) NEQ 0) // odd column return true; else return false; } else // even row { if((column MOD 2) NEQ 0) // odd column return false; else return true; } } function PrintFEN(fen,orient) { chessBoard = StructNew(); chessBoard.piecesFEN = 'p,P,r,R,n,N,b,B,q,Q,k,K'; // black is lowercase, white uppercase chessBoard.FEN = ListFirst(fen,' '); chessBoard.orientation = orient; // w or b if(chessBoard.orientation EQ "b") chessBoard.FEN = Reverse(chessBoard.FEN); for(row=1; row LTE 8; row=row+1) // parse rows { thisrow = ListGetAt(chessBoard.FEN,row,'/'); offset = 1; // used to determine column in FEN rows with numbers (empty squares) for(col=1; col LTE Len(thisrow); col=col+1) // process FEN row { thischar = Mid(thisrow,col,1); if(IsNumeric(thischar)) { // numeric vals are empty squares for(square=1; square LTE thischar; square=square+1) { if(IsWhiteSquare(row,offset+square)) WriteOutput('_'); else WriteOutput(' '); } // close for j offset = offset + thischar; } else // isNumeric(thischar) { if(IsWhiteSquare(row,offset)) WriteOutput(thischar); else WriteOutput(Chr(Asc(thischar) + 8)); offset = offset + 1; } // isNumeric(thischar) } // end process column - for i = 1 WriteOutput('
'); } // end process row - for o = 1 }
2 Comments
nagrom wrote on 03/31/09 10:04 AM
Y'know, I could make it simpler by adding the row to the column and doing a mod on that:row 1 + col 1 = 2 (even)
row 2 + col 1 = 3 (odd)
Eric Belair wrote on 03/26/09 7:23 AM
NICE. I love seeing someone make good use of MOD(). Now do it in ActionScript. Joe G says hi - from stall 1.