Rx Training Games provides a basic API for building games.
Squares of different colors are switched on and off in a graphical square grid :
The grid is first instantiated with the size of the activable squares : api.initGrid({squareSize: 15});
Multiple layers with different colors can be added with var layer = api.addLayer({color: '#337ab7'});
A layer exposes the following methods :
layer.fill({x: 42, y: 42});
: activate a squarelayer.clear({x: 42, y: 42});
: clear a squarelayer.getActiveSquares();
: retrieve a list of active squares
The layer is also implemented as an Observable Collection and provides two Observables :
// square activations
layer.activations.subscribe(coord =>
console.log(coord.x + ',' + coord.y + ' has been activated')
);
// square removals
layer.removals.subscribe(coord =>
console.log(coord.x + ',' + coord.y + ' has been cleared')
);
Keyboard events are accessible using an Observable :
// keyboard events
api.keyboard.subscribe(keyCode =>
console.log(keyCode)
);
Most games have the concept of directions : Left, Up, Right and Down.
The API exposes these directions as well as convenient methods in api.directions
object.
Both key codes and human readable names are available console.log(_.keys(api.directions))
:
["37", "38", "39", "40", "Left", "Up", "Right", "Down"]
These keys can be used to
Filter keyboard events :
var directionKeys = api.keyboard.filter(keyCode =>
keyCode in api.directions
);
Update coordinates :
// using key identifier
var newCoord = api.directions.Up({x: 42, y: 42});
// using key code
var newCoord = api.directions['38']({x: 42, y: 42});
api.gameSize()
: return the number of rows/columnsapi.setText({text: 'Score : 42'})
: display text in the gridapi.randomSquare()
: generate random valid xy coordinates ({x: ?, y: ?}
)api.randomCoord()
: generate a random valid coordinate ({x: api.randomCoord(), y: 42}
)api.isOffLimits({x: 42, y: 42})
: return true if xy coordinates fall outside the gridapi.isWithinLimits({x: 42, y: 42})
: return true xy coordinates fall inside the gridapi.gameOver()
: end the game
Do you think you can invent games with these simple elements? See how to contribute.