Ho esaminato il tuo codice e non mi sembra che possa essere semplificato nel senso di ridurre il numero totale di righe. Potrebbe essere reso meno dettagliato se ti liberassi di alcune delle parentesi graffe inutili e fastidiose, ma suppongo che se ti è piaciuta l'idea l'avresti già fatta:
if (arrayX == 0)
{
if (board.GetBoard(arrayX + 1, arrayY - 1).Piece == null)
return true;
}
else if (arrayX == 7)
{
if (board.GetBoard(arrayX - 1, arrayY - 1).Piece == null)
return true;
}
Tuttavia, c'è una cosa che potresti provare a vedere se semplificherebbe il tuo codice: definisci un struct
immutabile per contenere un punto.
struct Point
{
readonly int x; //these are 32-bit, so the entire struct will fit inside a
readonly int y; // machine word in a 64-bit architecture.
Point( int x, int y )
{
Assert( x >= 0 && x < 7 );
Assert( y >= 0 && y < 7 );
this.x = x;
this.y = y;
}
Point left { get { Assert( x >= 0 ); return new Point( x - 1, y ); } }
Point right { get { Assert( x <= 7 ); return new Point( x + 1, y ); } }
bool isLeftmost { get { return x == 0; } }
bool isRightmost { get { return x == 7; } }
...
}
quindi, sarai in grado di aggiungere cose interessanti alla tua struttura, come questa:
IEnumerable<Point> EnumerateSurrounding()
{
for( int dx = -1; dx <= 1; dx++ )
{
for( int dy = -1; dy <= 1; dy++ )
{
int xx = x + dx;
int yy = y + dy;
if( xx < 0 || xx > 7 )
continue;
if( yy < 0 || yy > 7 )
continue;
if( xx == 0 && yy == 0 )
continue;
yield return new Point( xx, xy );
}
}
}
Quindi, potrai visitare tutte le celle che circondano una determinata cella in questo modo:
foreach( Point p in mypoint.EnumerateSurrounding() )
{
//do something with p here
}
Dichiarazione di non responsabilità: ho appena digitato tutto il codice sopra, quindi è destinato ad avere errori di sintassi e forse anche errori logici. Non fidarti ciecamente, leggi attentamente e usa il tuo giudizio.