Check out Alice Chess, our featured variant for June, 2024.


[ Help | Earliest Comments | Latest Comments ]
[ List All Subjects of Discussion | Create New Subject of Discussion ]
[ List Earliest Comments Only For Pages | Games | Rated Pages | Rated Games | Subjects of Discussion ]

Single Comment

JavaScript Chess-variant applet[Subject Thread] [Add Response]
H. G. Muller wrote on Sat, Oct 24, 2015 06:42 PM EDT:

In an attempt to get a bit more fluent in JavaScript, I started an interesting exercise. The aim is to build a JavaScript-powered web page that contains a Chess game, and which can be quite easily adapted to arbitrary variants. To achieve this is should only require some minimal information on the variant, like the board size, number of piece types, for each piece type the ID to be used in notation, the name of an image file to represent it, how the piece moves (as a Betza string), and how many you have in hand (for placement variants). And of course the initial setup of the board.

From this it should then be able to allow the user to move pieces around with the mouse, highlight possible moves, check the entered move for legality, generate notation. And perhaps play a not all too poor move by itself, with the aid of a simple AI.

I uploaded a very preliminary test case to my website. You should be able to move pieces around on the board with the mouse (no legality checking yet, but it does indicate which moves are legal). It should accept both click-click moves and drag-drop moves. I added some Cannons in the hand; these can also be dragged onto the board, and subsequently moved around there.

The only variant-dependent code in the page is shown below:

var files = 8;
var ranks = 8;
var light = "#FFFFFF";
var dark  = "#E0E0E0";

function Shade(x, y) { // board checkering
  return ((x&1) == (y&1));
}

function Setup() {
  nType = 6;
  // define piece IDs and images
  ids[1] = "P"; imag[1] = "Pawn.png";
  ids[2] = "N"; imag[2] = "Knight.png";
  ids[3] = "B"; imag[3] = "Bishop.png";
  ids[4] = "R"; imag[4] = "Rook.png";
  ids[5] = "Q"; imag[5] = "Queen.png";
  ids[6] = "K"; imag[6] = "King.png";
  // define moves in Betza notation
  moves[1] = "fmWfceFifnmD";
  moves[2] = "N";
  moves[3] = "B";
  moves[4] = "R";
  moves[5] = "Q";
  moves[6] = "K";
  // define initial setup for white
  p = 0; // piece rank
  board[p][0] = 4;
  board[p][1] = 2;
  board[p][2] = 3;
  board[p][3] = 5;
  board[p][4] = 6;
  board[p][5] = 3;
  board[p][6] = 2;
  board[p][7] = 4;
  p = 1; // pawn rank
  for(i=0; i LT files; i++) board[p][i] = 1;
  // pieces in hand
  hand[1] = 0;
  hand[2] = 0;
  hand[3] = 0;
  hand[4] = 0;
  hand[5] = 0;
  hand[6] = 0;
  // mirror it to get black setup
  pointSym = 0;