JavaScript library for easily creating board games
Switch branches/tags
Nothing to show
Clone or download
danielborowski Merge pull request #3 from drusepth/master
Include board namespacing for multi-board pages
Latest commit f0aa99c Dec 7, 2017
Failed to load latest commit information.
examples dddgggg Jan 28, 2015
images s Jan 25, 2015 Update Nov 7, 2017
index.html ffnnn Jan 26, 2015
jsboard.js Include board namespacing for multi-board pages Oct 21, 2017
jsboard.min.js s Jan 26, 2015


JavaScript library that allows you to easily create board games like Chess and Conway's Game of Life.

jsboard allows you to focus on your game logic, game AI, and game algorithms rather than focusing on creating and styling your game using HTML and CSS. jsboard allows you to create and play 2D board games very easily using its functions so you don't have to worry about how to represent your game in JavaScript or how to display it in the HTML.

jsboard doesn't require jQuery or any other libraries. Simply include the library in your HTML file like in the example below.


Setting Up

All you need to get started is a simple HTML file and a JS file where your game code will go. Here's how your index.html file should look:

<!DOCTYPE html>
  <table id='game'></table>
  <script src="jsboard.min.js"></script>
  <script src="index.js"></script>

Then create a blank index.js file where the game code will go.


You have access to the following objects using jsboard.

jsboard.board({ attach: tableID, size: NxM [,style: "checkerboard"] [,stylePattern: [color1, color2]] });
jsboard.piece({ text: pieceName [,cssProperties] });

Here is an example board and piece created with the following properties.

var b = jsboard.board({ attach: "game", size: "3x3" });
var x = jsboard.piece({ text: "X", fontSize: "40px", textAlign: "center" });

If you open index.html you should see the following:

alt text

Let's add some functionality to our board. We'll make it so that when we click on an empty space, one of our pieces will be placed down. We'll do this using the cell function from jsboard which can modify and get properties from spaces within the game board.

b.cell("each").on("click", function() {
  if (b.cell(this).get()===null) {

You should now be able to place X's on the board. Check it out here

Let's actually turn this into a tic-tac-toe game. All we need to do is alternate the placing of pieces X and O. Here's how the final index.js should look.

var b = jsboard.board({ attach: "game", size: "3x3" });
var x = jsboard.piece({ text: "X", fontSize: "40px", textAlign: "center" });
var o = jsboard.piece({ text: "O", fontSize: "40px", textAlign: "center"});

var turn = true;
b.cell("each").on("click", function() {
  if (b.cell(this).get()===null) {
    if (turn) { b.cell(this).place(x.clone()); }
    else      { b.cell(this).place(o.clone()); }
    turn = !turn;

That's it! We just created a functioning tic-tac-toe game using these simple commands. Check out the tic-tac-toe game here

What if we want to change the styling of our board? We actually have jsboard functions to modify each cell or modify the whole board. We'll make changes to both.{ borderSpacing: "8px" });
  width: "75px", 
  height: "75px", 
  background: "lightblue", 
  borderRadius: "15px" 

Here's what you should see now.

alt text


Create a board.

jsboard.board({ attach: tableID, size: NxM [,style: "checkerboard"] [,stylePattern: [color1, color2]] });
// var b = jsboard.board({ attach: "game", size: "3x3" }); 
// var c = jsboard.board({ attach: "game", size: "8x8", style: "checkerboard" }); 
// var d = jsboard.board({ attach: "game", size: "8x8", style: "checkerboard", stylePattern: ["blue","green"] }); 

Board properties, methods, and styling.

var b = jsboard.board({ attach: "game", size: "5x8", style: "checkerboard" }); 
b.matrix(); // matrix representation containing values from piece.text or null
b.rows();   // 5
b.cols();   // 8
b.removeEvents(event, func); // removes event listeners from all board spaces (see chessknight example){ cssProperties });

Create pieces.

jsboard.piece({ text: pieceName [,cssProperties] });
// var x = jsboard.piece({ text: "X", fontSize: "40px", textAlign: "center" });
// var k = jsboard.piece({ text: "WK", textIndent: "-9999px", background: "url('images/white.png') no-repeat", width: "50px", height: "50px", margin: "0 auto" });

Piece methods and styling.

var p = jsboard.piece({ text: "X", fontSize: "40px", textAlign: "center" });{ cssProperties });
var x = p.clone(); // you must clone a piece before placing it on the board because jsboard.piece only serves as a piece schema and clone() gets it ready for the DOM

Cell methods.

var b = jsboard.board({ attach: "game", size: "5x8", style: "checkerboard" }); 
var p = jsboard.piece({ text: "X", fontSize: "40px", textAlign: "center" });

// styling cells
b.cell("each").style({ cssProperties });
b.cell([N,M]).style({ cssProperties }); // [N,M] = position on the game board using matrix notation
b.cell(this).style({ cssProperties }); // this = current cell 
b.cell(this,K).style({ cssProperties }); // (this,K) = some position K spaces from this cell. Example: b.cell(this,3) represents the cell 3 spaces to the right of this cell (see quoridorwalls example)

// placing pieces in cells

// removing pieces from cells

// adding event listeners to cells
b.cell("each").on(event, function); 
b.cell([N,M]).on(event, function); // Example: b.cell([0,0]).on("click", function() { alert("clicked!"); } );
b.cell(this).on(event, function);
b.cell(this,K).on(event, function);

// removing event listeners from cells
b.cell("each").removeOn(event, function); 
b.cell([N,M]).removeOn(event, function); // Example: b.cell([0,0]).removeOn("click", myFunc } ); 
b.cell(this).removeOn(event, function);
b.cell(this,K).removeOn(event, function);

// get content of cell to see if a piece is within some cell 
// either null or piece.text is returned

// check where a specific cell is within the game board 
// returns matrix notation [N,M] of cell within game board

// return the DOM node for given cell in order to manipulate using
// standard JS functions. Example: b.cell([0,0]).DOM().classList.add("myclass"); 



Checkerboard style

Other games and simulations