Welcome to my blog. I mainly blog about the basics of running Flash games over the internet, but sometimes I get distracted. Here you will find my efforts at programming turn based Flash games, plus links to all the games I have written. You are free (as in beer) to get all the code, just email me - nicolas_evans at yahoo.com (sorry you cant click on it - I dont want more spam).
Building Multiplayer Games in Flash.
class MyCommunications {
private var gsURL:String;
var gmyLoadVars:LoadVars;
var gnMessageID:Number;
private var gnErrorCount:Number;
function MyCommunications (pURL:String) {
gsURL = pURL;
gnErrorCount = 0;
gmyLoadVars = new LoadVars();
gmyLoadVars.onLoad = function(success:Boolean) {
if (success) {
if (gnErrorCount > 0)
gnErrorCount--;
_level0.myCommunications.fnMessageSuccess();
}
else if (gnErrorCount < 5) {
gnErrorCount++;
_level0.myCommunications.fnMessageFail();
}
else {
trace("Error loading/parsing LoadVars.");
_level0.gotoAndStop("FatalError");
}
}
}
function fnLoadVariables(pString:String) {
trace("fnLoadVariables")
gmyLoadVars.load(gsURL + "scramble.jsp" + pString +
"&nocache=" + Math.random(), "GET");
}
function fnSendToServer (pAsPlayer) {
var i:Number,j:Number;
var arTemp:Array = new Array();
j = 0;
arTemp[j++] = gsURL + "scramble.jsp" +
"?action=INSERT" +
"&filename=" + _level0.myScrambleGame.gnGameNumber +
"&pno=" + pAsPlayer +
"&nTurn=" + _level0.myScrambleGame.gnTurn +
"&rnd=" + _level0.myScrambleGame.gnRound +
"&p2score=" + _level0.myScrambleGame.player2Hand.nScore +
"&pwd=" + _level0.myScrambleGame.gsPassword +
"&p1hand=" ;
for (i=0;i<_level0.myScrambleGame.player1Hand.arPlayerTiles.length;i++) {
arTemp[j++] = _level0.myScrambleGame.player1Hand.arPlayerTiles[i]._name + ",";
}
arTemp[j++] = "&p2hand=";
for (i=0;i<_level0.myScrambleGame.player2Hand.arPlayerTiles.length;i++) {
arTemp[j++] = _level0.myScrambleGame.player2Hand.arPlayerTiles[i]._name + ",";
}
arTemp[j++] = "&board=";
for (i=0;i<_level0.myScrambleGame.garBoard.length;i++) {
if (_level0.myScrambleGame.garBoard[i] != "Empty")
arTemp[j++] = _level0.myScrambleGame.garBoard[i]._name;
arTemp[j++] = ",";
}
arTemp[j++] = "&order=" ;
for (i=0;i<_level0.myScrambleGame.garTileOrder.length;i++) {
arTemp[j++] = _level0.myScrambleGame.garTileOrder[i] + ",";
}
arTemp[j++] = "&p1toopen=" + _level0.myScrambleGame.player1Hand.bToOpen +
"&p2toopen=" + _level0.myScrambleGame.player2Hand.bToOpen +
"&p1score=" + _level0.myScrambleGame.player1Hand.nScore +
"&messageID=";
gnMessageID = Math.floor(Math.random() * 1000);
arTemp[j++] = "" + gnMessageID;
gmyLoadVars.load(arTemp.join(""),gmyLoadVars,"POST");
}
function fnParseVariablesFromServer() {
if (parseInt(gmyLoadVars.nErrorNumber) != 0) {
trace("Error received from server " + gmyLoadVars.nErrorNumber)
_level0.gotoAndStop("ConnectionError")
}
_level0.myScrambleGame.gnPlayerNumber = parseInt(gmyLoadVars.pno);
_level0.myScrambleGame.gnTurn = parseInt(gmyLoadVars.nTurn);
_level0.myScrambleGame.gnRound = parseInt(gmyLoadVars.rnd) ;
_level0.myScrambleGame.gsPassword = rTrim(gmyLoadVars.pwd);
_level0.myScrambleGame.player1Hand.arPlayerTiles =
fnConvertStringToObjects(gmyLoadVars.p1hand);
_level0.myScrambleGame.player2Hand.arPlayerTiles =
fnConvertStringToObjects(gmyLoadVars.p2hand);
_level0.myScrambleGame.garBoard = fnConvertStringToObjects(gmyLoadVars.board);
_level0.myScrambleGame.garTileOrder = gmyLoadVars.order.split(",");
_level0.myScrambleGame.garTileOrder.pop(); // remove empty space at end
_level0.myScrambleGame.player1Hand.bToOpen =
fnConvertStringToBoolean(gmyLoadVars.p1toopen);
_level0.myScrambleGame.player2Hand.bToOpen =
fnConvertStringToBoolean(gmyLoadVars.p2toopen);
_level0.myScrambleGame.player1Hand.nScore = parseInt(gmyLoadVars.p1score);
_level0.myScrambleGame.player2Hand.nScore = parseInt(gmyLoadVars.p2score);
}
function fnConvertStringToObjects (pString:String):Array {
trace("fnConvertStringToObjects")
var i:Number;
var arTemp =new Array();
var arTempOut = new Array();
arTemp = pString.split(",");
for (i =0;i<arTemp.length;i++) {
if (arTemp[i] == "undefined" || arTemp[i] == "")
arTempOut.push("Empty");
else if (_level0[arTemp[i]])
arTempOut.push(_level0[arTemp[i]] );
}
return arTempOut;
}
function fnConvertStringToBoolean(pString:String):Boolean {
if (pString.substr(0,4) == "true")
return true;
else
return false;
}
function rTrim(s) {
var i:Number;
var sTemp = s;
i = sTemp.length;
while (i > 0) {
if (sTemp.charAt(i-1) == " " ||
sTemp.charAt(i-1) == "\n" ||
sTemp.charAt(i-1) == "\r") {
i--;
}
else {
break;
}
}
return sTemp.substr(0,i);
}
function fnMessageSuccess() {
trace ("fnMessageSuccess");
// overwritten by each message
}
function fnMessageFail() {
trace ("fnMessageFail");
// overwritten by each message
}
}

Play
Fish Or Foul
Play
Mammoths