Seperti yang ditunjukkan orang lain, membuat ketentuan lebih ringkas tidak akan mempercepat kompilasi atau eksekusi, dan juga tidak membantu keterbacaan.
Ini dapat membantu membuat program Anda lebih fleksibel, jika nanti Anda memutuskan bahwa Anda menginginkan versi balita dari permainan pada papan 6 x 6, atau versi lanjutan (yang dapat Anda mainkan sepanjang malam) pada papan 40 x 50 .
Jadi saya akan mengkodekannya sebagai berikut:
// 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
}
}
Ya, ini bertele-tele, tetapi menjelaskan dengan tepat apa yang terjadi di papan permainan.
Jika saya mengembangkan game ini untuk ditampilkan di ponsel atau tablet, saya akan membuat variabel BARIS dan KOLOM sebagai ganti konstanta, sehingga dapat disetel secara dinamis (di awal game) agar sesuai dengan ukuran dan orientasi layar.
Saya juga akan mengizinkan orientasi layar diubah kapan saja, di tengah permainan - yang perlu Anda lakukan hanyalah mengganti nilai ROWS dan COLUMNS, sambil meninggalkan yang lainnya (nomor kuadrat saat ini yang digunakan setiap pemain, dan kotak awal / akhir semua ular dan tangga) tidak berubah. Maka Anda 'hanya' harus menggambar papan dengan baik, dan menulis kode untuk animasi Anda (saya berasumsi bahwa itu adalah tujuan if
pernyataan Anda ) ...