Обозревателям игр:
Наконец-то! За 6 дней я сделал первую консольную игру на C++, которую, пожалуй, назову "ОБВАЛ".
Смысл в чём: (Идея не ORIGINAL)
На точку, находящуюся внизу комнаты под управлением игроком, падают ступеньки блоков в которых есть дыры. Эти дыры нужно заделать другими блоками, которые управляют, чтобы при заполнении ступенька удалилась, освобождая место под блоками.
Есть небольшой баг с заполнением, есть недочёт, много костылей, но для v1,0 думаю добротно получилось.
Запуск в формате: EXE
Права админа: не нужны.
Исходный код:
#include <iostream>
#include <conio.h>
#include <string>
#include <stdlib.h>
#include <time.h>
using namespace std;
string s = "o";
string m = " ";
const int level = 5; //Изменяем вручную уровень сложности (длина комнаты)
const int HEIGHT = 22; //Высота площадки
int score = 0; //Начисление очков
bool a[5+level][HEIGHT];
const int delay=2; //Замедление
void Draw();
int main()
{ srand(time(NULL));
int to = time(NULL);
int delta=0;
int dop=0;
//Координаты игрока
int xp=5;
a[xp][HEIGHT-1]=1;
//////////////////////////////////////////
while (delta<=(HEIGHT-1)*delay) { int sec=time(NULL)-to+dop*delay;
//Постепенное заполнение игрового поля блоками//
if ((sec>delta)*(sec%delay==0)){
for (int x=0;x<(level+5);x++){
for(int st=sec/delay; st>0;st--)
{a[x][st]=a[x][st-1];}
a[x][0]= rand()%2; }
Draw();
}delta=sec;
//Реализация управления игроком//
if (_kbhit())
{
switch(getch()) //75- клавиша влево; 77- клавиша вправо; 72- вверх;
{
case 77:a[xp][HEIGHT-1]=0;xp++;a[xp][HEIGHT-1]=1; if(xp>(level+4)){a[0][HEIGHT-1]=1;xp=0;}; Draw(); break;
case 75:a[xp][HEIGHT-1]=0;xp--;a[xp][HEIGHT-1]=1; if(xp<0){a[level+4][HEIGHT-1]=1;xp=level+4;}; Draw(); break;
case' ':
for(int yp=HEIGHT-2;yp>-1 ;yp--) {if (!a[xp][yp]==1){a[xp][yp+1]=0;a[xp][yp]=1; }else{if (yp>=sec/delay)dop+=1; break;} a[xp][HEIGHT-1]=1; Draw();}
break;
}
};
//Удаление полей и начисление очков//
for (int y=0;y<HEIGHT;y++){
bool bpp=1;
for(int i=0;i<(5+level);i++) {bpp=a[i][y]*bpp;}
if(bpp==1){ dop-=1; score+=level; for(int i=0;i<(5+level);i++)a[i][y]=0;} //Начисление очков в этой строке
} ;
for (int y=0;y<HEIGHT;y++){
int bpp=0;
for(int i=0; i<(5+level);i++) {if (a[i][y]+bpp>=1)bpp=1;};
if((bpp==0)* (y<sec/delay)){for(int x=0;x<(5+level);x++) {a[x][y] = a[x][y+1]; a[x][y+1]=0;}}
}
}
/////////////////////////////////
system("pause");
return 0;
}
//прорисовка/ перерисовка игрового поля
void Draw()
{
system("cls");
for (int y=0;y<HEIGHT;y++){
for (int x=0;x<(level+5);x++){
if (a[x][y]) cout << s;
if (!a[x][y]) cout << m;
}; cout<<"\n";}
cout<<"\n"<<"Score: "<<score;
};