/* * ipggbbbbf.java */ package student; import client.PlayerProtocol; import freedom.Field; import freedom.FreedomPlayer; import freedom.FreedomPlayerProtocol; import freedom.Table; import java.util.Random; /** * Klasa studenta koja sadrzi algoritme za igranje igre Freedom. * Nasledjuje od nadklase polje tabla koje predstavlja tablu igre. * Student treba da implementira metode postaviPocetnoStanjeIgre(), * birajNarednoPoljeZaIgru() i proizvoljno metod * protivnikOdigrao(Field field) kojom igra prosledjuje igracu * polje na kome je protivnik odigrao svoj prethodni potez. * Ime klase treba da bude broj indeksa studenta u formatu "ipggbbbbf" * gde su "ip" inicijali studenta, "gg" godina upisa, "bbbb" broj indeksa * i "f" da naznaci da je implementacija igre Freedom. * * @author Student */ public class ipggbbbbf extends FreedomPlayer { // protected Table tabla; nasledjeno iz FreedomPlayer /** * Studentovi objekti */ private int brPoteza; private int oppLastX, oppLastY; /** * Konstruktor studentove klase. */ public ipggbbbbf() { postaviPocetnoStanjeIgre(); } /** * Postavlja igru u pocetno stanje. Poziva se od strane servera svaki put * kada se zapocinje nova partija. * Unutar ove funkcije bi trebalo da se svi korisceni objekti postave u * stanje u kome bi trebali da se nalaze pre pocetka partije. */ @Override public void postaviPocetnoStanjeIgre() { tabla.reset(); brPoteza = 0; oppLastX = oppLastY = -1; } /** * Bira koordinate polja za naredni potez. * Indeksi polja su u opsegu od 0 do Table.DIMENSION-1. * U slucaju da je igrac crni i da zeli da propusti poslednji potez * igrac treba da prosledi objekat polja sa koordinatama {x,y}={-1,-1}. * Igranje na nepraznom polju ili polju sa koordinatama van opsega table * racuna se kao mana u algoritmu i tada igrac gubi partiju. * @return Polje sa koordinatama. */ @Override public Field birajNarednoPoljeZaIgru() { Random rnd = new Random(); int tempX, tempY; // propusta poslednji potez if(brPoteza == Table.DIMENSION*Table.DIMENSION - 1){ brPoteza++; return new Field(-1, -1); } if((oppLastX == -1 && oppLastY == -1) ||(tabla.getField(oppLastX - 1, oppLastY - 1) != Table.PRAZNO && tabla.getField(oppLastX, oppLastY - 1) != Table.PRAZNO && tabla.getField(oppLastX + 1, oppLastY - 1) != Table.PRAZNO && tabla.getField(oppLastX - 1, oppLastY) != Table.PRAZNO && tabla.getField(oppLastX + 1, oppLastY) != Table.PRAZNO && tabla.getField(oppLastX - 1, oppLastY + 1) != Table.PRAZNO && tabla.getField(oppLastX, oppLastY + 1) != Table.PRAZNO && tabla.getField(oppLastX + 1, oppLastY + 1) != Table.PRAZNO)){ // dobio slobodu tempX=rnd.nextInt(Table.DIMENSION); tempY=rnd.nextInt(Table.DIMENSION); if(tabla.getField(tempX, tempY) == Table.PRAZNO){ tabla.setField(tempX, tempY, 1 + brPoteza%2); brPoteza++; return new Field(tempX, tempY); } for(int i=0; i