C ++中的控制台百吉饼



引言


“ Linux不适用于游戏!” -过时的短语:现在有很多出色的游戏专门针对这个出色的系统。 但是,有时候,我还是想要一些适合您的特殊东西。。。

基数


我不会显示并告诉所有代码(这不是很有趣),而仅是要点。

1.字符


这里列出了感兴趣的角色的所有参数(健康,盔甲,经验等)是渲染和移动方向(目前不可用)。

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更好地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"); 

哇! 百分之一准备好了!

3.周围的世界


在这里,我们为世界的x,y个部分及其自身(char o[N])创建数组,怪物和奖励也是如此。

我们通过与hero()类似的方法创建world(int objx[N] .... objy[N] ... obj[N], ... objcolor[N])函数world(int objx[N] .... objy[N] ... obj[N], ... objcolor[N]) hero() ,但是使用参数和附加循环来输出数组...为了感兴趣,我们仅在视场(vis)中进行绘制(if (ox[k] < vis && oy[k]....))

现在,我们通过一个直接的,程序上空洞的房间和通道,用世界的粒子填充屏幕,同时输入敌人和物体,因为完全的随机性不要忘了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.菜单


我们只需在屏幕上显示菜单,对项目编号,然后使用getkey()处理玩家的选择。 我们编写了角色的状态栏,实现了抽水菜单,编写了背景,然后得到了我所谓的“底土”(“ Subsoil”)。

结论


这是东西 您可以通过以下方式下载 ,解压缩并运行它来播放它:

 $ sudo chmod +x Subsoil-1.0/Subsoil 

 $ Subsoil-1.0/Subsoil 

,或者说,最后是启发自己,写出自己喜欢的冒险经历。 我提前警告您:我的游戏并不轻松!

友情链接


程序产生启发

Source: https://habr.com/ru/post/zh-CN465625/


All Articles