सी

2017-01-24 9 views
5

में एक 2 आयामी मानचित्र मैं एक खेल बोर्ड ASCII जो मैं अंत तक उम्मीद है के साथ मुद्रित किया जाना है मुद्रण के इससी

  ___ 
3  ___/ 1 \___ ___ 
    ___/ 2 \___/ 2 \/ 3 \ 
2/1 \___/ 3 \___/\___/___ 
    \___/ 2 \___/  /2 \ 
1/1 \___/ 1 \___  \___/ 
    \___/ 2 \___/ 2 \ 
0  \___/ \___/ 

    1 2 3 4 

की तरह कुछ नक्शा x और y अक्ष के साथ वितरित किया जाता है, आकार लग रहा है नक्शा भी तय किया गया है। मुद्रित होने वाली संख्याएं सभी को 2 डी सरणी में संग्रहीत किया जाता है। जैसा कि ऊपर दिखाया गया है उनमें से कुछ खाली भी हो सकते हैं। यहां कुछ ऐसा है जो मैंने करने की कोशिश की। मानचित्र-> sizeX और map-> sizeY मानचित्र के एक्स और वाई अक्ष का आकार देता है। यदि उस ब्लॉक में संख्या 0 है, तो इसका मतलब है कि ब्लॉक मौजूद नहीं है और हम इसे प्रिंट नहीं करते हैं। कोई भी सहायताकाफी प्रशंसनीय होगी।

void printMap(struct Map *map) { 
    for (int i = 0; i < map->sizeX; ++i) { 
     for (int k = 0; k < map->sizeX && i == 0; ++k) 
      printf(" ___ "); 
     printf("\n"); 
     for (int j = 0; j < map->sizeY; ++j) { 
      if(i == 0) { 
       printf("/ %d \\", giveFloe(map, i, j)->numbOfFish); 
      } 
      else { 
       printf("/ %d \\", giveFloe(map, i, j)->numbOfFish); 
      } 
     } 
     printf("\n"); 
     for (int l = 0; l < map->sizeX; ++l) 
      printf("\\___/"); 
    } 
    printf("\n"); 
} 

यह मुझे आउटपुट के रूप में मिला है, क्योंकि मैं पहली पंक्ति को सही ढंग से प्रिंट नहीं कर सका, मैंने आगे नहीं बढ़े। नक्शा 15 x 15 से अधिक नहीं है इसलिए मुझे यकीन है कि इसे टर्मिनल विंडो पर मुद्रित किया जा सकता है।

___ ___ ___ ___ ___ ___ ___ ___ ___ ___ 
/3 \/ 0 \/ 2 \/ 0 \/ 2 \/ 0 \/ 3 \/ 0 \/ 1 \/ 0 \ 
\___/\___/\___/\___/\___/\___/\___/\___/\___/\___/ 
/0 \/ 0 \/ 0 \/ 2 \/ 0 \/ 1 \/ 0 \/ 3 \/ 0 \/ 3 \ 
\___/\___/\___/\___/\___/\___/\___/\___/\___/\___/ 
/2 \/ 0 \/ 3 \/ 0 \/ 3 \/ 0 \/ 3 \/ 0 \/ 1 \/ 0 \ 
\___/\___/\___/\___/\___/\___/\___/\___/\___/\___/ 
/0 \/ 1 \/ 0 \/ 2 \/ 0 \/ 2 \/ 0 \/ 2 \/ 0 \/ 3 \ 
\___/\___/\___/\___/\___/\___/\___/\___/\___/\___/ 
/3 \/ 0 \/ 0 \/ 0 \/ 2 \/ 0 \/ 3 \/ 0 \/ 1 \/ 0 \ 
\___/\___/\___/\___/\___/\___/\___/\___/\___/\___/ 
/0 \/ 3 \/ 0 \/ 2 \/ 0 \/ 1 \/ 0 \/ 3 \/ 0 \/ 1 \ 
\___/\___/\___/\___/\___/\___/\___/\___/\___/\___/ 
/3 \/ 0 \/ 2 \/ 0 \/ 2 \/ 0 \/ 3 \/ 0 \/ 2 \/ 0 \ 
\___/\___/\___/\___/\___/\___/\___/\___/\___/\___/ 
/0 \/ 2 \/ 0 \/ 3 \/ 0 \/ 3 \/ 0 \/ 2 \/ 0 \/ 2 \ 
\___/\___/\___/\___/\___/\___/\___/\___/\___/\___/ 
/3 \/ 0 \/ 2 \/ 0 \/ 3 \/ 0 \/ 3 \/ 0 \/ 2 \/ 0 \ 
\___/\___/\___/\___/\___/\___/\___/\___/\___/\___/ 
/0 \/ 2 \/ 0 \/ 3 \/ 0 \/ 1 \/ 0 \/ 3 \/ 0 \/ 3 \ 
\___/\___/\___/\___/\___/\___/\___/\___/\___/\___/ 

