
Intshayelelo
"ILinux ayisiyoyemidlalo!" -Ibinzana eliphelelwe lixesha: ngoku kukho imidlalo emininzi emangalisayo ngokukodwa le nkqubo imangalisayo. Kodwa kunjalo, ngamanye amaxesha ufuna into ekhethekileyo eya kufanelana nawe ... Kwaye ndagqiba ekubeni ndenze le nto ikhethekileyo.
Isiseko
Andiyi kubonisa kwaye ndixelele yonke ikhowudi (ayinomdla kakhulu) - nje iingongoma eziphambili.
1.Umlinganiswa
Zonke iiparamitha zomlinganiswa zidweliswe apha (impilo, isikrweqe, amava, njl. njl.) Inomdla ngumzobo kunye nesalathiso sentshukumo (engekho okwangoku).
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.Ulawulo
Indlela yokuhambisa uphawu sele icacile (x—++, y—++). Kodwa inkqubo yebhodibhodi inomdla ngakumbi:
char key;
char getkey()
{
system("stty raw");
key = getchar();
system("stty cooked");
return key;
}
Konke okuseleyo kukuseta "iimpawu zokulawula". Ungayenza usebenzisa iswitshi, kodwa ndiyayithiya.
switch(...) case .. : ... ; break ngcono ngolu hlobo
#define KEY if (key ==
#define I ){
#define J ;}else
void keys()
{
getkey();
KEY 'a' I x-- ; pos = 1 J
KEY......
}
Buhle! Imisebenzi yeLoop kwaye ujikeleze isikrini! Kodwa ngandlela-thile kunzima ... Kwaye i-cursor ikhanya, kunye noonobumba ... Siya kuyilungisa!
//До цикла
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");
Wowu! Ipesenti enye ilungile!
3.Ihlabathi elisingqongileyo
Apha senza uluhlu luka x, y amaqhekeza ehlabathi kunye namaqhekeza ngokwawo (char o[N]), okufanayo kwizilo kunye neebhonasi.
Yenza umsebenzi world(int objx[N] .... objy[N] ... obj[N], ... objcolor[N]) ngokuthelekisa ne hero(), kodwa ngeeparamitha kunye nelophu eyongezelelweyo yokukhupha uluhlu ... ukuzonwabisa, sizoba kuphela kwintsimi yembono (vis) (if (ox[k] < vis && oy[k]....))
Ngoku sizalisa isikrini ngamasuntswana ehlabathi sisebenzisa amagumbi alula kunye neepaseji, kwangaxeshanye singena kwiintshaba kunye nezinto, ngokungenamkhethe ngokupheleleyo esingakulibali. 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.Intsebenziswano
Ngoku kufuneka ngandlela thile sikuphephe ukudlula kwiindonga kunye nezilo ezikhulu kwaye sifumane iibhonasi kwizinto.
Izinto esizithandayo zezakwaye #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.Imenyu
Sibonisa nje imenyu, ukubala izinto, kwaye sebenzisa getkey () ukucubungula ukhetho lomdlali. Sibhala ibha yesimo somlingiswa, siphumeze imenyu yokulinganisa, bhala i-backstory, kwaye sifumana into endiyibiza ngokuthi "I-Subsoil".
isiphelo
Le yinto efana nale. Ungayidlala , ndikhupha izinto kwaye ziqhuba ngolu hlobo:
$ sudo chmod +x Subsoil-1.0/Subsoil$ Subsoil-1.0/Subsoil, okanye, ekugqibeleni uphefumlelwe, zibhalele i-adventure oyithandayo. Ndiyakulumkisa kwangaphambili: umdlalo wam awulula!
Unxulumano
, .
umthombo: www.habr.com
