Ver Mensaje Individual
  #76 (permalink)  
Antiguo 28/12/2013, 13:48
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 7 meses
Puntos: 320
Respuesta: Propuesta para desafíos javascript 2014

Si tienes una sola fila, o una sola columna solo se puede ir para una lado, salvo que inicies en un extremo es imposible conseguir todos. si embargo ese caso particular es curioso, ya que ahi hay que elegir correctamente hacia que lado ir.

El codigo que puse tiene una falla, y es que hay dos casos particulares de tableros cuadrados que no resulve. aqui la vercion mejorada y que contempla esas posibilidades.

Código Javascript:
Ver original
  1. TRON.prototype.ia=function()
  2. {      
  3.     // Casos de tablero particulares.
  4.     if(this.mapa.length == 1)
  5.     {
  6.         if(this.jugador[1] > (this.mapa[0].length/2))
  7.             return DIRECCION.arriba;
  8.         else
  9.             return DIRECCION.abajo;
  10.     }
  11.     else if(this.mapa[0].length == 1)
  12.     {
  13.         if(this.jugador[0] > (this.mapa.length/2))
  14.             return DIRECCION.izquierda;
  15.         else
  16.             return DIRECCION.derecha;  
  17.     }
  18.     else
  19.     {      
  20.         // Casos especiales.
  21.         if  (
  22.                 (
  23.                     // Esta en la primer columna.
  24.                     (this.jugador[1] == 1)
  25.                     ||
  26.                     // Esta en la esquina superior derecha.
  27.                     (
  28.                         (((this.jugador[0]-2) >= 0 ? this.mapa[this.jugador[0]-2][this.jugador[1]] : 3) > 0)
  29.                         && (((this.jugador[0]+2) < this.mapa[0].length ? this.mapa[this.jugador[0]][this.jugador[1]+2] : 3) > 0)
  30.                         && (this.mapa[this.jugador[0]+1][this.jugador[1]+1] == 0)
  31.                     )
  32.                 )          
  33.                 // Y esta libre.
  34.                 && (this.mapa[this.jugador[0]-1][this.jugador[1]] == 0)
  35.             )
  36.             return DIRECCION.arriba;
  37.         else
  38.         {
  39.             if(this.mapa[this.jugador[0]][this.jugador[1]+1] == 0)
  40.                 return DIRECCION.derecha;
  41.             else if(this.mapa[this.jugador[0]+1][this.jugador[1]] == 0)
  42.                 return DIRECCION.abajo;
  43.             else if(this.mapa[this.jugador[0]-1][this.jugador[1]] == 0)
  44.                 return DIRECCION.arriba;
  45.             else
  46.                 return DIRECCION.izquierda;
  47.         }
  48.     }
  49. };
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios