get paid to paste

ArtyOnline Server Script - TIC TAC TOE

// TIC TAC TOE
// A server script for ArtyOnline server application
// by Arty-fishL
// 4 Aug 2012

/* ----------
 * SETUP API
 */

importPackage(Packages.tk.artyfl.artyonline.script);
var print = Terminal.outln;

/* ----------
 * VARIABLES
 */

var
started = false,
xPlayer = null,
yPlayer = null,
mrStage = 0,
readyX = false,
readyY = false,
whosGo = null;

// board
var
line1 = [0, 0, 0],
line2 = [0, 0, 0],
line3 = [0, 0, 0];

/* ----------
 * FUNCTIONS
 */

function setupGame() {
	// randomly choose x and o player
	if (Math.round( Math.random() ) === 0) {
		// first player is x
		xPlayer = Users.getUsers()[0];
		yPlayer = Users.getUsers()[1];
	} else {
		// second player is x
		xPlayer = Users.getUsers()[1];
		yPlayer = Users.getUsers()[0];
	}
	// randomly choose who plays first
	if (Math.round( Math.random() ) === 0) {
		// x goes first
		whosGo = xPlayer;
	} else {
		// y goes first
		whosGo = yPlayer;
	}
	// inform who is playing what
	var message = Messages.SimpleMessage(xPlayer, Messages.MessageBank.get("play as"), ["x", (whosGo === xPlayer)]);
	Messages.sendMessage(message);
	message = Messages.SimpleMessage(yPlayer, Messages.MessageBank.get("play as"), ["y", (whosGo === yPlayer)]);
	Messages.sendMessage(message);
	// replies will be received in onMessageReceived event
	mrStage = 1;
}

function replyWhoXY(message) {
	// - reply to who is x and y
	if (message.getMessage() === Messages.MessageBank.get("understood")) {
		// confirmed player is ready
		if (message.getUser() === xPlayer) {
			readyX = true;
		} else if (message.getUser() === yPlayer) {
			readyY = true;
		}
		// if both players are ready start play
		if (readyX && readyY) {
			// let play commence
			mrStage = 2;
		}
	} else {
		// somebody didnt understand, try sending again
		var message2 = null;
		if (message.getUser() === xPlayer) {
			message2 = Messages.SimpleMessage(message.getUser(), Messages.MessageBank.get("play as"), ["x"]);
		} else if (message.getUser() === yPlayer) {
			message2 = Messages.SimpleMessage(message.getUser(), Messages.MessageBank.get("play as"), ["y"]);
		}
		Messages.sendMessage(message2);
	}
}

function changePlayer() {
	// next persons go
	if (whosGo === xPlayer) {
		whosGo = yPlayer;
	} else {
		whosGo = xPlayer;
	}
}

function checkForWin() {
	// check to see if a plyer has won
	var
	sequence = line1.concat(line2, line3),
	winningSequences = [
		["tl", "tm", "tr"] ,
		["ml", "mm", "mr"] ,
		["bl", "bm", "br"] ,
		["tl", "ml", "bl"] ,
		["tm", "mm", "bm"] ,
		["tr", "mr", "br"] ,
		["tl", "mm", "br"] ,
		["tr", "mm", "bl"]
	],
	
	playingPiece = 0;
	if (whosGo === xPlayer) {
		playingPiece = 1;
	} else {
		playingPiece = 2;
	}
	
	var placeMap = {
		0: "tl", 1: "tm", 2: "tr",
		3: "ml", 4: "mm", 5: "mr",
		6: "bl", 7: "bm", 8: "br"
	},
	
	playedPlaces = [];
	for (i=0; i<9; i++) {
		if (sequence[i] === playingPiece) {
			playedPlaces.push(placeMap[i]);
		}
	}
	for (i=0; i < winningSequences.length; i++) {
		if (playedPlaces.contains(winningSequences[i][0]) && playedPlaces.contains(winningSequences[i][1]) && playedPlaces.contains(winningSequences[i][2])) {
			// matched a winning sequence
			return true;
		}
	}
	// no winning matches
	return false;
}

function informCurrentMove(line, box) {
	var mp = null;
	if (whosGo === xPlayer) {
		mp = yPlayer;
	} else {
		mp = xPlayer;
	}
	var message = Messages.SimpleMessage(mp, Messages.MessageBank.get("other player moved"), [line, box]);
	Messages.sendMessage(message);
}

function informNextMove() {
	var message = Messages.SimpleMessage(whosGo, Messages.MessageBank.get("your go"), []);
	Messages.sendMessage(message);
}

function informWinner() {
	var winner = "";
	if (whosGo === xPlayer) {
		winner = "x";
	} else {
		winner = "y";
	}
	var message = Messages.SimpleMessage(xPlayer, Messages.MessageBank.get("winner"), [winner]);
	Messages.sendMessage(message);
	message = Messages.SimpleMessage(yPlayer, Messages.MessageBank.get("winner"), [winner]);
	Messages.sendMessage(message);
}

function makeMove(message) {
	// current player chose position
	var
	line = message.getVars[0],
	box = message.getVars[1],
	xo = 0;
	if (whosGo === xPlayer) {
		xo = 1;
	} else {
		xo = 2;
	}
	if(line === 1) {
		// play in line 1
		line1[box] = xo;
	} else if(line === 2) {
		// play in line 2
		line2[box] = xo;
	} else if(line === 3) {
		// play in line 3
		line3[box] = xo;
	}
	// use move data
	informCurrentMove(line, box);
	if (checkForWin() === false) {
		// next move
		changePlayer();
		informNextMove();
	} else {
		// somebody won
		informWinner();
	}
}

/* ---------
 * EVENTS
 */

Events.onLoad = function(vars) {
	// SETUP
	// limit players to 2
	Users.setMaxUsers(2);
	// add messages to message bank
	Messages.MessageBank.add( ["wait other player", "make move", "other player moved", "winner", "play as", "understood", "your go"] );
};

Events.onJoin = function(vars){
	// wait for 2 players to join
	if (Users.getUsers().length === 2) {
		// start game
		started = true;
		setupGame();
	} else {
		// still waiting for players to join
		print("Waiting for other player to join");
		// inform user who just joined
		var message = Messages.SimpleMessage(vars[0], Messages.MessageBank.get("wait other player"), []);
		Messages.sendMessage(message);
	}
};

Events.onMessageReceive = function(vars) {
	// get message
	var message = vars[0];
	// check for various functions
	if (mrStage === 1) {
		// reply to who is x and y
		replyWhoXY(message);
	} else if (mrStage === 2 && message.getMessage() === Messages.MessageBank.get("make move") && message.getUser() === whosGo) {
		// telling where player will move
		makeMove(message);
	}
};

Events.onCommand = function(vars) {
	// print understood
	var command = vars[0];
	print(command.getCommand());
};

Pasted: Aug 4, 2012, 11:35:57 pm
Views: 18