Tengo un problemilla que no sé como solucionar.
He creado un tablero de juego con casillas. Tengo una función que sabiendo el resultado de lanzar un dado, ilumina las casillas a las que puede ir la ficha que esté jugando en ese momento. Las casillas iluminadas están adscritas a un evento que al hacer click sobre ellas moverá la fichas hasta estas. El problema es que quiero que solo mueva la ficha hasta la primera casilla en la que se haga click, no que permita hacer click indefinidamente en todas las casillas iluminadas, es decir, que la ficha se mueva a la casilla en la que se ha hecho el primer click y que no se pueda volver a mover hasta el siguiente turno.
El código es este:
Código:
public function calcularMovIzq(f:Ficha,numero:int){ var tab:DibujarTablero=DibujarTablero.getInstancia(); var lC:Array=tab.getCasillas(); var c:Casilla=f.getCasilla(); var i:int; var num:int=numero; var parar:Boolean=false; var cAuxi:Casilla; var fila:int=c.getFila(); var col:int=c.getColumna(); //Izquierda var izq:Boolean=c.getBordeIzq(); if (izq==false){ for (i=1;parar==false;i++){ col--; cAuxi=tab.buscarCasilla(col,fila); izq=cAuxi.getBordeIzq(); if (izq||i>=numero){ parar=true; } num--; if (num!=0){ calcularMovFichaLateral(cAuxi,num);} if (cAuxi.getOcupada()==false){ cAuxi.ponerIluminacion(cAuxi); cAuxi.addEventListener(MouseEvent.CLICK,moverFicha); } } } } public function calcularMovDcha(f:Ficha,numero:int){ var tab:DibujarTablero=DibujarTablero.getInstancia(); var lC:Array=tab.getCasillas(); var c:Casilla=f.getCasilla(); var i:int; var num:int=numero; var parar:Boolean=false; var cAuxi:Casilla; var fila:int=c.getFila(); var col:int=c.getColumna(); //Izquierda var dcha:Boolean=c.getBordeDcha(); if (dcha==false){ for (i=1;parar==false;i++){ col++; cAuxi=tab.buscarCasilla(col,fila); dcha=cAuxi.getBordeDcha(); if (dcha||i>=numero){ parar=true; } num--; if (num!=0){ calcularMovFichaLateral(cAuxi,num);} if (cAuxi.getOcupada()==false){ cAuxi.ponerIluminacion(cAuxi); cAuxi.addEventListener(MouseEvent.CLICK,moverFicha); } } } } public function calcularMovArriba(f:Ficha,numero:int){ var tab:DibujarTablero=DibujarTablero.getInstancia(); var lC:Array=tab.getCasillas(); var c:Casilla=f.getCasilla(); var i:int; var num:int=numero; var parar:Boolean=false; var cAuxi:Casilla; var fila:int=c.getFila(); var col:int=c.getColumna(); var arriba:Boolean=c.getBordeArriba(); if (arriba==false){ for (i=1;parar==false;i++){ fila--; cAuxi=tab.buscarCasilla(col,fila); arriba=cAuxi.getBordeArriba(); if (arriba||i>=numero){ parar=true; } num--; if (num!=0){ calcularMovFichaLateral(cAuxi,num);} if (cAuxi.getOcupada()==false){ cAuxi.ponerIluminacion(cAuxi); cAuxi.addEventListener(MouseEvent.CLICK,moverFicha); } } } } public function calcularMovAbajo(f:Ficha,numero:int){ var tab:DibujarTablero=DibujarTablero.getInstancia(); var lC:Array=tab.getCasillas(); var c:Casilla=f.getCasilla(); var i:int; var num:int=numero; var parar:Boolean=false; var cAuxi:Casilla; var fila:int=c.getFila(); var col:int=c.getColumna(); var abajo:Boolean=c.getBordeAbajo(); if (abajo==false){ for (i=1;parar==false;i++){ fila++; cAuxi=tab.buscarCasilla(col,fila); abajo=cAuxi.getBordeAbajo(); if (abajo||i>=numero){ parar=true; } num--; if (num!=0){ calcularMovFichaLateral(cAuxi,num);} if (cAuxi.getOcupada()==false){ cAuxi.ponerIluminacion(cAuxi); cAuxi.addEventListener(MouseEvent.CLICK,moverFicha); } } } } public function calcularMovFichaLateral(c:Casilla,num:int):void{ var tab:DibujarTablero=DibujarTablero.getInstancia(); var lC:Array=tab.getCasillas(); var i:int; var parar:Boolean=false; var cAuxi:Casilla; var fila:int=c.getFila(); var col:int=c.getColumna(); //Izquierda var izq:Boolean=c.getBordeIzq(); if (izq==false){ for (i=1;parar==false;i++){ col--; cAuxi=tab.buscarCasilla(col,fila); izq=cAuxi.getBordeIzq(); if (izq||i>=num){ parar=true; } if (cAuxi.getOcupada()==false){ cAuxi.ponerIluminacion(cAuxi); cAuxi.addEventListener(MouseEvent.CLICK,moverFicha); } } } //Derecha parar=false; col=c.getColumna(); var dcha:Boolean=c.getBordeDcha(); if (dcha==false){ for (i=1;parar==false;i++){ col++; cAuxi=tab.buscarCasilla(col,fila); dcha=cAuxi.getBordeDcha(); if (dcha||i>=num){ parar=true; } if (cAuxi.getOcupada()==false){ cAuxi.ponerIluminacion(cAuxi); cAuxi.addEventListener(MouseEvent.CLICK,moverFicha); } } } //Arriba parar=false; fila=c.getFila(); col=c.getColumna(); var arriba:Boolean=c.getBordeArriba(); if (arriba==false){ for (i=1;parar==false;i++){ fila--; cAuxi=tab.buscarCasilla(col,fila); arriba=cAuxi.getBordeArriba(); if (arriba||i>=num){ parar=true; } if (cAuxi.getOcupada()==false){ cAuxi.ponerIluminacion(cAuxi); cAuxi.addEventListener(MouseEvent.CLICK,moverFicha); } } } //Abajo parar=false; fila=c.getFila(); col=c.getColumna(); var abajo:Boolean=c.getBordeAbajo(); if (abajo==false){ for (i=1;parar==false;i++){ fila++; cAuxi=tab.buscarCasilla(col,fila); abajo=cAuxi.getBordeAbajo(); if (abajo||i>=num){ parar=true; } if (cAuxi.getOcupada()==false){ cAuxi.ponerIluminacion(cAuxi); cAuxi.addEventListener(MouseEvent.CLICK,moverFicha); }} } } public function moverFicha(event:MouseEvent){ var c:Casilla=event.target.parent; var cActual:Casilla=this.getCasilla(); if(cActual.getEntrada()==true){ salirEstancia(cActual); } cActual.setOcupada(false); c.setOcupada(true); this.setCasilla(c); var horiz:int=c.getHoriz(); var ver:int=c.getVer(); horiz=horiz+10; ver=ver+10; this.x=horiz; this.y=ver; entrarEstancia(c); }
No se como hacer para que una vez clickada una de las casillas, el resto de casillas iluminadas se "borre" del evento para que no se pueda clickar sobre ellas y la ficha se quede en la posicion en la que está.
Muchas gracias