जैसा कि दूसरों ने बताया है, शर्तों को अधिक संक्षिप्त बनाने से संकलन या निष्पादन में तेजी नहीं आएगी, और यह पठनीयता के साथ जरूरी नहीं है।
यह आपके कार्यक्रम को और अधिक लचीला बनाने में मदद कर सकता है, यदि आप बाद में निर्णय लेते हैं कि आप एक गेमर के संस्करण को 6 x 6 बोर्ड पर चाहते हैं, या 40 x 50 बोर्ड पर एक उन्नत संस्करण (जो आप रात भर खेल सकते हैं) ।
तो मैं इसे निम्नानुसार कोडित करूंगा:
// 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
}
}
हां, यह क्रिया है, लेकिन यह स्पष्ट करता है कि गेम बोर्ड पर क्या हो रहा है।
यदि मैं फोन या टैबलेट पर प्रदर्शित करने के लिए इस गेम को विकसित कर रहा था, तो मैं स्थिरांक के बजाय ROWS और COLUMNS चर बनाऊंगा, ताकि स्क्रीन के आकार और अभिविन्यास के मिलान के लिए उन्हें गतिशील रूप से (गेम की शुरुआत में) सेट किया जा सके।
मैं स्क्रीन ओरिएंटेशन को किसी भी समय, मध्य-गेम में बदलने की अनुमति दूंगा - आपको बस इतना करना है कि ROWS और COLUMNS के मूल्यों को स्विच करना है, जबकि बाकी सब को छोड़कर (वर्तमान वर्ग संख्या जो प्रत्येक खिलाड़ी चालू है, और सभी सांप और सीढ़ी के आरंभ / अंत वर्ग अपरिवर्तित)। फिर आपको 'सिर्फ' बोर्ड को अच्छी तरह से खींचना होगा, और अपने एनिमेशन के लिए कोड लिखना होगा (मुझे लगता है कि आपके if
बयानों का उद्देश्य था ...)