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; 
   } 
}
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;}
}
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 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";
    }
}
Le classi degli altri pezzi hanno la stessa struttura del Pedone.


Grazie a chi vorrà rispondermi.

-LiLy-