
Ievads
āLinux nav paredzÄts spÄlÄm!ā ā novecojusi frÄze: tagad ir daudz brÄ«niŔķīgu spÄļu, kas izveidotas tieÅ”i Å”ai izcilajai operÄtÄjsistÄmai. Bet tomÄr, dažreiz, gribas kaut ko Ä«paÅ”u, kas bÅ«tu piemÄrots tieÅ”i tev... Un es nolÄmu izveidot Å”o Ä«paÅ”o.
Pamats
Es nerÄdīŔu un neizstÄstīŔu visu kodu (tas nav pÄrÄk interesanti) ā tikai galvenÄs detaļas.
1. Varonis
Å eit ir uzskaitÄ«ti visi varoÅa parametri (veselÄ«ba, bruÅas, pieredze utt.), interesants ir zÄ«mÄjums un kustÄ«bas virziens (kÄ Å”obrÄ«d nav).
int x = 5, y = 5;
hp = 100,
maxhp = 100,
dm = 20,
armor = 0,
xp = 0,
level = 0,
diff = 10, // grÅ«tÄ«bas pakÄpe
pos = 0; // virziens
bool reg = 0,
Mdm = 0, // bonusi
ght = 0;
string color; // krÄsa tiks izmantota kÄ varoÅa stÄvokļa indikators
void hero() // Å”eit notiek varoÅa pÄrvietoÅ”ana uz koordinÄtÄm (x ; y)
{
cout << "e[u " << "e[0;0H"; // kursoru pozÄ«cijas atjaunoÅ”ana, izdzÄÅ”ana ar tukÅ”o
for (int i = 0; i <= x; i++)
cout << RIGHT; // makro "e[1C"
for (int i = 0; i <= y; i++)
cout << DOWN; // makro "e[1B"
cout << "e[s" << color << "ā¬"; // kursoru pozÄ«cijas saglabÄÅ”ana
}
2. Vadība
KÄ pÄrvietot varoni ir skaidrs (xā++, yā++). Bet tastatÅ«ras apstrÄde ir interesantÄka:
char key;
char getkey()
{
system("stty raw");
key = getchar();
system("stty cooked");
return key;
}
Viss, kas jÄizdara, ir jÄnostÄda āvadÄ«bas simboliā. To var izdarÄ«t, izmantojot switch, bet es to ienÄ«stu.
switch(...) case .. : ... ; break labÄk Å”Ädi
#define KEY if (key ==
#define I ){
#define J ;}else
void keys()
{
getkey();
KEY 'a' I x-- ; pos = 1 J
KEY......
}
Skaistums! Ciklu funkcijas un skrienam pa ekrÄnu! Bet kaut kÄ karsti... un kursoru mirgo, un burti... Izlabosim!
//ŠŠ¾ ŃŠøŠŗŠ»Š°
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");
Uhh! Viens procents ir gatavs!
3. ApkÄrtÄjÄ pasaule
Å eit veidojam masÄ«vus x, y pasaules gabaliem un paÅ”iem gabaliem (char o[N]), tas pats attiecÄ«bÄ uz monstriem un bonusiem.
Veidojam funkciju world(int objx[N] .... objy[N] ... obj[N], ... objcolor[N]) pÄc analogijas ar hero(), bet ar parametriem un papildu ciklu masÄ«va izvadīŔanai... kÄ interesantuma dÄļ zÄ«mÄjam tikai redzamajÄ sfÄrÄ (vis) (if (ox[k] < vis && oy[k]....))
Tagad mÄs pÄrklÄjam ekrÄnu ar pasaules daļiÅÄm, izmantojot vienkÄrÅ”u for un procedurÄli izveidojam istabas un ejas, nepÄrliekot pretiniekus un priekÅ”metus, lai nodroÅ”inÄtu pilnÄ«gu nejauŔību, neaizmirstam par 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. Sadarbība
Tagad mums kaut kÄ jÄsaglabÄ gumijas pÄriem un monstriem, gÅ«stot bonusus no priekÅ”metiem.
Mūsu mīļie for un #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. IzvÄrst
Meniu vienkÄrÅ”i attÄlojam ekrÄnÄ, numurÄjot punktus, ar getkey() apstrÄdÄjam spÄlÄtÄja izvÄli. RakstÄm varoÅa statusa joslu, Ä«stenojam attÄ«stÄ«bas izvÄlni, rakstÄm fona stÄstu un iegÅ«stam to, ko es nosaucu par āSubsoilā (āZemes dzÄ«lesā).
SecinÄjums
TÄda nu ir. JÅ«s varat tajÄ spÄlÄt, , izpakojot un palaist Å”ÄdÄ veidÄ:
$ sudo chmod +x Subsoil-1.0/Subsoil$ Subsoil-1.0/Subsoil, vai, iedvesmojoties, uzrakstÄ«t sev piedzÄ«vojumu pÄc savas gaumes. IepriekÅ” brÄ«dinÄju: mana spÄle nav viegla!
Saites
, .
Avots: habr.com
