C ++ में कंसोल बैगेल



परिचय


"लिनक्स खेल के लिए नहीं है!" - अप्रचलित वाक्यांश: अब विशेष रूप से इस अद्भुत प्रणाली के लिए बहुत सारे महान खेल हैं। लेकिन फिर भी, कभी-कभी, मैं कुछ विशेष चाहता हूं जो आपके अनुरूप होगा ... और मैंने इसे विशेष बनाने का फैसला किया।

आधार


मैं सभी कोड नहीं दिखाऊंगा और बताऊंगा (यह बहुत दिलचस्प नहीं है) - केवल मुख्य बिंदु।

1.Personazh


ब्याज के चरित्र (स्वास्थ्य, कवच, अनुभव, आदि) के सभी मापदंडों को यहां सूचीबद्ध किया गया है जो आंदोलन की दिशा और दिशा है (जो अभी नहीं है)।

int x = 5, y = 5; hp = 100, maxhp = 100, dm = 20, armor = 0, xp = 0, level = 0, diff = 10, //  pos = 0; //  bool reg = 0, Mdm = 0, //  ght = 0; string color; //         void hero() //       (x ; y) { cout << "\e[u " << "\e[0;0H"; //   ,   for (int i = 0; i <= x; i++) cout << RIGHT; //  "\e[1C" for (int i = 0; i <= y; i++) cout << DOWN; //  "\e[1B" cout << "\e[s" << color << "╬"; //    } 

2. प्रबंधन


चरित्र को स्पष्ट रूप से कैसे स्थानांतरित किया जाए (x - \ ++, y - \ ++)। लेकिन कीबोर्ड प्रसंस्करण अधिक मनोरंजक है:

 char key; char getkey() { system("stty raw"); key = getchar(); system("stty cooked"); return key; } 

यह केवल "नियंत्रण वर्ण" सेट करने के लिए रहता है। यह एक स्विच के साथ किया जा सकता है, लेकिन मुझे इससे नफरत है।

switch(...) case .. : ... ; break इस तरह बेहतर switch(...) case .. : ... ; break

 #define KEY if (key == #define I ){ #define J ;}else void keys() { getkey(); KEY 'a' I x-- ; pos = 1 J KEY...... } 

ब्यूटी! कार्यों को लूप करें और स्क्रीन के चारों ओर चलाएं! लेकिन किसी भी तरह कठोर ... और कर्सर झिलमिलाहट, और पत्र ... इसे ठीक करें!

 //  cout << "\e[?25l"; //   system("stty -echo"); // - system("xset r rate 120 10"); //      //  //-------Return_normal_system_settings-------- cout << "\e[00m"; system("reset"); system("xset r rate 200 20"); 

उह-xx! एक प्रतिशत तैयार है!

3. आसपास की दुनिया


यहाँ हम x, y दुनिया के टुकड़े और खुद के टुकड़े (char o[N]) , राक्षसों और बोनस के लिए समान हैं।

हम world(int objx[N] .... objy[N] ... obj[N], ... objcolor[N]) समारोह world(int objx[N] .... objy[N] ... obj[N], ... objcolor[N]) hero() साथ सादृश्य द्वारा hero() , लेकिन मापदंडों और एक अतिरिक्त पाश के साथ सरणी उत्पादन के लिए ... रुचि के लिए, हम केवल दृश्य (विज़) के क्षेत्र में आकर्षित करते हैं (if (ox[k] < vis && oy[k]....))

