﻿/*
====== READ THIS ========
This code was created as a part of the seminar on 
flash game programing at the University of Munich (Ludwig-
Maximlians Universität.

The code may be used for educational purposes only. All
rights reserverd by the author.

Author: Max Maurer
E-Mail: max.maurer@ifi.lmu.de
(c) 2011
If you have any questions don't hasitate to contact me.
=========================
*/
stop();
var currentPlayer:int;
var count:int;
board.buttonMode=true;
board.addEventListener(MouseEvent.CLICK, boardClickHandler);
var fields:Array;
resetBoard();

function resetBoard():void {
	count=0;
	currentPlayer=0;
	while (board.marks.numChildren>0) {
		board.marks.removeChildAt(0);
	}
	nextMove();
	fields = new Array(new Array(0,0,0),new Array(0,0,0),new Array(0,0,0))
}

function boardClickHandler(evt:MouseEvent):void {
	if (count>=9) {
		resetBoard();
		return;
	}
	var x:int=int(board.mouseX/(board.width/3));
	var y:int=int(board.mouseY/(board.height/3));
	if (fields[y][x]!=0) {
		txtInfo.text="Please use an empty field!";
		return;
	}
	fields[y][x] = currentPlayer;
	var mc:MovieClip;
	if (currentPlayer==1) {
		mc = new Cross();
	} else {
		mc = new Circle();
	}
	board.marks.addChild(mc);
	mc.x = x*(board.width/3);
	mc.y = y*(board.height/3);
	var winner:int = checkWin();
	if (winner==0) nextMove();
	else {
		if (winner==1) {
			txtInfo.text = "The cross player won!";
		} else {
			txtInfo.text = "The circle player won!";
		}
		count=9;
		return ;
	}
	count++;
	if (count>=9) {
		txtInfo.text = "No winner";
		return ;
	}
}

function checkWin():int {
	var winner:int = 0;
	if (winner==0) winner = line(0);
	if (winner==0) winner = line(1);
	if (winner==0) winner = line(2);
	if (winner==0) winner = column(0);
	if (winner==0) winner = column(1);
	if (winner==0) winner = column(2);
	if (winner==0) winner = crossDown();
	if (winner==0) winner = crossUp();
	return winner;
}

function line(l:int):int {
	var start:int=fields[l][0];
	for (var i:int=1;i<3;i++) {
		if (fields[l][i]!=start) return 0;
	}
	return start;
}

function column(c:int):int {
	var start:int=fields[0][c];
	for (var i:int=1;i<3;i++) {
		if (fields[i][c]!=start) return 0;
	}
	return start;
}

function crossDown():int {
	var start:int=fields[0][0];
	if (fields[1][1]!=start) return 0;
	if (fields[2][2]!=start) return 0;
	return start;
}

function crossUp():int {
	var start:int=fields[2][0];
	if (fields[1][1]!=start) return 0;
	if (fields[0][2]!=start) return 0;
	return start;
}


function nextMove() {
	currentPlayer++;
	if (currentPlayer>2) currentPlayer=1;
	if (currentPlayer==1) txtInfo.text="Please set your cross";
	else txtInfo.text="Please set a circle";
}