Ciao a tutti gli utenti del forum
Vi chiedo aiuto (in maniera quasi disperata) riguardo ad un progetto Java che sto sviluppando. Questo consiste nell'implementare una scacchiera e verificare la correttezza delle mosse che i pezzi possono eseguire, una sorta di chess tracking.
Il progetto non prevede interfacce grafiche.
Ho pensato di suddividere in questo modo il progetto:
- La creazione di una classe Scacchiera, in cui vengono creati i pezzi, la scacchiera ed eseguite le mosse;
- una classe Pezzo che si occupa delle specifiche generali del Pezzo: colore, metodo per la visualizzazione e riferimento alla scacchiera
- i vari pezzi saranno sottoclassi della classe Pezzo.
- una classe Cella, che rappresenta l'unità base della scacchiera: ciascuna avrà le info relativa e riga, colonna e colore.
Il mio problema è questo:
appurato che la Scacchiera deve essere una matrice 8*8, non riesco a capire se la scelta giusta sia creare una matrice di Pezzi o di Celle.
Mi spiego meglio: finora ho creato una matrice di Celle, ma il mio problema fondamentale è mettere un Pezzo DENTRO ad una cella.
in pratica non riesco a creare una comunicazione Cella-Pezzo e sono pressoché bloccata. Provo a farlo quando creo ogni singolo Pezzo, ma alla stampa risulta un diastro.
Ho visto che fra i prototipi dei metodi da implementare c'è public Pezzo [][] getMatrice()..quindi devo implementare una matrice di Pezzi?
Non è logicamente più corretto implementare una matrice di Celle?
Non riesco a capire davvero come fare a memorizzare i pezzi nelle celle, visto che non sono gerarchizzate.
Riporto alcune parti del codice:
codice:class Scacchiera import java.util.*; import java.lang.*; import java.awt.*; public class Scacchiera { // quando creo la Scacchiera, creo anche i Pezzi private Pezzo [] pB; // vettore di Pezzi Bianchi private Pezzo [] pN; // vettore di Pezzi Neri private Cella [][] c; private int righe; private int colonne; // i colonna // j riga public Scacchiera (int H, int V) { // if ( V != 8 || H != 8) throws Eccezione int turno = 1; righe = H; colonne = V; c = new Cella[V][H]; //quando creo la scacchiera, creo anche i pezzi pB= new Pezzo[16]; pN= new Pezzo[16]; for(int j=0;j<8;j++) for(int i=0;i<8;i++) {c[i][j]=new Cella (i,j); //creo una matrice di Celle System.out.println(c[i][j]); } } public void iniziaPartita () { System.out.println("Sono qui\n"); // creazione pedoni bianchi: for(int i=0;i<8;i++) { // p.settaPosi(p,i,1); pB[i]= new Pedone(1,c[i][1],pN); System.out.println("Pedone BIANCO creato\n"); } //creazione d. pezzi bianchi prima fila pB[8]= new Torre (1,c[0][0]); pB[9]= new Torre (1,c[7][0]); pB[10]= new Cavallo (1,c[1][0]); pB[11]= new Cavallo (1,c[6][0]); pB[12]= new Alfiere (1,c[2][0]); pB[13]= new Alfiere (1,c[5][0]); pB[14]= new Regina (1,c[3][0]); pB[15]= new Re (1,c[4][0],pN,pB); } public Pezzo getPezzo(Cella cel) { int i = cel.getRiga(); int j = cel.getColonna(); return cel; //CHIARAMENTE NON FUNZIONA, COME FARE? } public Pezzo [][] getMatrice() { return c; // come faccio a restituire una matrice di Pezzi? } public String toString() { String stampa = ""; System.out.println("Righe"+righe+"\nColonne: "+colonne); for (int j = 0; j < righe; j++) { for (int i = 0; i < colonne; i++) {stampa = stampa + c[i][j]; System.out.println(c[i][j]); } stampa = stampa + "\n"; } return stampa; } }la classe Cella ha un costruttore che prendi in input riga e colonna e le memorizza, ed ha un metodo getRiga e getColonna;codice:class Pezzo import java.util.*; import java.lang.*; import java.awt.*; abstract class Pezzo{ protected int or; protected boolean promosso=false; //x arrivo in fondo pedone protected boolean spostato=false; //viene introdotto per re e torre -> arrocco protected boolean mangiato=false; protected String nome; protected int colore; //1 bianco 0 nero: si usa la stessa convenzione delle caselle protected int valore; protected Cella p; //passo anche pos che è la posizione protetta di ogni pezzo, verrà ereditata dalle sottoclassi public Pezzo(String n,int cp, int v, Cella pos ){ nome=n; colore=cp; valore=v; p=pos; p.occupata=cp; } public Cella getPos(){ return p; } public void setPos(Cella pos){ p.occupata=-1; p=pos; p.occupata=colore; } public void setPos(Cella pos,int i, int j){ p.occupata=-1; p=pos; p.occupata=colore; } public boolean isPermit(int x,int y,Cella pos[][]){ if(x<0 || x>7) return false; if(y<0 || y>7) return false; if(pos[x][y].occupata==colore) return false; return true; } public String toString() {String stampa=""; return stampa;} }
Le classi degli altri pezzi hanno la stessa struttura del Pedone.codice:class Pedone import java.util.*; import java.lang.*; import java.awt.*; public class Pedone extends Pezzo{ private Pezzo pA[]; public Pedone (int cp, Cella p, Pezzo [] pAvv){ super("pedone", cp, 1, p ); pA = pAvv; } //mosse della torre // tostring della torre public String toString () {String stampa = ""; if (colore == 1) return "p"; else return "P"; } }
Grazie a chi vorrà rispondermi.
-LiLy-

Rispondi quotando