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; }
/* * 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; }
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; } } }