Board.java
Implementazione della parte grafica
Costruttore
Metodo per la gestione del giocatore umano
mouseDown
Codice
import java.awt.*;
import java.util.*;
/**
* Definizione della classe board
*
*/
public class Board extends Canvas{
// I) definizione delle campi della classe
boolean incomplete = false; // flag che indica se la mossa e' incompleta
boolean highlight = false; // flag che indica se mossa e' stata iniziata
private int start_i,start_j,end_i,end_j; // coordinate di partenza e di arrivo
private int dimCasella; // dimensione della casella
private int dimPedina; // dimensione della pedina
private int offset; // offset
private int offsetDama; // offset per la dama
public Vector> mosseObbligate, mosseInizialiTurno; // struttura dati di gestion delle mosse
public int incompleteIndex;
Checkers game;
Image offImage;
Graphics offGraphics;
// II) definizione del costrurre della classe
/**
* Costruttore della classe
*/
Indice
Board (Checkers checkers){
game = checkers;
dimCasella=50; // dimensione di una casella
dimPedina=30; // dimensione di una pedina
offset=(dimCasella-dimPedina)/2; // inizializzazione offset
offsetDama=5; // inizializzazione del bordo della dama
incompleteIndex=0; // inizializzazione indice di controllo del numero di catture in una cattura multipla
mosseInizialiTurno = new Vector>(); // inizializzazione delle mosse iniziali
}
Indice
// III) definizione dei metodi della classe
// A) Metodo di gestione degli eventi sulla board
/**
* Metodo che gestisce gli eventi del giocatore umano che esegue le mosse spostando le pedine sulla dama
* @param evt evento registrato
* @param x coordinata x dove e' stato cliccato il mouse
* @param y coordinata y dove e' stato cliccato il mouse
*/
public boolean mouseDown(Event evt, int x, int y){
if(!game.giocoIniziato) // si controlla se il gioco e' iniziato, altrimenti si termina
return true;
// si impostano le variabili i, j che indicano le coordinate virtuali dove e' stato cliccato
int j = x / dimCasella;
int i = y / dimCasella;
// si controlla se le coordinate sono valide e si e' cliccato nella board, altrimenti si termina
if(!Move.inRange(i,j))
return true;
// si deve controllare in quale fase della mossa ci si trova:
// - se si sta scegliendo la pedina da muovere, e questa e' legale
if(!highlight || (highlight && (game.toMove == Checkers.WHITE && (game.position[i][j] == Checkers.WHITE || game.position[i][j] == Checkers.WKING)
|| game.toMove == Checkers.BLACK && (game.position[i][j] == Checkers.BLACK || game.position[i][j] == Checkers.BKING)) && incompleteIndex==0)){
// inizializzazione struttura dati per la copia delle mosse possibili
mosseObbligate=new Vector>();
// copia delle mosse iniziali
for(int x1=0; x1(mosseInizialiTurno.elementAt(x1).size()));
for(int x2=0; x2 0) // se la mossa e' permessa
g.setColor(Color.orange); // coloro di arancione
else // altrimenti
g.setColor(Color.red); // coloro di rosso
g.fillRect(start_j*dimCasella,start_i*dimCasella,dimCasella,dimCasella); // ridisegno la casella
}
// B) Disegno il pezzo della damiera, contenuto nella corrispondente board virtuale
switch (game.position[i][j])
{
case Checkers.WHITE: // se c'e' una pedina bianca:
g.setColor(Color.white); // - si setta il colore di bianco
g.fillOval(j*dimCasella+offset,i*dimCasella+offset,dimPedina,dimPedina); // - si crea il cerchio che rappresenta la pedina bianca
break;
case Checkers.BLACK: // se c'e' una pedina nera
g.setColor(Color.black); // - si setta il colore di nero
g.fillOval(j*dimCasella+offset,i*dimCasella+offset,dimPedina,dimPedina); // - si crea il cerchio che rappresenta la pedina nera
break;
case Checkers.WKING: // se c'e' una dama bianca
g.setColor(Color.white); // - si setta il colore bianco
g.fillOval(j*dimCasella+offset,i*dimCasella+offset,dimPedina,dimPedina); // - si crea il cerchio piu' grande della dama bianca
g.setColor(Color.red); // - si setta il colore di rosso
g.fillOval(j*dimCasella+offset+offsetDama,i*dimCasella+offset+offsetDama,dimPedina-offsetDama*2,dimPedina-offsetDama*2); // - si crea il cerchio piccolo rosso per creare la dama bianca
//g.setFont(new Font("Times New Roman",Font.BOLD, 20));
g.setColor(Color.white); // - si setta il colore bianco
g.drawString(new String("*"),j*dimCasella+offset+dimPedina/2,i*dimCasella+offset+dimPedina/2); // - si disegna la stellina
break;
case Checkers.BKING: // se c'e' una dama nera
g.setColor(Color.black); // - si setta il colore di nero
g.fillOval(j*dimCasella+offset,i*dimCasella+offset,dimPedina,dimPedina); // - si crea il cerchio piu' grande della dama nera
g.setColor(Color.yellow); // - si setta il colore giallo
g.fillOval(j*dimCasella+offset+offsetDama,i*dimCasella+offset+offsetDama,dimPedina-offsetDama*2,dimPedina-offsetDama*2); // - si crea il cerchio piccolo giallo per creare la dama nera
g.setColor(Color.white);
g.drawString(new String("*"),j*dimCasella+offset+dimPedina/2,i*dimCasella+offset+dimPedina/2); // - si crea disegna la stellina
} // switch
g.setColor(Color.red);
g.drawString(new String(""+i),j*dimCasella,i*dimCasella+10);
g.drawString(new String(","+j),j*dimCasella+5,i*dimCasella+10);
// se il gioco non e' ancora iniziato, si visualizza la scritta di inizio partita
if(!game.giocoIniziato){
Font f=g.getFont();
g.setFont(new Font("Arial",Font.BOLD,40)); // si setta il font per la scritta
g.drawString(new String("PREMI NEW GAME"),4*dimCasella-180,4*dimCasella+10); // si disegna la scritta
g.setFont(f);
}
} // for
} // paint()
// D) Metodo per aggiornare la grafica
/**
* overriden so as to avoid flicker
*/
public void update(Graphics g)
{
paint(g);
} // update()
} // Board
|