Console roguelike ho C++

Console roguelike ho C++

Selelekela

"Linux ha se ea lipapali!" - poleloana ea khale: joale ho na le lipapali tse ngata tse ntle tse etselitsoeng sistimi ena e ntle haholo. Empa leha ho le joalo, ka linako tse ling u batla ntho e khethehileng e tla u tšoanela ... 'Me ke ile ka etsa qeto ea ho theha ntho ena e khethehileng.

Motheo

Nke ke ka bontša le ho bolela khoutu eohle (ha e thahasellise haholo) - lintlha tsa sehlooho feela.

1.Sebopeho

Likarolo tsohle tsa litlhaku li thathamisitsoe mona (bophelo bo botle, lihlomo, phihlelo, joalo-joalo) Ho thahasellisang ke setšoantšo le tataiso ea ho tsamaea (e seng e fumaneha hona joale).

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

Mokhoa oa ho tsamaisa sebopeho o se o hlakile (x—++, y—++). Empa ts'ebetso ea keyboard e khahla le ho feta:

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

Sohle se setseng ke ho beha "litlhaku tsa taolo". U ka e etsa u sebelisa switch, empa ke e hloile.

switch(...) case .. : ... ; break betere tjena

#define KEY if (key ==
#define I ){
#define J ;}else

void keys()
{
  getkey();
    KEY 'a' I x-- ; pos = 1 J
    KEY......
}

Botle! Loop e sebetsa 'me e potolohe skrineng! Empa ka tsela e itseng e batla e le thata ... 'Me sesupa se benya, le litlhaku ... Re tla e lokisa!

//До цикла
  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");

Joooh! Pesente e le 'ngoe e lokile!

3.Lefatshe le re potileng

Mona re etsa lihlopha tsa x, y likotoana tsa lefats'e le likotoana ka botsona (char o[N]), e tšoanang bakeng sa liphoofolo tsa litonanahali le libonase.

Etsa mosebetsi world(int objx[N] .... objy[N] ... obj[N], ... objcolor[N]) ka papiso le hero(), empa ka li-parameter le loop e eketsehileng bakeng sa ho hlahisa sehlopha ... bakeng sa monate, re hula feela tšimong ea pono (vis) (if (ox[k] < vis && oy[k]....))

Hona joale re tlatsa skrineng ka likaroloana tsa lefats'e re sebelisa likamore le liphaseje tse bonolo bakeng sa mekhoa le mekhoa, ka nako e ts'oanang re kenya lira le lintho, ka mokhoa o sa reroang ka ho feletseng oo re sa o lebaleng. 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[00me[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.Ho sebelisana

Hona joale re hloka ka tsela e itseng ho qoba ho feta marako le liphoofolo tsa litonanahali 'me re fumane li-bonase ho tsoa linthong.

Lithatohatsi tsa rona ke tsa #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.Lenane

Re bonts'a menyu feela, re bala lintho, 'me re sebelisa getkey() ho sebetsana le khetho ea sebapali. Re ngola sebaka sa boemo ba sebapali, re kenya tšebetsong menyu ea maemo, re ngola nalane, 'me re fumana seo ke se bitsitseng "Subsoil".

fihlela qeto e

Sena ke ntho e kang ena. U ka e bapala e jarollotsoe, ho phutholla le ho matha tjena:

$ sudo chmod +x Subsoil-1.0/Subsoil

$ Subsoil-1.0/Subsoil

, kapa, qetellong u khothalelitsoe, ingolle papali eo u e ratang. Ke u lemosa esale pele: papali ea ka ha e bonolo!

Lihokelo

Ho hlahisa mekhoa, Mokgothatsi.

Source: www.habr.com

Eketsa ka tlhaloso