Bagel console en C ++



Présentation


"Linux n'est pas pour les jeux!" - phrase obsolète: maintenant il y a beaucoup de grands jeux spécialement pour ce merveilleux système. Mais quand même, parfois, je veux quelque chose de spécial qui vous convienne ... Et j'ai décidé de créer ce spécial.

Base


Je ne montrerai pas et ne dirai pas tout le code (ce n'est pas très intéressant) - seulement les points principaux.

1. caractère


Voici la liste de tous les paramètres du personnage (santé, armure, expérience, etc.) qui intéressent le rendu et la direction du mouvement (qui n'est pas présent).

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. Gestion


Comment déplacer le caractère si clairement (x - \ ++, y - \ ++). Mais le traitement au clavier est plus amusant:

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

Il ne reste plus qu'à définir les "caractères de contrôle". Cela peut être fait avec un interrupteur, mais je déteste ça.

switch(...) case .. : ... ; break mieux switch(...) case .. : ... ; break comme ça

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

La beauté! Boucle des fonctions et tourne autour de l'écran! Mais en quelque sorte durement ... Et le curseur scintille, et les lettres ... Fixez-le!

 //  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"); 

Ouah! Un pour cent est prêt!

3. Le monde autour


Ici, nous faisons des tableaux pour les pièces x, y du monde et les pièces elles-mêmes (char o[N]) , de même pour les monstres et les bonus.

Nous créons la fonction world(int objx[N] .... objy[N] ... obj[N], ... objcolor[N]) par analogie avec hero() , mais avec des paramètres et une boucle supplémentaire pour sortir le tableau ... par intérêt, on ne dessine que dans le champ de vision (vis) (if (ox[k] < vis && oy[k]....))

Maintenant, nous remplissons l'écran de particules du monde à travers des pièces et des passages peu compliqués et procéduraux, en même temps que des ennemis et des objets, pour un hasard complet, n'oubliez pas le 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. Interaction


Maintenant, nous devons en quelque sorte ne pas traverser les murs et les monstres, recevoir des bonus des objets.

Notre préféré pour et #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.Menu


Nous affichons simplement le menu à l'écran, numérotons les éléments, en utilisant getkey () nous traitons le choix du joueur. Nous écrivons la barre d'état du personnage, nous implémentons le menu de pompage, nous écrivons l'arrière-plan et nous obtenons ce que j'ai appelé "Subsoil" ("Subsoil").

Conclusion


C'est quelque chose. Vous pouvez y jouer en téléchargeant , décompressant et exécutant de cette manière:

 $ sudo chmod +x Subsoil-1.0/Subsoil 

 $ Subsoil-1.0/Subsoil 

ou, enfin, inspiré, écrivez-vous une aventure à votre goût. Je vous préviens à l'avance: mon jeu n'est pas facile!

Les liens


Génération procédurale , inspirateur .

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


All Articles