Như những người khác đã chỉ ra, việc làm cho các điều kiện ngắn gọn hơn sẽ không làm tăng tốc độ biên dịch hoặc thực thi và nó cũng không nhất thiết giúp ích cho việc dễ đọc.
Nó có thể giúp làm cho chương trình của bạn linh hoạt hơn, trong trường hợp sau này bạn quyết định rằng bạn muốn phiên bản trò chơi dành cho trẻ mới biết đi trên bảng 6 x 6 hoặc phiên bản nâng cao (bạn có thể chơi suốt đêm) trên bảng 40 x 50 .
Vì vậy, tôi sẽ viết mã nó như sau:
// 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
}
}
Vâng, nó dài dòng, nhưng nó làm cho nó rõ ràng chính xác những gì đang xảy ra trên bảng trò chơi.
Nếu tôi đang phát triển trò chơi này để hiển thị trên điện thoại hoặc máy tính bảng, tôi sẽ tạo các biến ROWS và COLUMNS thay vì các hằng số để chúng có thể được đặt động (khi bắt đầu trò chơi) để phù hợp với kích thước và hướng màn hình.
Tôi cũng sẽ cho phép thay đổi hướng màn hình bất kỳ lúc nào, giữa trận đấu - tất cả những gì bạn cần làm là chuyển đổi các giá trị của ROWS và COLUMNS, trong khi để lại mọi thứ khác (số bình phương hiện tại mà mỗi người chơi đang sử dụng và hình vuông bắt đầu / kết thúc của tất cả các con rắn và thang) không thay đổi. Sau đó, bạn 'chỉ' phải vẽ bảng thật đẹp và viết mã cho các hoạt ảnh của bạn (tôi cho rằng đó là mục đích của các if
câu lệnh của bạn ) ...