Teoria dei Giochi

Dama Italiana

  MoveScheduler.java
  
Costruttori della classe   
Costruttore 
      
Metodi della classe  
add 
getMossePossibili 
       
       
      
       
            
Codice
 
            


import java.util.Arrays;
import java.util.Vector;


Indice

/**
  *	Classe per la gestione delle mosse che si possono eseguire
  */
public class MoveScheduler {

//	I) definizione dei campi della classe

	Vector[] sequenzePerCattura;				// struttura per la memorizzazione delle mosse


//	II) costruttore della classe

	 
	Indice
	/**
	  *	Costruttore a zero argomenti della classe. Inizializza la struttura dati.
	  */
	public MoveScheduler(){
		sequenzePerCattura=new Vector[13]; // 13 = 12 (numero massimo di prese) + la mossa semplice
		for(int i=0; i<13; i++)
			sequenzePerCattura[i]=new Vector();
	}

//	III) metodi della classe

//	A) metodo che permette di inserire una mossa all'interno della struttura di gestione della mossa
	 
	Indice
	
	/**
	  *	Metodo che inserisce una mossa all'interno della struttura di gestione della mossa
	  *	@param mossa coordinate che specificano la mossa
	  */
	public void add(InfoMossa mossa){
		sequenzePerCattura[mossa.getSequenza().length()-3].add(mossa); //-3 perche' la mossa semplice e' identificata da 3 caratteri
	}

//	B) Metodo che ritorna la lista di tutte e sole le mosse che possono essere eseguite da un utente, rispettando le regole
	 
	Indice

	/**
	  *	Metodo che analizza tutte le mosse salvate nella struttura e ritorna le mosse possibili
	  *	@return ritorna le mosse possibili
	  */
	public Vector> getMossePossibili(){

		int i;								// indice ove memorizzare la posizione di dimensionn maggiore della struttura che non risulta essere vuota

		InfoMossa[] tmpLista=new InfoMossa[1];				
		Vector> mossePossibili = new Vector>();

		// si scorre la struttura dati dalla fine, cercando la prima posizione non vuota
		for(i=12; i>=0 && sequenzePerCattura[i].size()==0 ; i--);

		// se la struttra e' tutta vuota, allora non ci sono mosse possibili da fare e si ritorna il vettore vuoto
		if(i==-1){ //non ci sono mosse possibili
			return  mossePossibili;
		}

		// altrimenti si salvano le mosse da ritornare
		tmpLista=new InfoMossa[sequenzePerCattura[i].size()];		// lista ausiliaria per le mosse
		sequenzePerCattura[i].toArray(tmpLista);
		Arrays.sort(tmpLista);						// si ordinano le mosse
		i=1;								// ora viene usato come contatore per scorrere la lista di mosse selezionate

		mossePossibili.add(tmpLista[0].getMossa());			// si inserisce la prima mossa nel vettore da ritornare

		// si scorrono salvano tutte le mosse che hanno etichetta uguale a quella della prima mossa.
		// si termina quando o si finiscono le mosse o si trova una mossa con etichetta diversa
		while(i