Название: Консольная игра "Обвал" Отправлено: iwa306 от Август 23, 2022, 00:15:07 Обозревателям игр:
Наконец-то! За 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; }; (https://psv4.userapi.com/c235031/u298845592/docs/d48/bc478ed97ea3/izobrazhenie_2022-08-22_233619461.png?extra=GtEEOLo597dhL6eQ5kmzH1-yb-p6fDPcVP1s98fecINgozKq_8l7yzthXfrVNVHJD3Hzwc3Fi9N6xOeb4fmIF9e89KK7XSNvZ4ZfNBBe1KkcobYsLDIdT8MxXNU3e6g9YbFcI-EG3nbm3tJyqhBbJJtR) |