Check out Grant Acedrex, our featured variant for April, 2024.

Enter Your Reply

The Comment You're Replying To
H. G. Muller wrote on Sat, Oct 24, 2015 10:42 PM UTC:

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;

Edit Form
Conduct Guidelines
This is a Chess variants website, not a general forum.
Please limit your comments to Chess variants or the operation of this site.
Keep this website a safe space for Chess variant hobbyists of all stripes.
Because we want people to feel comfortable here no matter what their political or religious beliefs might be, we ask you to avoid discussing politics, religion, or other controversial subjects here. No matter how passionately you feel about any of these subjects, just take it someplace else.
Quick Markdown Guide

By default, new comments may be entered as Markdown, simple markup syntax designed to be readable and not look like markup. Comments stored as Markdown will be converted to HTML by Parsedown before displaying them. This follows the Github Flavored Markdown Spec with support for Markdown Extra. For a good overview of Markdown in general, check out the Markdown Guide. Here is a quick comparison of some commonly used Markdown with the rendered result:

Top level header: <H1>

Block quote

Second paragraph in block quote

First Paragraph of response. Italics, bold, and bold italics.

Second Paragraph after blank line. Here is some HTML code mixed in with the Markdown, and here is the same <U>HTML code</U> enclosed by backticks.

Secondary Header: <H2>

  • Unordered list item
  • Second unordered list item
  • New unordered list
    • Nested list item

Third Level header <H3>

  1. An ordered list item.
  2. A second ordered list item with the same number.
  3. A third ordered list item.
Here is some preformatted text.
  This line begins with some indentation.
    This begins with even more indentation.
And this line has no indentation.

Alt text for a graphic image

A definition list
A list of terms, each with one or more definitions following it.
An HTML construct using the tags <DL>, <DT> and <DD>.
A term
Its definition after a colon.
A second definition.
A third definition.
Another term following a blank line
The definition of that term.