
Inleiding
"Linux is nie vir speletjies nie!" - 'n verouderde frase: nou is daar baie wonderlike speletjies spesifiek vir hierdie wonderlike stelsel. Maar tog, soms wil jy iets spesiaals hê wat by jou sal pas... En ek het besluit om hierdie spesiale ding te skep.
fondament
Ek sal nie die hele kode wys en vertel nie (dit is nie baie interessant nie) - net die hoofpunte.
1.Karakter
Alle karakterparameters word hier gelys (gesondheid, wapenrusting, ervaring, ens.) Van belang is die tekening en rigting van beweging (wat nie tans beskikbaar is nie).
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.Bestuur
Hoe om die karakter te skuif, is reeds duidelik (x—++, y—++). Maar die sleutelbordverwerking is interessanter:
char key;
char getkey()
{
system("stty raw");
key = getchar();
system("stty cooked");
return key;
}
Al wat oorbly is om die "kontrole karakters" te stel. Jy kan dit doen met skakelaar, maar ek haat dit.
switch(...) case .. : ... ; break beter so
#define KEY if (key ==
#define I ){
#define J ;}else
void keys()
{
getkey();
KEY 'a' I x-- ; pos = 1 J
KEY......
}
Skoonheid! Loop funksies en hardloop om die skerm! Maar op een of ander manier is dit 'n bietjie hard ... En die wyser flits, en die letters ... Ons sal dit regmaak!
//До цикла
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");
Sjoe! Een persent is gereed!
3.Die wêreld om ons
Hier maak ons skikkings vir x, y stukke van die wêreld en die stukke self (char o[N]), dieselfde vir monsters en bonusse.
Skep 'n funksie world(int objx[N] .... objy[N] ... obj[N], ... objcolor[N]) na analogie met hero(), maar met parameters en 'n bykomende lus vir die uitvoer van die skikking ... vir die pret, teken ons slegs in die gesigsveld (vis) (if (ox[k] < vis && oy[k]....))
Nou vul ons die skerm met deeltjies van die wêreld deur gebruik te maak van 'n eenvoudige vir en prosedureel uithol kamers en gange, terselfdertyd betree ons vyande en voorwerpe, vir volledige willekeurigheid waarvan ons nie vergeet nie 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.Interaksie
Nou moet ons op een of ander manier vermy om deur mure en monsters te gaan en bonusse van items te ontvang.
Ons gunstelinge is vir en #definieer
#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. Kieslys
Ons vertoon eenvoudig die spyskaart, nommer die items, en gebruik getkey() om die speler se keuse te verwerk. Ons skryf die karakter se statusbalk, implementeer die nivelleringskieslys, skryf die agtergrond, en ons kry wat ek "Subsoil" genoem het.
Gevolgtrekking
Dit is so iets. Jy kan dit speel , uitpak en hardloop soos volg:
$ sudo chmod +x Subsoil-1.0/Subsoil$ Subsoil-1.0/Subsoil, of, uiteindelik geïnspireer, skryf vir jou 'n avontuur van jou eie smaak. Ek waarsku jou vooraf: my spel is nie maklik nie!
Skakels
, .
Bron: will.com