यह जहाँ तक मैं मिल सकता है के रूप में है, यह माना जाता है कि नक्शे एक टर्मिनल विंडो से अधिक नहीं होगा। मुझे नक्शा के लिए उपरोक्त हेक्सागोन की तरह दिखने की आवश्यकता है।

struct Map { 
    struct Floe *mapPointer; 
    int sizeX; 
    int sizeY; 
    struct Box *changelog; 
    int changeCount; 
    int maxChanges; 
    struct Player *players; 
    int playerCount; 
}; 

giveFloe() एक संरचना नक्शे में ले जाता है और है कि समन्वय पर floe देता है।

struct Floe { 
    int numbOfFish; 
    int whosPenguin; 
}; 
+0

आपका कोड किस उत्पादन का उत्पादन करता है? – jackarms

+1

भविष्य के लिए बस एक सलाह, सीधे स्क्रीन पर प्रिंट न करें। अपने मानचित्र को संभालने के लिए पर्याप्त बफर का उपयोग करें और उस फ़ोल्डर को मुद्रित करने के लिए स्लाइडिंग विंडो का उपयोग करें जिसे आप उपयोगकर्ता को दिखाना चाहते हैं। यह आपको अपने टर्मिनल विंडो आकार के नक्शे को बहुत बड़ा करने की अनुमति देगा। बेशक आप कुछ कस्टम बफर का उपयोग कर सकते हैं और मूल रूप से इसे प्रिंट करने योग्य क्षेत्र में परिवर्तित कर सकते हैं। – 0andriy

+0

आपके कोड में समान क्रमिक स्थितियां हैं I if (i == 0) {'। उन्हें निश्चित रूप से विलय करना होगा। – DyZ

उत्तर

1

मुझे लगता है कि आपका पहला कदम फिर से सोचने के लिए हो सकता है कि ग्रिड कैसे रखा जाता है।

सबसे पहले आपको यह पता होना चाहिए कि प्रत्येक हेक्सागोन किस पंक्ति पर मुद्रित होना चाहिए (ध्यान दें कि मेरी छवि प्रत्येक पंक्ति को पंक्ति के रूप में कैसे मानती है)।

दूसरा, क्या एक ही पंक्ति पर एक ही पंक्ति पर दो हेक्सागोन होना वैध है? ग्रिड के दाहिने तरफ हेक्सागोन और 2 देखें।

  ___ 
5  ___/ 1 \___ ___ 
4 ___/ 2 \___/ 2 \/ 3 \ 
3/1 \___/ 3 \___/\___/___ 
2 \___/ 2 \___/  /2 \ 
1/1 \___/ 1 \___  \___/ 
0 \___/ 2 \___/ 2 \ 
     \___/ \___/ 

    0---1---2---3----4---5 <-- columns 4 and 5 don't fit normally