Finally Done
As I didn’t have much spare time to write this game, I didn’t want to waste it with writing posts – especially that I wasn’t absolutely sure that it will be done.
But it is now, and the entry is posted. I hope you will like it.
As I didn’t have much spare time to write this game, I didn’t want to waste it with writing posts – especially that I wasn’t absolutely sure that it will be done.
But it is now, and the entry is posted. I hope you will like it.
Just created a small script for helping me with the game – admittedly not the most sophisticated tool around, but it might help me to create content faster.
I can’t attach it to the blog (js files are not allowed) but I am obliged to show it, so here we go:
// Base namespace
var ben = {
};
// checks that the object is not null, and has a function with the given name
ben.hasFunction = function(obj, functionName) {
var hasF = obj && obj[functionName] && typeof obj[functionName] === "function";
if(!hasF) {
console.log(obj + ' doesn\'t have \''+ functionName +'\' function');
}
return hasF;
};
// Orchestrates the player turns and the game updates
ben.doUpdate = function() {
if(!ben.hasFunction(this, "update")) {
return;
}
if(!ben.hasFunction(this, 'isSynchronous')) {
return;
}
if(this.currentTurn >= this.maxTurns) {
this.stop();
return;
}
if(this.isSynchronous()) {
if(!this.isReady()) {
return;
}
var ndx;
this.setReady(false);
console.log('Processing turn '+this.getCurrentTurn());
for(ndx in this.players) {
var currentPlayer = this.players[ndx];
if(!ben.hasFunction(currentPlayer, 'doTurn')) {
continue;
}
currentPlayer.doTurn(this.context);
this.context.currentPlayer = ndx;
this.update(this.context);
}
this.increaseTurn();
this.setReady(true);
} else {
this.stop();
return;
// TODO: Work on this when needed
}
};
// Starts the update thread
ben.doStart = function() {
if(!this ) {
return;
}
var that = this;
console.log('Starting');
console.log(that);
that._updateThread = window.setInterval(function() {that.doUpdate()}, that._updateDelay);
}
// Stops the update thread
ben.doStop = function() {
console.log('Stopping');
if(this._updateThread) {
console.log('Has thread');
window.clearInterval(this._updateThread);
this._updateThread = null;
}
}
// Creates the base Game object
// Params:
// gameName: The human readable name of the game
// maxTurns: the number of total turns
// playerList: an array of players
// updateFunction: The update function to be called at an interval
// synch: Synchronous flag. If true, the update waits for each players, otherwise the players input are processed in the regular updates
ben.Game = function(gameName, maxTurns, playerList, updateFunction, synch) {
var game = {
_updateDelay: 16, // ms, time between update calls
_updateThread: null, // placeholder
_synchronous: synch, // Synchronous games wait for the players turn with an update
_name: gameName, // the name of the game, for displaying
players: playerList, // the players, incl ai
maxTurns: maxTurns,
currentTurn: 0,
ready: true,
context: {} // current game context
};
// to get the human readable name
game.getName = function() {
return game._name;
};
// to change the current players
game.setPlayers = function(plList) {
game.players = plList;
}
// to get the number of current players
game.getPlayerCount = function() {
return (players != null) ? players.length : 0;
};
// sets the ready flag to the given value
game.setReady = function(rdy) {
game.ready = rdy;
};
// returns the value of the ready flag
game.isReady = function() {
return game.ready;
}
// returns the value of the synchronous flag
game.isSynchronous = function() {
return game._synchronous;
}
game.getCurrentTurn = function() {
return game.currentTurn;
}
game.increaseTurn = function() {
game.currentTurn += 1;
return game.currentTurn;
}
// stores the update function
if(updateFunction) {
if(typeof updateFunction === "function") {
game.update = updateFunction;
} else {
throw {message : "Passed updateFunction variable is not a function"};
}
};
// this function is called with the update frequency
game.doUpdate = ben.doUpdate;
// calling this function starts the game
game.start = ben.doStart;
// calling this function stops the game
game.stop = ben.doStop;
return game;
};
Tags: basecode