Game Maker - создание игр | HellRoom Games
Январь 13, 2025, 16:06:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Консольная игра "Обвал"  (Прочитано 2165 раз)
0 Пользователей и 1 Гость смотрят эту тему.
iwa306
Новичок
*

Репутация: 1
Offline Offline

Пол: Мужской
API: GameMaker 8.1 Standard
Сообщений: 4



« : Август 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;
};


Записан

!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~АБВГДЕЖЗИЙ КЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп????????????????????????????????????????????????рстуфхцчшщъыьэюяЁёЄєЇїЎў°?·?№¤?              во всём виноват тип данных char
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

HellRoom Games © 2006-2012 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines
Страница сгенерирована за 0.121 секунд. Запросов: 27.