Если без файлов то так:
#include <iostream>
#include <fstream>
#include <cstdio>
#include <unistd.h>
#include <termios.h>
#include <sys/select.h>
using namespace std;
const int nado_sobrat=4; // всего вишней в лабиринте
int lvl=1; // номер уровня на котором сейчас играем
int sobrano_vishney=0; // количество собраных вишней
int vishnia_x[nado_sobrat] = {4, 10, 14, 22};
int vishnia_y[nado_sobrat] = {10, 1, 11, 18};
int sobrano[nado_sobrat];
int x = 0, y = 1; // начальная позиция в лабиринте
int z = 23, q = 1; // координаты выхода
int d = 22, s = 1; // координаты двери
int a[24][20] = {{1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,},
{1,0,1,0,0,1,0,1,0,0,0,1,1,1,1,0,0,0,0,1,},
{1,0,1,1,0,1,0,1,0,1,0,0,0,0,1,0,1,1,0,1,},
{1,0,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,1,0,1,},
{1,1,1,1,1,1,0,1,0,1,4,0,1,0,1,1,0,1,0,1,},
{1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,},
{1,0,1,1,0,1,1,1,1,1,0,0,1,0,1,1,1,1,0,1,},
{1,0,0,0,0,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,},
{1,1,1,1,1,1,0,1,1,1,0,0,0,0,1,0,1,1,1,1,},
{1,1,0,0,0,1,0,0,1,1,0,1,1,1,1,0,0,0,0,1,},
{1,4,0,1,0,0,0,0,0,1,0,0,0,0,1,1,1,1,0,1,},
{1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,1,},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,},
{1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,},
{1,0,1,0,0,0,0,0,0,0,1,4,0,0,0,0,1,1,0,1,},
{1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,0,0,0,1,},
{1,0,1,0,0,0,1,0,1,0,0,0,1,1,1,1,1,1,1,1,},
{1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,1,},
{1,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,},
{1,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,},
{1,0,1,0,1,0,0,0,1,0,1,1,1,1,1,1,0,1,0,1,},
{1,0,0,0,1,1,1,1,1,0,0,0,1,0,1,0,0,1,0,1,},
{1,5,1,0,0,0,0,0,1,1,1,0,0,0,1,0,1,1,4,1,},
{1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,}}; //игровое поле
void print_a() // выводим полезную информацию и лабиринт на экран
{
cout<<"Уровень "<<lvl<<endl; // Номер уровня
for (int i=0; i<24; i++)
{
for (int m=0; m<20; m++)
{
if (a[i][m]==1) cout<<"░░";
if (a[i][m]==0 || a[i][m]==3) cout<<" ";
if (a[i][m]==2) cout<<"╠╣";
if (a[i][m]==4) cout<<"••";
if (a[i][m]==5) cout<<"––";
}
cout<<endl;
}
cout<<"Вишней: "<<sobrano_vishney<<"/"<<nado_sobrat<<endl;
if (sobrano_vishney==nado_sobrat) cout<<"Дверь открыта"<<endl;
// если собрали все вишни сообщаем, что дверь открыта
}
int win()
{
if (a[23][1]==2) return 1; // если нашёл выход и открыл дверь то выиграл
else return 0;
}
void nonblock(int state)
{
struct termios ttystate;
tcgetattr(STDIN_FILENO, &ttystate);
if (state == 1)
{
ttystate.c_lflag &= ~ICANON;
ttystate.c_cc[VMIN] = 1;
}
else if (state == 0)
{
ttystate.c_lflag |= ICANON;
}
tcsetattr(0, TCSANOW, &ttystate);
}
int getch()
{
nonblock(1);
return fgetc(stdin);
nonblock(0);
}
void clear_scr()
{
cout<<"\033[H\033[J\033[m";
}
void motion()
{
char m;
m = getch(); // куда хочет пойти человек?
switch (m)
{
case 65 :
case 'w' : x--; break;
case 66 :
case 's' : x++; break; // обрабатываем ход
case 68 :
case 'a' : y--; break;
case 67 :
case 'd' : y++; break;
}
if (a[x][y]==0 || a[x][y]==3 || a[x][y]==4) a[x][y] = 2;
else // а если стенка ?
{
switch (m)
{
case 65 :
case 'w' : x++; break;
case 66 :
case 's' : x--; break; // возвращаем всё как было
case 68 :
case 'a' : y++; break;
case 67 :
case 'd' : y--; break;
}
a[x][y] = 2;
}
}
int main()
{
do // основной цикл игры
{
if (sobrano_vishney==nado_sobrat) a[d][s] = 0;
// собрали все вишни? откроем дверь
for (int i=0; i<nado_sobrat; i++)
{
if (sobrano[i]!=1) // что бы 1 вишню не брали 2 раза
if (x==vishnia_x[i] && y==vishnia_y[i])
{
sobrano_vishney++; sobrano[i]=1; // подобрали вишню
}
}
print_a();
a[x][y] = 0;
motion();
clear_scr();
}
while (win()==0); // пока не выиграл
print_a();
if (lvl<5) cout<<"Уровень пройден";
cout<<endl<<"Ты выиграл!"<<endl;
return 0;
}