Console roguelike mu C ++

Console roguelike mu C ++

Mau oyamba

"Linux simasewera!" - Mawu achikale: tsopano pali masewera ambiri odabwitsa makamaka a dongosolo lodabwitsali. Komabe, nthawi zina mumafuna chinachake chapadera chomwe chingakugwirizane ndi inu ... Ndipo ndinaganiza zopanga chinthu chapadera ichi.

Maziko

Sindidzawonetsa ndikuwuza code yonse (siyosangalatsa kwambiri) - mfundo zazikulu zokha.

1.Khalidwe

Makhalidwe onse amatchulidwa apa (thanzi, zida, zochitika, ndi zina zotero) Chochititsa chidwi ndi kujambula ndi kayendetsedwe ka kayendetsedwe kake (komwe sikulipo).

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

Momwe mungasunthire mawonekedwe ndi zomveka kale (x—++, y—++). Koma kukonza kiyibodi ndikosangalatsa kwambiri:

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

Zomwe zatsala ndikukhazikitsa "omwe akuwongolera". Mutha kuchita izi pogwiritsa ntchito switch, koma ndimadana nazo.

switch(...) case .. : ... ; break bwino monga chonchi

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

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

Kukongola! Lupu imagwira ntchito ndikuzungulira pazenera! Koma mwanjira ina ndizovuta ... Ndipo cholozera chimawalira, ndi zilembo ... Tidzakonza!

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

Oo! Gawo limodzi lakonzeka!

3.Dziko lotizungulira

Apa tikupanga masanjidwe a x, y zidutswa za dziko ndi zidutswa zomwezo (char o[N]), chimodzimodzi kwa zoopsa ndi mabonasi.

Pangani ntchito world(int objx[N] .... objy[N] ... obj[N], ... objcolor[N]) mwa fanizo ndi hero(), koma ndi magawo ndi chipika chowonjezera chotulutsa mndandanda... (if (ox[k] < vis && oy[k]....))

Tsopano timadzaza chinsalucho ndi tinthu tating'ono ta dziko lapansi pogwiritsa ntchito zipinda zosavuta komanso zopanda pake, nthawi yomweyo timalowa adani ndi zinthu, mwachisawawa sitiiwala. 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.Kuyanjana

Tsopano tiyenera mwanjira ina kupewa kudutsa makoma ndi zilombo ndi kulandira mabonasi ku zinthu.

Zokonda zathu ndi #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

Timangowonetsa menyu, kuwerengera zinthu, ndikugwiritsa ntchito getkey() kukonza zomwe wosewera wasankha. Timalemba mawonekedwe amunthuyo, yambitsani menyu yowongolera, lembani mbiri yakumbuyo, ndipo timapeza zomwe ndidatcha "Subsoil".

Pomaliza

Ichi ndi chinachake chonga ichi. Mutha kuyisewera dawunilodi, kumasula ndikuyenda motere:

$ sudo chmod +x Subsoil-1.0/Subsoil

$ Subsoil-1.0/Subsoil

, kapena, pomaliza kuwuziridwa, dzilembeni nokha ulendo womwe mumakonda. Ndikukuchenjezani pasadakhale: masewera anga si ophweka!

Maulalo

Kupanga njira, Wolimbikitsa.

Source: www.habr.com

Kuwonjezera ndemanga