五子棋
//自己今天做了一个小游戏下五子棋,还有不能实现人机对战,希望有人看了能在此基础上实现人机对战和输赢的判定!
//不管怎样感觉今天还是很充实很有收获的!加油!
import flash.events.MouseEvent;
var bushu:uint = 0;//为实现步数改变的一个变量
bushu_txt.text = "0";
var huishou:Array=new Array();//定义数组回收和记录已经下过的棋子
reset_btn.buttonMode = true;//光标变成手状
huiqi_btn.buttonMode = true;
var color:Boolean = true;//为了辨别下的是黑棋还是白棋
tishi_txt.text = "加油!加油!";//给提示定一个默认字符
for (var i:uint=0; i<17; i++)//实现棋盘元件的复制
{
for (var j:uint=0; j<17; j++)
{
var qizi:Qizi=new Qizi();
addChild(qizi);
qizi.x = i * 25;
qizi.y = j * 25;
qizi.buttonMode = true;
qizi.addEventListener(MouseEvent.CLICK,xiaqi);
}
}
function xiaqi(e:MouseEvent):void
{
if (color==true)//如果条件成立下黑棋,否则下白棋
{
e.currentTarget.gotoAndStop(2);//currentTarget:当前正在使用某个事件侦听器处理 Event 对象的对象。为了承接下棋的侦听事件,得到和运用局部变量
}
else
{
e.currentTarget.gotoAndStop(3);
}
color = ! color;
e.currentTarget.buttonMode = false;//借用currentTarget调用qizi
e.currentTarget.removeEventListener(MouseEvent.CLICK,xiaqi);
huishou.push(e.currentTarget);//把下过的棋追加到数组后
bushu_txt.text=String(bushu+=1);//显示步数
tishi_txt.text = "加油!加油!";
}
huiqi_btn.addEventListener(MouseEvent.CLICK,onHuiQiHandler);
function onHuiQiHandler(e:MouseEvent):void
{
if (huishou.length == 0)//当回退到最后没有下过的棋子时在动态文本时输出:"当前已没有走动"
{
tishi_txt.text = "当前已没有走动";
}
else//实现把回退的棋子还原属性,重新起作用;可以继续进行下棋的动作
{
var huiqi_qizi = huishou.pop();
huiqi_qizi.gotoAndStop(1);
huiqi_qizi.buttonMode = true;
huiqi_qizi.addEventListener(MouseEvent.CLICK,xiaqi);//为了再一次调用xiaqi的函数
color = ! color;
bushu_txt.text=String(bushu-=1);//退一次让步数减去1
}
}
reset_btn.addEventListener(MouseEvent.CLICK,onResetHandler);
function onResetHandler(e:MouseEvent):void
{
for each (var item:* in huishou)//重置之后借用for each in循环把数组中记录的已经下过的棋子元件输出并把所有棋子还原属性,重新起作用;可以继续进行下棋的动作
{
item.gotoAndStop(1);
item.buttonMode = true;
item.addEventListener(MouseEvent.CLICK,xiaqi);
}
bushu_txt.text = String(bushu = 0);//重置之后把步数重置为0;
color = true;//重置后返回定义时的值
huishou = [];
if (huishou.length == 0)//如果重置了,数组的长度为0输出:"当前已没有走动"
{
tishi_txt.text = "当前已没有走动";
}
}

浙公网安备 33010602011771号