コード例 #1
0
  private int ocenitvenaFunkcijaIgralec(int igralec) {
    int[][] p = Igra.kopiraj(polje);
    int ocena = 0;

    int vrstica = ocenitvenaFunkcijaVrstica(igralec, p);
    if (vrstica == Igra.INF) return vrstica;

    int stolpec = ocenitvenaFunkcijaStolpec(igralec, p);
    if (stolpec == Igra.INF) return stolpec;

    int diagonala1 = ocenitvenaFunkcijaDiagonala1(igralec, p);
    if (diagonala1 == Igra.INF) return diagonala1;

    int diagonala2 = ocenitvenaFunkcijaDiagonala2(igralec, p);
    if (diagonala2 == Igra.INF) return diagonala2;

    if (izpisi) {
      System.out.println();
      System.out.println("vrstica " + vrstica);
      System.out.println("stolpec " + stolpec);
      System.out.println("diagonala1 " + diagonala1);
      System.out.println("diagonala2 " + diagonala2);
    }

    ocena += vrstica;
    ocena += stolpec;
    ocena += diagonala1;
    ocena += diagonala2;

    return ocena;
  }
コード例 #2
0
  /*
   * Ocenitvena funkcija za izbranega igralca
   *
   * Vrstice, stolpci, diagonale
   */
  public int oceni(int igralec) {
    // igralec na potezi
    int max = ocenitvenaFunkcijaIgralec(igralec);
    if (max == Igra.INF) return Igra.INF;

    // nasprotnik
    int min = ocenitvenaFunkcijaIgralec(Igra.nasprotnik(igralec));
    if (max == Igra.INF) return -Igra.INF;

    int ocena = max - min;

    /*System.out.println();
    System.out.println("******ZAČETEK");
    Igra.izpisiPolje(polje);
    System.out.println("Max " + max);
    System.out.println("Min " + min);
    System.out.println("******KONEC");*/

    return ocena;
  }
コード例 #3
0
  public void run() {
    Igra igra = new Igra();
    igra.MAX = Igra.KROŽEC;
    igra.MIN = Igra.KRIŽEC;

    int igralec = Igra.KROŽEC;
    int prvi = 1; // 1 == človek

    for (int i = 0; ; i++) {

      // Človek
      if (i > 0 || (i == 0 && prvi == 1)) {
        setText("Si na potezi");

        while (main.pozicijaStolpec == -1) {
          try {
            Thread.sleep(100);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
        }

        igra.oznaci(main.pozicijaVrstica, main.pozicijaStolpec, Igra.KRIŽEC);

        if (main.pozicijaVrstica != -1) {
          Message msg2 = new Message();
          msg2.obj = new Element(main.pozicijaVrstica, main.pozicijaStolpec, Igra.KRIŽEC);
          mHandler.sendMessage(msg2);
        }

        main.pozicijaStolpec = -1;
        igra.izpisiPolje();

        if (igra.neodloceno(igra.polje)) {
          setText("Neodločeno");
          return;
        } else if (igra.oceni(igra.polje, Igra.KRIŽEC) == Igra.INF) {
          setText("Zmagal si");
          return;
        }
      }

      // Računalnik
      setText("Na potezi je računalnik");
      int globina = 7;
      Poteza p = igra.negamaksAlfaBeta2(igra.polje, igralec, globina, -igra.INF, igra.INF);
      igra.oznaci(p.poteza[0], p.poteza[1], igralec);
      Message msg = new Message();
      msg.obj = new Element(p.poteza[0], p.poteza[1], igralec);
      mHandler.sendMessage(msg);
      System.out.println(
          igra.igralecStr(igralec)
              + ", vrstica: "
              + (p.poteza[0] + 1)
              + ", stolpec: "
              + (p.poteza[1] + 1));
      igra.izpisiPolje();
      int ocena = igra.oceni(igra.polje, igralec);
      if (igra.neodloceno(igra.polje)) {
        setText("Neodločeno");
        return;
      } else if (ocena == Igra.INF) {
        setText("Zmagal je računalnik");
        return;
      }
    }
  }