अब हम दुनिया के कणों के साथ स्क्रीन को एक अपूर्ण और प्रक्रियात्मक रूप से खोखले आउट कमरे और मार्ग के माध्यम से भरते हैं, उसी समय दुश्मनों और वस्तुओं में प्रवेश करते हैं, पूर्ण यादृच्छिकता के लिए srand(time(NULL)); बारे में मत भूलना srand(time(NULL));

 //------------------GENERATION--------------- void rooms() { for (int i = 0; i <= 50; i++) { px[i] = rand() % 115 + 2; py[i] = rand() % 34 + 2; pl[i] = rand() % 5 + 5; ph[i] = rand() % 5 + 5; if (px[i] + pl[i] > 117) px[i] = 50 - pl[i] / 2; else if (px[i] < 2) px[i] = 50 - pl[i] / 2; else if (py[i] < 1) py[i] = 15 - ph[i] / 2; else if (py[i] + ph[i] > 37) py[i] = 15 - ph[i] / 2; for (int j = 0; j <= i; j++) { while (px[i] > px[j] && px[i] < px[j] + pl[j]) (px[i]+pl[i]/2 >= 55) ? px[i]++ : px[i]-- ; while (py[i] > py[j] && py[i] < py[j] + ph[j]) (py[i]+ph[i]/2 >= 18) ? py[i]++ : py[i]-- ; while (px[i]+pl[i] > px[j] && px[i]+pl[i] < px[j] + pl[j]) (px[i]+pl[i]/2 >= 55) ? px[i]++ : px[i]-- ; while (py[i]+ph[i] > py[j] && py[i]+ph[i] < py[j] + ph[j]) (py[i]+ph[i]/2 >= 18) ? py[i]++ : py[i]-- ; } for (int j = 0; j <= i; j++) { while (px[j] + pl[j] >= 116) px[j]-- ; while (px[j] < 2) px[j]++ ; while (py[j] < 1) py[j]++ ; while (py[j] + ph[j] >= 37) py[j]-- ; } tx[i] = px[i]+10; ty[i] = py[i]-3; if (i <= diff) { ex[i] = px[i]; ey[i] = py[i]; while (ex[i] < 10){ ex[i]++ ; epos[i] = 3 ;} while (ey[i] < 10){ ey[i]++ ; epos[i] = 1 ;} e[i] = evar[pl[i]]; ecolor[i] = "\e[00m\e[31m"; edm[i] = edmvar[pl[i]]; ehp[i] = ehpvar[pl[i]]; exp[i] = expvar[pl[i]]; } rect(px[i], py[i], pl[i], ph[i]); } } void corrs() { int pc, px, py; for (int i = 0; i <= 4; i++) { if (i < 2){ px = 3; py = rand() % 33 + 3; pc = 110; line(px, py, pc, true); line(px, py+1, pc, true); } else { px = rand() % 100 + 3; py = 3; pc = 33; line(px, py, pc, false); line(px+1, py, pc, false); } } } 

4. बातचीत


अब हमें किसी तरह दीवारों और राक्षसों से गुजरने की ज़रूरत नहीं है, वस्तुओं से बोनस प्राप्त करें।

हमारे पसंदीदा और #define के लिए

 #define TOUCH if (x == ox[i] && y == oy[i] && pos == #define HIT x == ex[i] && y == ey[i] && pos == for (int i = 0; i <= n; i++) { if (i <= diff) { if (Mdm) ehp[i]-=2 ; //   " "  epos[i] = 0; if (ex[i] < x+5 && ex[i] > x-5 && ey[i] < y+5 && ey[i] > y-5 ) { edel(i); //      if (ex[i] < x I ex[i]++ ; epos[i] = 1 J if (ex[i] > x I ex[i]-- ; epos[i] = 2 J if (ey[i] < y I ey[i]++ ; epos[i] = 3 J if (ey[i] > y I ey[i]-- ; epos[i] = 4 ;} } for (int j = 0; j <= n; j++) //     while (ex[i] == ox[j] && ey[i] == oy[j] || ex[i] == ex[j] && ey[i] == ey[j] && j != i) { if (epos[i] == 1) ex[i]-- ; else if (epos[i] == 2) ex[i]++ ; else if (epos[i] == 3) ey[i]-- ; else if (epos[i] == 4) ey[i]++ ; } if (x == ex[i] && y == ey[i]) // "" { if (ehp[i] > 1) { ehp[i] -= dm; (edm[i] < armor) ? hp -= 0 : hp -= edm[i]-armor; } else { ex[i] = ey[i] = -1; xp += exp[i]; ehp[i] = 12; } } if (!ght) //         { if (HIT 1) y++ ;else if (HIT 2) x-- ;else if (HIT 3) y-- ;else if (HIT 4) x++ ; } } if (!ght) //  ,    { TOUCH 1 I y++ J TOUCH 2 I x-- J TOUCH 3 I y-- J TOUCH 4 ) x++ ; } } 

5.Menyu


हम बस स्क्रीन पर मेनू को प्रदर्शित करते हैं, आइटमों को क्रमांकित करते हैं, गेटकी () का उपयोग करके हम खिलाड़ी की पसंद को संसाधित करते हैं। हम चरित्र की स्थिति पट्टी लिखते हैं, हम पंपिंग मेनू को लागू करते हैं, हम पृष्ठभूमि लिखते हैं, और हमें वह मिलता है जिसे मैंने "सबसॉइल" ("सबसॉइल") कहा है।

निष्कर्ष


यह कुछ है। आप इसे इस तरह से डाउनलोड , अनपैक करके और चलाकर खेल सकते हैं:

 $ sudo chmod +x Subsoil-1.0/Subsoil 

 $ Subsoil-1.0/Subsoil 

, या, अंत में, प्रेरित, अपने आप को अपनी पसंद के अनुसार एक साहसिक लिखें। मैं आपको पहले से चेतावनी देता हूं: मेरा खेल आसान नहीं है!

रेफरी


प्रक्रियात्मक पीढ़ी , प्रेरणा

Source: https://habr.com/ru/post/hi465625/


All Articles