Ci sono diversi modi per affrontare la rotazione di una scacchiera. Il modo più semplice per implementarlo è lo stesso modo in cui ci pensiamo. Crei una griglia di 8x8 e ogni posizione sulla griglia potrebbe avere o meno un pezzo degli scacchi in cima. Per rispecchiare quella griglia, devi semplicemente creare un'altra scacchiera e posizionare ogni pezzo nella vecchia scacchiera nella sua posizione speculare.
Questo, tuttavia, può essere semplificato rimuovendo completamente la griglia. La griglia è arbitraria e serve principalmente a capire meglio. Quindi è possibile utilizzare un oggetto scacchiera per emulare tutte le posizioni sulla scacchiera, ma le sole informazioni che effettivamente richiederebbero sono i tipi e le posizioni degli stessi pezzi degli scacchi.
Lo stesso pezzo degli scacchi può essere estratto in modo da ottenere informazioni sul tipo e sulla posizione. Se non hai bisogno di sapere come si muove, allora l'unica ragione per cui il tipo sarebbe utile è che tu ti confronti con gli altri pezzi degli scacchi e assicurati che, a parte la posizione, i tipi siano gli stessi per dire che è lo stesso.
La scacchiera può specchiarsi semplicemente restituendo un'altra istanza della scacchiera con le posizioni modificate (cioè per ogni coordinata x di un pezzo degli scacchi, pezzo.x = 9 - pezzo.x).
A quel punto, il problema diventa semplicemente iterando i pezzi degli scacchi di una scacchiera e di un'altra e verificando che tutte le posizioni e i tipi siano uguali (puoi ottimizzare controllando prima il numero di pezzi).
Nota che se non hai bisogno di confrontare le versioni speculari delle scacchiere, puoi ottimizzare ulteriormente usando solo un'istanza e calcolando dove un pezzo degli scacchi, se fosse specchiato, sarebbe relativo a quel punto corrente e poi controllerà per esistenza e tipo di quel pezzo.
Spero che questo aiuti. Penso che sia importante presentare un'interfaccia facile da comprendere e lasciare che l'implementazione sottostante ottimizzi il modo in cui i dati vengono rappresentati e / o utilizzati.