መግቢያ
"ሊኑክስ ለጨዋታዎች አይደለም!" - ጊዜው ያለፈበት ሐረግ-አሁን ለዚህ አስደናቂ ስርዓት ብዙ አስደናቂ ጨዋታዎች አሉ። ግን አሁንም ፣ አንዳንድ ጊዜ ለእርስዎ የሚስማማ ልዩ ነገር ይፈልጋሉ ... እና ይህን ልዩ ነገር ለመፍጠር ወሰንኩ ።
መሠረታዊ
ሙሉውን ኮድ አላሳይም እና አልነግርም (በጣም አስደሳች አይደለም) - ዋና ዋና ነጥቦችን ብቻ።
1.ቁምፊ
ሁሉም የቁምፊዎች መመዘኛዎች እዚህ ተዘርዝረዋል (ጤና, የጦር ትጥቅ, ልምድ, ወዘተ.) ትኩረት የሚስበው የእንቅስቃሴው ስዕል እና አቅጣጫ ነው (በአሁኑ ጊዜ የማይገኝ).
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. አስተዳደር
ቁምፊውን እንዴት ማንቀሳቀስ እንደሚቻል አስቀድሞ ግልጽ ነው (x—++፣ y—++)። ግን የቁልፍ ሰሌዳው ሂደት የበለጠ አስደሳች ነው-
char key;
char getkey()
{
system("stty raw");
key = getchar();
system("stty cooked");
return key;
}
የቀረው "የቁጥጥር ቁምፊዎችን" ማዘጋጀት ብቻ ነው. ማብሪያ / ማጥፊያን በመጠቀም ማድረግ ይችላሉ ፣ ግን ጠላሁት።
switch(...) case .. : ... ; break
እንደዚህ ይሻላል
#define KEY if (key ==
#define I ){
#define J ;}else
void keys()
{
getkey();
KEY 'a' I x-- ; pos = 1 J
KEY......
}
ውበት! የሉፕ ተግባራት እና በማያ ገጹ ዙሪያ አሂድ! ግን በሆነ መልኩ ትንሽ ከባድ ነው ... እና ጠቋሚው ብልጭ ድርግም ይላል, እና ፊደሎቹ ... እናስተካክለዋለን!
//До цикла
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");
ዋዉ! አንድ መቶኛ ዝግጁ ነው!
በዙሪያችን ያለው ዓለም 3
እዚህ ለ x ፣ y የዓለም ክፍሎች እና ለራሳቸው ቁርጥራጮች ድርድሮችን እንሰራለን። (char o[N])
, ጭራቆች እና ጉርሻ ተመሳሳይ.
ተግባር ፍጠር world(int objx[N] .... objy[N] ... obj[N], ... objcolor[N])
ጋር በማመሳሰል hero()
ነገር ግን በመለኪያዎች እና ድርድርን ለማውጣት ተጨማሪ ምልልስ... ለመዝናናት፣ በእይታ መስክ ላይ ብቻ እንሳልለን (vis) (if (ox[k] < vis && oy[k]....))
አሁን ክፍሎቹን እና ምንባቦችን ቀለል ባለ እና በሂደት ክፍት በማድረግ ስክሪኑን በዓለም ቅንጣቶች እንሞላለን ፣ በተመሳሳይ ጊዜ ወደ ጠላቶች እና ዕቃዎች እንገባለን ፣ ለተሟላ የዘፈቀደነት እኛ አንረሳውም ። 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. መስተጋብር
አሁን እንደምንም ግድግዳዎችን እና ጭራቆችን እንዳናልፍ እና ከእቃዎች ጉርሻ መቀበል አለብን።
የእኛ ተወዳጆች ለ እና # መግለጽ ናቸው።
#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.ምናሌ
በቀላሉ ምናሌውን እናሳያለን፣ እቃዎቹን ቁጥር እየሰጠን እና የተጫዋቹን ምርጫ ለማስኬድ ጌትኪ()ን እንጠቀማለን። የቁምፊውን ሁኔታ ባር እንጽፋለን, ደረጃውን የጠበቀ ምናሌን እንተገብራለን, የኋላ ታሪክን እንጽፋለን እና "የከርሰ ምድር" ያልኩትን እናገኛለን.
መደምደሚያ
ይህ እንደዚህ ያለ ነገር ነው. መጫወት ትችላለህ
$ sudo chmod +x Subsoil-1.0/Subsoil
$ Subsoil-1.0/Subsoil
, ወይም በመጨረሻ ተመስጦ, እራስዎን የሚወዱትን ጀብዱ ይጻፉ. አስቀድሜ አስጠንቅቄሃለሁ፡ ጨዋታዬ ቀላል አይደለም!
አገናኞች
ምንጭ: hab.com