Package prop.hex.domini.models

Examples of prop.hex.domini.models.Casella


  {
    // En la primera jugada no es fa minimax, en lloc d'això, es mira en la llista de contramoviments o,
    // en el seu defecte, es retorna la casella més central possible.
    if ( partida.getTornsJugats() <= 1 )
    {
      Casella obertura = obertura();
      if ( obertura != null )
      {
        return obertura;
      }
      else
      {
        return posicioCentral();
      }
    }

    //Mirem la distància de l'enemic i disposem la tàctica adequada amb tactia_agresiva.
    int distancia_enemic;
    if ( fitxa == EstatCasella.JUGADOR_A )
    {
      CamiMinim cami_minim_B = new CamiMinim( partida.getTauler(), EstatCasella.JUGADOR_B );
      distancia_enemic = cami_minim_B.evalua();
    }
    else
    {
      CamiMinim cami_minim_A = new CamiMinim( partida.getTauler(), EstatCasella.JUGADOR_A );
      distancia_enemic = cami_minim_A.evalua();
    }
    if ( distancia_enemic <= 4 )
    {
      tactica_agresiva = true;
    }
    else
    {
      tactica_agresiva = false;
    }

    //Cridem al minimax.
    int[] casella = super.minimax( partida, fitxa, profunditat_maxima );

    //Retornem la casella.
    if ( casella != null )
    {
      return new Casella( casella[0], casella[1] );
    }
    else
    {
      return null;
    }
View Full Code Here


    for ( int fila = 0; fila < tauler.getMida(); fila++ )
    {
      for ( int columna = 0; columna < tauler.getMida(); columna++ )
      {
        Casella casella = new Casella( fila, columna );

        if ( tauler.esMovimentValid( fitxa_jugador, casella ) )
        {
          int potencial_moviment = potencials[fila][columna];
          if ( potencial_moviment == 0 )
View Full Code Here

   */
  public Casella obteMoviment( EstatCasella fitxa )
  {
    if ( partida.getTornsJugats() <= 1 )
    {
      Casella obertura = obertura();
      if ( obertura != null )
      {
        return obertura;
      }
    }
View Full Code Here

      for ( int columna = 0; columna < tauler.getMida() / 2; columna++ )
      {
        if ( tauler.esMovimentValid( EstatCasella.JUGADOR_A, tauler.getMida() / 2 + fila,
            tauler.getMida() / 2 + columna ) )
        {
          return new Casella( tauler.getMida() / 2 + fila, tauler.getMida() / 2 + columna );
        }
        if ( tauler.esMovimentValid( EstatCasella.JUGADOR_A, tauler.getMida() / 2 - fila,
            tauler.getMida() / 2 - columna ) )
        {
          return new Casella( tauler.getMida() / 2 - fila, tauler.getMida() / 2 - fila );
        }
      }
    }

    //si el tauler no esta ple no hauriem d'arribar mai aqui.
    return new Casella( 0, 0 );
  }
View Full Code Here

   */
  protected Casella obertura()
  {
    if ( partida.getTornsJugats() == 0 )
    {
      return new Casella( 4, 2 );
    }

    Casella fitxa_posada = null;

    // Busquem quina és la fitxa que ha posat l'altre jugador
    int fila = 0;
    while ( fitxa_posada == null && fila < partida.getTauler().getMida() )
    {
      int columna = 0;
      while ( fitxa_posada == null && columna < partida.getTauler().getMida() )
      {
        if ( partida.getTauler().getEstatCasella( fila, columna ) != EstatCasella.BUIDA )
        {
          fitxa_posada = new Casella( fila, columna );
        }

        columna++;
      }

      fila++;
    }

    if ( fitxa_posada != null )
    {
      if ( moviments_obertura[fitxa_posada.getFila()][fitxa_posada.getColumna()] != null )
      {
        return moviments_obertura[fitxa_posada.getFila()][fitxa_posada.getColumna()];
      }
    }

    return null;
  }
View Full Code Here

    List<Casella> pendents = new LinkedList<Casella>();
    pendents.add( inici );

    while ( !pendents.isEmpty() )     //mentres hi hagi caselles a la llista, seguir iterant.
    {
      Casella casella = pendents.get( 0 );     //obtenim el vei

      pendents.remove( casella );              //el treiem de pendents
      grup.add( casella );                     //l'afegim al grup.

      //Comprovem si esta a la cantonada, primer pel jugador A i despres pel B i si ho està mirem totes les cantonades.
      if ( jo == EstatCasella.JUGADOR_A &&
           ( casella.getColumna() == 0 || casella.getColumna() == tauler.getMida() - 1 ) )
      {
        for ( int i = 0; i < tauler.getMida(); i++ )
        {
          Casella casellaLateral = new Casella( i, casella.getColumna() );
          if ( esPotAfegir( casellaLateral, pendents, jo ) )
          {
            pendents.add( casellaLateral );
          }
        }
      }
      else if ( jo == EstatCasella.JUGADOR_B &&
                ( casella.getFila() == 0 || casella.getFila() == tauler.getMida() - 1 ) )
      {
        for ( int i = 0; i < tauler.getMida(); i++ )
        {
          Casella casellaLateral = new Casella( casella.getFila(), i );
          if ( esPotAfegir( casellaLateral, pendents, jo ) )
          {
            pendents.add( casellaLateral );
          }
        }
      }

      List<Casella> veins = tauler.getVeins( casella ); //obtenim els veins.
      for ( int i = 0; i < veins.size(); i++ )
      {
        Casella vei = veins.get( i );
        if ( esPotAfegir( vei, pendents, jo ) )
        {
          //si te el mateix estat i no està afegida al grup, la fiquem a pendents.
          pendents.add( vei );
        }
View Full Code Here

          //Iterem per totes les de la mateixa columna i les afegim si es pot.
          for ( int i = 0; i < tauler.getMida(); i++ )
          {
            if ( tauler.getEstatCasella( i, casella.getColumna() ) == EstatCasella.BUIDA )
            {
              veins.afegirCasella( new Casella( i, casella.getColumna() ) );
            }
          }
        }
      }
      //Fem el mateix pel jugador B
      else if ( jo == EstatCasella.JUGADOR_B )
      {
        if ( casella.getFila() == 0 || casella.getFila() == tauler.getMida() - 1 )
        {
          for ( int j = 0; j < tauler.getMida(); j++ )
          {
            if ( tauler.getEstatCasella( casella.getFila(), j ) == EstatCasella.BUIDA )
            {
              veins.afegirCasella( new Casella( casella.getFila(), j ) );
            }
          }
        }
      }
    }
View Full Code Here

    //Afegim a pendents totes les caselles buides del tauler no checkejades (no estan a la cantonada).
    for ( int i = 0; i < tauler.getMida(); i++ )
    {
      for ( int j = 0; j < tauler.getMida(); j++ )
      {
        Casella actual = new Casella( i, j );
        //Si la distancia es infinit (casella no chequejada) i la casella esta buida, l'afegim a pendents.
        if ( distancia[i][j] >= infinit && tauler.esMovimentValid( jugador, actual ) )
        {
          pendents.add( actual );
        }
      }
    }

    HashMap<Casella, ArrayList<Casella>> meta_veins = new HashMap<Casella, ArrayList<Casella>>();
    for ( Casella actual : pendents )
    {
      ArrayList<Casella> veins = getVeins( actual );
      meta_veins.put( actual, veins );
    }

    //Iterem pendents si el contador es menor a un maxim establert.
    while ( contador < maxim )
    {
      boolean modificat = false;
      contador++;

      for ( Casella actual : pendents )
      {

        int min_u = infinit;
        int min_dos = infinit;
        ArrayList<Casella> veins = meta_veins.get( actual );
        for ( Casella vei : veins )
        {
          if ( distancia[vei.getFila()][vei.getColumna()] <= min_u )
          {
            min_dos = min_u;
            min_u = distancia[vei.getFila()][vei.getColumna()];
          }
          else if ( distancia[vei.getFila()][vei.getColumna()] < min_dos )
          {
            min_dos = distancia[vei.getFila()][vei.getColumna()];
          }
        }

        if ( min_dos < infinit )
        {
          distancia[actual.getFila()][actual.getColumna()] = min_dos + 1;
          modificat = true;
        }
      }

      //si en una iteració no es modifica cap valor, ja hem acabat.
View Full Code Here

        distancies_a[fila][0] = 1;
      }
      else if ( tauler.getEstatCasella( fila, 0 ) == jugador )
      {
        GrupCaselles grup = new GrupCaselles( tauler );
        grup.estendre( new Casella( fila, 0 ) );
        ArrayList<Casella> grup_veins = grup.getVeins().getGrup();

        for ( Casella vei : grup_veins )
        {
          distancies_a[vei.getFila()][vei.getColumna()] = 1;
        }
      }

      if ( tauler.getEstatCasella( fila, tauler.getMida() - 1 ) == EstatCasella.BUIDA )
      {
        distancies_b[fila][tauler.getMida() - 1] = 1;
      }
      else if ( tauler.getEstatCasella( fila, tauler.getMida() - 1 ) == jugador )
      {
        GrupCaselles grup = new GrupCaselles( tauler );
        grup.estendre( new Casella( fila, tauler.getMida() - 1 ) );
        ArrayList<Casella> grup_veins = grup.getVeins().getGrup();

        for ( Casella vei : grup_veins )
        {
          distancies_b[vei.getFila()][vei.getColumna()] = 1;
View Full Code Here

        distancies_a[0][columna] = 1;
      }
      else if ( tauler.getEstatCasella( 0, columna ) == jugador )
      {
        GrupCaselles grup = new GrupCaselles( tauler );
        grup.estendre( new Casella( 0, columna ) );
        ArrayList<Casella> grup_veins = grup.getVeins().getGrup();

        for ( Casella vei : grup_veins )
        {
          distancies_a[vei.getFila()][vei.getColumna()] = 1;
        }
      }
      if ( tauler.getEstatCasella( tauler.getMida() - 1, columna ) == EstatCasella.BUIDA )
      {
        distancies_b[tauler.getMida() - 1][columna] = 1;
      }
      else if ( tauler.getEstatCasella( tauler.getMida() - 1, columna ) == jugador )
      {
        GrupCaselles grup = new GrupCaselles( tauler );
        grup.estendre( new Casella( tauler.getMida() - 1, columna ) );
        ArrayList<Casella> grup_veins = grup.getVeins().getGrup();

        for ( Casella vei : grup_veins )
        {
          distancies_b[vei.getFila()][vei.getColumna()] = 1;
View Full Code Here

TOP

Related Classes of prop.hex.domini.models.Casella

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.