Actionscript 3 actionscript中断if语句以检查下一个
我正在为一个简单的井字游戏制作一个机器人。问题是,在botCheck函数中,当第0列第0列和第0列第1列为“O”时,则第0列第2列出现“X”,当我尝试将“O”进行另一个组合时(例如第0列第0列和第1列第1列),它应该在不同的if语句中进行检查,但我的代码似乎仍然只在第一个if语句中进行检查,该语句将继续跟踪(“D”)然后卡在那一部分 所以这里有一个问题,在Actionscript 3 actionscript中断if语句以检查下一个,actionscript-3,for-loop,Actionscript 3,For Loop,我正在为一个简单的井字游戏制作一个机器人。问题是,在botCheck函数中,当第0列第0列和第0列第1列为“O”时,则第0列第2列出现“X”,当我尝试将“O”进行另一个组合时(例如第0列第0列和第1列第1列),它应该在不同的if语句中进行检查,但我的代码似乎仍然只在第一个if语句中进行检查,该语句将继续跟踪(“D”)然后卡在那一部分 所以这里有一个问题,在else{trace(“D”);},是否有任何代码可以替换为跳过第一个if语句,转到第二个if语句,以便它可以检查“O”的其他组合 另外,我已
else{trace(“D”);}
,是否有任何代码可以替换为跳过第一个if语句,转到第二个if语句,以便它可以检查“O”的其他组合
另外,我已经尝试使用continue
但它只进入下一个循环,仍然停留在第一个if语句
谢谢
package
{
public class Bot
{
private var n:int = 0;
private var rndm:int;
private var v:int;//vertical
private var h:int;//horizontal
private var moving:Boolean = false;;
private var _main:Main;
public function Bot(main:Main):void
{
_main = main;
}
private function randomNumber(min:Number, max:Number):Number
{
return Math.floor(Math.random()*(1+max-min)+min);
}
public function botMove():void
{
botCheck();
if(n == 0 && moving == false)
{
rndm = randomNumber(0,2);
v = rndm;
rndm = randomNumber(0,2);
h = rndm;
if(_main.squareArray[v][h] == 0)
{
_main.squareArray[v][h] = 1;
_main.xoArray[v][h].push(_main.xo);
moving = true;
fillX();
n = 0;
_main.xo = "O";
}
else
{
botMove();
}
}
if(n == 1 && moving == false)
{
if(_main.squareArray[v][h] == 0)
{
_main.squareArray[v][h] = 1;
_main.xoArray[v][h].push(_main.xo);
moving = true;
fillX();
n = 0;
_main.xo = "O";
}
}
}
private function fillX():void
{
_main.x_ = new X ;
_main.xoContainer.addChild(_main.x_);
_main.x_.x = _main.gameWidth / _main.lebar *(1+(h))+ _main.gameWidth/(_main.lebar*4);
_main.x_.y = _main.gameHeight / _main.panjang * (1+(v))+_main.gameHeight/(_main.panjang*4);
_main.x_.width = _main.square.width / 2;
_main.x_.height = _main.square.height / 2;
}
private function botCheck():void
{
for(var a:int = 0; a<_main.panjang;a++)
{
if(n != 0)
{
break;
}
for(var b:int = 0;b<_main.lebar;b++)
{
if(_main.xoArray[a][b]=="O" && _main.xoArray[a][b+1] == "O")
{
if(b+2 < _main.lebar && _main.xoArray[a][b+2] == 0)
{
n = 1;
v = a;
h = b+2;
moving = false;
break;
}
else if(_main.xoArray[a][b-1] == 0)
{
n = 1;
v = a;
h = b-1;
moving = false;
break;
}
else
{
trace("D");
}
}
else if(_main.xoArray[a][b] == "O" && _main.xoArray[a+1][b] =="O")
{
if(a+2 < _main.panjang && _main.xoArray[a+2][b] == 0)
{
n = 1;
v = a+2;
h = b;
moving = false;
break;
}
else if(a != 0)
{
if(_main.xoArray[a-1][b] == 0)
{
n = 1;
v = a-1;
h = b;
moving = false;
break;
}
}
else
{
}
}
else if(_main.xoArray[a][b]=="O" && _main.xoArray[a+1][b+1] == "O")
{trace("B");
if(a+2 < _main.panjang && b+2 < _main.lebar && _main.xoArray[a+2][b+2] == 0)
{
n = 1;
v = a+2;
h = b+2;
moving = false;
break;
}
else if(a != 0)
{
if(_main.xoArray[a-1][b-1] == 0)
{
n = 1;
v = a-1;
h = b-1;
moving = false;
break;
}
}
else
{
}
}
else if(_main.xoArray[a][b+2]=="O" && _main.xoArray[a+1][b+1] == "O")
{trace("A");
if(a+2 < _main.lebar && _main.xoArray[a+2][b] == 0)
{
n = 1;
v = a+2;
h = b;
moving = false;
break;
}
}
else if(_main.xoArray[a][b] == "O" && _main.xoArray[a+1][b-1] == "O")
{
if(a != 0 && b+1 < _main.lebar && _main.xoArray[a-1][b+1] == 0)
{
n = 1;
v = a-1;
h = b+1;
moving = false;
break;
}
}
else
{
n = 0;
moving = false;
}
}
}
}
}
}
包
{
公共类Bot
{
私有变量n:int=0;
私有var-rndm:int;
私有变量v:int;//垂直
私有变量h:int;//水平
私有变量移动:布尔值=false;;
私有变量main:main;
公共功能机器人(主:主):无效
{
_main=main;
}
私有函数随机数(最小:数,最大:数):数
{
返回Math.floor(Math.random()*(1+max-min)+min);
}
公用函数botMove():void
{
botCheck();
如果(n==0&&moving==false)
{
rndm=随机数(0,2);
v=rndm;
rndm=随机数(0,2);
h=rndm;
if(_main.squareArray[v][h]==0)
{
_main.squareArray[v][h]=1;
_xoArray[v][h].push(_main.xo);
移动=真;
fillX();
n=0;
_main.xo=“O”;
}
其他的
{
botMove();
}
}
如果(n==1&&moving==false)
{
if(_main.squareArray[v][h]==0)
{
_main.squareArray[v][h]=1;
_xoArray[v][h].push(_main.xo);
移动=真;
fillX();
n=0;
_main.xo=“O”;
}
}
}
私有函数fillX():void
{
_main.x=新的x;
_main.xoContainer.addChild(_main.x_u);
_main.x_ux=_main.gameWidth/_main.lebar*(1+(h))+_main.gameWidth/(_main.lebar*4);
_main.x_u.y=_main.gameHeight/_main.panjang*(1+(v))+_main.gameHeight/(_main.panjang*4);
_main.x_u.width=_main.square.width/2;
_main.x_u.height=_main.square.height/2;
}
私有函数botCheck():void
{
for(var a:int=0;a如果要检查for循环中的所有If语句,只需从其他If语句中删除“else”
因此,您的第一个if语句很好,但下一个if语句将从
else if(_main.xoArray[a][b] == "O" && _main.xoArray[a+1][b] =="O")
简单地
if(_main.xoArray[a][b] == "O" && _main.xoArray[a+1][b] =="O")
(只是省略了其他部分)
对循环中所有其他最外层的“else if”重复该操作
现在,我看到在底部有一个最终的“else”,它将n设置为0并移动到false。如果您进行上面列出的更改,您可以删除该else块,而将这些语句放在else块中(n=0;moving=false)因此,除非触发任何if语句,否则n将等于0,moving将等于false,这是预期的结果
您还可以清除for循环中所有空的else{}块;它们无论如何都不会产生任何影响。如果您有任何问题,请告诉我:)非常感谢!我曾想过使用if,但我不知道将else块(n=0;moving=false;)放在何处,空的else块只是用于检查开始时的内容。