मैं चेकर्स का खेल बनाने की कोशिश कर रहा हूं, और अभी मैं बोर्ड बना रहा हूं। बोर्ड पूर्णांकों का एक 2-आयामी सरणी है जिसे मैं इस आधार पर बदल रहा हूं कि टुकड़े कहां होने चाहिए।

    // Sets up Red Pieces
int k = 0;
for (i = 0; i < 3; i++)
{
    
    for (j = k; j < 8; j += 2)
    {
        // Red piece is on square at coords [i][j]
        Board_Squares[i][j] += 2;

    }
    printf("\n");

    // k starts at 0, and in switch should alternate between 1 and 0, 
    switch (k)
    {
    case 0:
        k = 1;
    case 1:
        k = 0;
    }
} 

हालांकि, यह कोड केवल मुझे यह देता है:

0 2 0 2 0 2 0
0 2 0 2 0 2 0
0 2 0 2 0 2 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0

कोई मदद डोप होगी। चेतावनी: मैं गूंगा हो सकता हूं।

साथ ही, स्विच स्टेटमेंट का उपयोग वैसे भी यहां सही कदम उठा रहा है?

0
Pupper Gump 31 जिंदा 2021, 00:22
4
आप अपने स्विच में break; नहीं हैं। पढ़ने लायक: छोटे प्रोग्रामों को कैसे डिबग करें
 – 
StoryTeller - Unslander Monica
31 जिंदा 2021, 00:30
1
MAX और R क्या है? Board_Squares को कैसे परिभाषित किया जाता है? कृपया हमें एक न्यूनतम प्रतिलिपि प्रस्तुत करने योग्य उदाहरण दिखाएं।
 – 
Andreas Wenzel
31 जिंदा 2021, 00:30
k = k ? 0 : 1; संक्षिप्त है, k = k == 1 ? 0 : 1; शायद बेहतर है।
 – 
jwdonahue
31 जिंदा 2021, 00:30
1
हर किसी के प्रश्न का उत्तर देने के बाद, क्या आप मुझे बता सकते हैं कि आउटपुट क्या होना चाहिए?
 – 
Tch
31 जिंदा 2021, 00:31
2
आप आंतरिक लूप को j = k के बजाय j = i % 2 या j = i & 1 पर शुरू कर सकते हैं, तो आपको k की बिल्कुल भी आवश्यकता नहीं होगी।
 – 
dxiv
31 जिंदा 2021, 00:32

1 उत्तर

सबसे बढ़िया उत्तर

आपके कोड में समस्या break कथनों के गुम होने से आती है: case के लिए कोड अगले मामले के लिए कोड के माध्यम से आता है।

इसे इस तरह संशोधित करें:

    switch (k) {
      case 0:
        k = 1;
        break;
      case 1:
        k = 0;
        break;
    }

वही टॉगलिंग प्रभाव सरल अभिव्यक्तियों के साथ प्राप्त किया जा सकता है:

  • k = 1 - k;
  • k ^= 1;
  • k = !k;
  • k = k == 0;

या कुछ और जटिल और अस्पष्ट:

  • k = !!!k;
  • k = k ? 0 : 1;
  • k = (k + 1) & 1;
  • k = "\1"[k];
  • k = k["\1"];
  • k = 1 / (1 + k);

चेकर बोर्ड सेल को सीधे 0 और 1 में भी इनिशियलाइज़ किया जा सकता है:

Board_Squares[i][j] = (i + j) & 1;
3
chqrlie 31 जिंदा 2021, 00:55