Como han señalado otros, hacer que las condiciones sean más concisas no acelerará la compilación o la ejecución, y tampoco ayuda necesariamente con la legibilidad.
Puede ayudar a hacer su programa más flexible, en caso de que más tarde decida que quiere una versión del juego para niños pequeños en un tablero de 6 x 6, o una versión avanzada (que puede jugar toda la noche) en un tablero de 40 x 50 .
Entonces lo codificaría de la siguiente manera:
// What is the size of the game board?
#define ROWS 10
#define COLUMNS 10
// The numbers of the squares go from 1 (bottom-left) to (ROWS * COLUMNS)
// (top-left if ROWS is even, or top-right if ROWS is odd)
#define firstSquare 1
#define lastSquare (ROWS * COLUMNS)
// We haven't started until we roll the die and move onto the first square,
// so there is an imaginary 'square zero'
#define notStarted(num) (num == 0)
// and we only win when we land exactly on the last square
#define finished(num) (num == lastSquare)
#define overShot(num) (num > lastSquare)
// We will number our rows from 1 to ROWS, and our columns from 1 to COLUMNS
// (apologies to C fanatics who believe the world should be zero-based, which would
// have simplified these expressions)
#define getRow(num) (((num - 1) / COLUMNS) + 1)
#define getCol(num) (((num - 1) % COLUMNS) + 1)
// What direction are we moving in?
// On rows 1, 3, 5, etc. we go from left to right
#define isLeftToRightRow(num) ((getRow(num) % 2) == 1)
// On rows 2, 4, 6, etc. we go from right to left
#define isRightToLeftRow(num) ((getRow(num) % 2) == 0)
// Are we on the last square in the row?
#define isLastInRow(num) (getCol(num) == COLUMNS)
// And finally we can get onto the code
if (notStarted(mySquare))
{
// Some code for when we haven't got our piece on the board yet
}
else
{
if (isLastInRow(mySquare))
{
// Some code for when we're on the last square in a row
}
if (isRightToLeftRow(mySquare))
{
// Some code for when we're travelling from right to left
}
else
{
// Some code for when we're travelling from left to right
}
}
Sí, es detallado, pero deja claro exactamente lo que está sucediendo en el tablero de juego.
Si estuviera desarrollando este juego para mostrarlo en un teléfono o tableta, haría variables FILAS y COLUMNAS en lugar de constantes, para que puedan configurarse dinámicamente (al comienzo de un juego) para que coincidan con el tamaño y la orientación de la pantalla.
También permitiría que la orientación de la pantalla se cambiara en cualquier momento, a mitad del juego; todo lo que necesitas hacer es cambiar los valores de FILAS y COLUMNAS, dejando todo lo demás (el número de casilla actual en el que está cada jugador y el cuadrados de inicio / final de todas las serpientes y escaleras) sin cambios. Luego, 'solo' tiene que dibujar bien el tablero y escribir código para sus animaciones (supongo que ese era el propósito de sus if
declaraciones) ...