Comme d'autres l'ont souligné, rendre les conditions plus concises n'accélérera pas la compilation ou l'exécution, et cela n'aide pas nécessairement non plus la lisibilité.
Cela peut aider à rendre votre programme plus flexible, au cas où vous décideriez plus tard que vous voulez une version du jeu pour tout-petit sur un plateau 6 x 6, ou une version avancée (à laquelle vous pouvez jouer toute la nuit) sur un plateau 40 x 50 .
Je le coderais donc comme suit:
// 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
}
}
Oui, c'est verbeux, mais cela montre exactement ce qui se passe sur le plateau de jeu.
Si je développais ce jeu pour l'afficher sur un téléphone ou une tablette, je créerais des variables ROWS et COLUMNS au lieu de constantes, afin qu'elles puissent être définies dynamiquement (au début d'un jeu) pour correspondre à la taille et à l'orientation de l'écran.
J'autoriserais également l'orientation de l'écran à changer à tout moment, en milieu de partie - tout ce que vous avez à faire est de changer les valeurs de ROWS et COLUMNS, tout en laissant tout le reste (le numéro de carré actuel sur lequel chaque joueur est, et le carrés de début / fin de tous les serpents et échelles) inchangés. Ensuite, il vous suffit de bien dessiner le tableau et d'écrire du code pour vos animations (je suppose que c'était le but de vos if
déclarations) ...