x Tic Toc Remake v1.00 Beta in Flash AS3.0

pButton , it's the buttons that user click in game. screenButton. Its two instance on stage , signCells: 3 frames total, 1 frame is blank, and frame 2 and 3 contains two signs that is cross and circle. msg:TextArea // its empty dynamic text on frame 1,to show results at game end. There are two frame on main FLA file. At frame one,there are two instances of screenButtons(play1 , play2 ),and in actions panel:
var playMode:String;play1.addEventListener(MouseEvent.CLICK,playSelection);play2.addEventListener(MouseEvent.CLICK,playSelection);stop();function playSelection(event:MouseEvent):void {if (event.currentTarget == play1){playMode = "computer";}else{playMode = "human";}play1.removeEventListener(MouseEvent.CLICK,playSelection);play2.removeEventListener(MouseEvent.CLICK,playSelection);gotoAndPlay(2);}
At frame 2:
TicTocClass_start();
stop();
Document Class.
package
{
import flash.display.*;
import flash.events.*;
import flash.filters.*;
import flash.net.*;
import flash.ui.*;
import flash.utils.*;
import fl.transitions.*;
import fl.transitions.easing.*;
public class TicTocClass extends MovieClip
{
var boardArray:Array;
var gameButtons:Array;
var offsetX:int = 160;
var offsetY:int = 100;
var curPlayer:String;
var curSign:int;
var winner:String;
var movesCount:int;
public function TicTocClass_start()
{
gameButtons=new Array();
movesCount = 0;
for (var i:int=0; i<3; i++)
{
for (var j:int=0; j<3; j++)
{
var sCell:signCells=new signCells();
var cBtn:pButton=new pButton();
cBtn.name = "b_" + i + "_" + j;
cBtn.i = i;
cBtn.j = j;
sCell.name = "s_" + i + "_" + j;
sCell.x=cBtn.x = offsetX+(i * (cBtn.width+5));
sCell.y=cBtn.y = offsetY+(j * (cBtn.height+5));
sCell.mouseEnabled = false;
sCell.gotoAndStop(1);
cBtn.n = gameButtons.length;
gameButtons.push(cBtn);
cBtn.addEventListener(MouseEvent.CLICK,pButtonClickEvent);
addChild(cBtn);
addChild(sCell);
}
}
boardArray = new Array([0,0,0],[0,0,0],[0,0,0]);
curPlayer = "you";
curSign = 2;
}//ends Constructor
public function pButtonClickEvent(event:MouseEvent)
{
if (playMode == "computer" && curPlayer == "computer")
{
return;
}
var mc:Object = event.currentTarget;
var smc:MovieClip = MovieClip(getChildByName("s_" + mc.i + "_" + mc.j));
smc.gotoAndStop(curSign);
event.currentTarget.removeEventListener(MouseEvent.CLICK,pButtonClickEvent);
event.currentTarget.enabled = false;
boardArray[mc.i][mc.j] = curSign;
movesCount++;
var gEnd:Boolean = checkGameEnd();
turnPlayerMove(gEnd);
}//ends pButtonClickEvent
public function checkGameEnd():Boolean
{
var end:Boolean = false;
var arr = boardArray;
for (var i:int=0; i<3; i++)
{
if (checkRows(boardArray,i,curSign))
{
end = true;
break;
}
else if (checkCols(boardArray,i,curSign))
{
end = true;
break;
}
else if (checkDiag(boardArray,curSign))
{
end = true;
break;
}
else if (movesCount==9)
{
end = true;
break;
}
}
if (end && movesCount < 9)
{
if (curSign == 2)
{
winner="You"
;
}
else
{
winner = "You (II)";
if (playMode == "computer")
{
winner = "Computer";
}
}
}
else
{
winner = "NO ONE ";
}
return end;
}//ends checkGameEnd
public function playAI()
{
//check Possible win of USER
var myArr:Array;
var threat:Boolean = false;
var pi;
var pj;
var pos:Array=new Array();
for (var i=0; i<3; i++)
{
for (var j=0; j<3; j++)
{
if (curPlayer != "computer")
{
return;
}
if (boardArray[i][j] == 0)
{
pos.push({xi:i,xj:j});
myArr=new Array();
myArr = copyArray(boardArray);
myArr[i][j] = 2;
if (checkPossibleEnd(myArr,2))
{
threat = true;
pi = i;
pj = j;
break;
}
}
}
}
if (threat)
{
markComputer(pi,pj);
}
else
{
// if mode is hard , Computer calculates to make a win;
var n=Math.floor(Math.random()*(pos.length));
markComputer(pos[n].xi,pos[n].xj);
}
//ends check possible win of USER
}//ends play AI
function markComputer(i,j)
{
var mc = getChildByName("b_" + i + "_" + j);
var smc = getChildByName("s_" + i + "_" + j);
smc.gotoAndStop(3);
mc.removeEventListener(MouseEvent.CLICK,pButtonClickEvent);
mc.enabled = false;
boardArray[i][j] = 3;
movesCount++;
var gEnd:Boolean = checkGameEnd();
turnPlayerMove(gEnd);
}//ends markComputer
private function checkRows(arr,row:int,sign):Boolean
{
var bol:Boolean = false;
if (arr[0][row] == arr[1][row] && arr[1][row] == arr[2][row] && arr[0][row] == sign)
{
bol = true;
}
return bol;
}//ends checkRows
private function checkCols(arr,col:int,sign):Boolean
{
var bol:Boolean = false;
if (arr[col][0] == arr[col][1] && arr[col][1] == arr[col][2] && arr[col][0] == sign)
{
bol = true;
}
return bol;
}//ends checkCols
private function checkDiag(arr,sign):Boolean
{
var bol:Boolean = false;
if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[0][0] == sign)
{
bol = true;
}
else if (arr[0][2]==arr[1][1]&&arr[1][1]==arr[2][0] && arr[0][2]==sign)
{
bol = true;
}
return bol;
}//ends checkDiag
function checkPossibleEnd(arr:Array,sign):Boolean
{
var end:Boolean = false;
for (var i:int=0; i<3; i++)
{
if (checkRows(arr,i,sign))
{
end = true;
break;
}
else if (checkCols(arr,i,sign))
{
end = true;
break;
}
else if (checkDiag(arr,sign))
{
end = true;
break;
}
else if (movesCount==9)
{
end = true;
break;
}
}
return end;
}//end checkPossibleEnd
function copyArray(arr:Array):Array
{
var res:Array=new Array();
for (var t=0; t<3; t++)
{
res[t] = arr[t].concat();
}
return res;
}//ends copy Arry
function turnPlayerMove(isEnd)
{
if (! isEnd)
{
if (playMode == "computer")
{
if (curPlayer == "you")
{
curPlayer = "computer";
curSign = 3;
playAI();
}
else
{
curPlayer = "you";
curSign = 2;
}
}
else
{
if (curPlayer == "you")
{
curPlayer = "you2";
curSign = 3;
}
else
{
curPlayer = "you";
curSign = 2;
}
}
}
else
{
for (var i:int=0; i<3; i++)
{
for (var j:int=0; j<3; j++)
{
removeChild(getChildByName("s_"+i+"_"+j));
removeChild(getChildByName("b_"+i+"_"+j));
}
}
gotoAndPlay(1);
msg.text=winner+" Win !";
}
}
}
}
Comments
Post a Comment