/*Простейшая игра, управление квадратиком с помощью клавиатуры.
V.1.0 by Дмитрий Резванов*/
#include <graphics.h>
#include <stdio.h>
void Draw(int x,int y,int color)//объявляем функцию, рисующую квадрат со стороной 30 пикселей
{
setfillstyle(1,color);//устанавливаем стиль заливки-сплошная, цвет-color
bar(x,y,x+32,y+32);//рисуем квадрат с координатами углов х1,у1,х2,у2(x,y,x+30,y+30)
setcolor (11);//устанавливаем 11 цвет
moveto (x+15,y+15);//а дальше до void Labirint-рисование рожи и глаз))
lineto(x+30,y+10);
moveto(x+15,y+15);
lineto(x+30,y+20);
setcolor(11);
moveto(x+5,y+5);
lineto(x+5,y+10);
lineto(x+10,y+10);
lineto(x+10,y+5);
lineto(x+5,y+5);
moveto(x+20,y+5);
lineto(x+25,y+5);
lineto(x+25,y+10);
lineto(x+20,y+10);
lineto(x+20,y+5);
}
void Labirint(int a,int b,int c)//объявдяем функцию, рисующую лабиринт
{
setcolor(0);//устанавливаем  чёрный цвет
moveto (0,360);//курсор установить в точку х,у(0,360)
lineto (150,360);//линия из точки х,у (0,360)в точку х,у(150,360)
lineto (150,320);//линия из точки х,у(150,360) в точку х,у(150,320)
line (190,320,190,400);//линия х1,у1,х2,у2(190,320,190,400)
moveto(190,320);//курсор в точку х,у(190,320)
lineto(290,320);//линия из точки(190,320) в точку (290,320) 
moveto(330,280);//курсор в точку (330,280)
lineto(150,280);//линия из точки (330,280) в точку (150,280)
lineto(150,320);//линия из точки (150,280) в точку (150,320) 
moveto(290,320);//курсор в точку (290,320)
lineto(290,400);//линия из точки (290,320) в точку (290,400)
moveto(330,280);//курсор в точку (330,280)
lineto(330,360);//линия из точки(330,280) в точку (330,360) 
lineto(370,360);//линия из точки (330,360) в точку (370,360)
lineto(370,240);//линия из точки (370,360) в точку (370,240)
moveto(410,400);//курсор в точку (410,400)
lineto(410,280);//диния из точки (410,400) в точку (410,280)
lineto(500,280);//линия из точки (410,280) в точку (500,280)
moveto(370,240);//курсор в точку(370,240)
lineto(460,240);//линия из точки (370,240) в точку (460,240)
moveto(500,280);//курсор в точку (500,280)
lineto(500,180);//линия из точки (500,280) в точку (500,180)
lineto(320,180);//диния из точки (500,180) в точку (320,180)
lineto(320,220);//линия из точки (320,180) в точку (320,220)
lineto(260,220);//линия из точки (320,220) в точку (260,220) 
lineto(260,180);//линия из точки (260,220) в точку (260,180)
lineto(100,180);//линия из точки (260,180) в точку (100,180)
lineto(100,300);//линия из точки (100,180) в точку (100,300)
lineto(60,300);//линия из точки (100,300) в точку (60,300)
lineto(60,160);//линия из точки (60,300) в точку (60,160) 
lineto(140,160);//линия из точки (60,160) в точку (140,160)
lineto(340,160);//линия из точки (140,160) в точку (340,160)
lineto(340,155);//линия из точки (340,160) в точку (340,155)
lineto(480,155);//линия из точки(340,155) в точку (480,155)
lineto(480,40);//линия из точки (480,155) в точку (480,40)
lineto(20,40);//линия из точки(480,40) в точку (20,40)
moveto(460,240);//курсор в точку (460,240) 
lineto(460,220);//линия из точки (460,240) в точку (460,220)
lineto(360,220);//линия из точки (460,220) в точку (360,220)
lineto(360,260);//линия из точки (360,220) в точку (360,260)
lineto(220,260);//линия из точки (360,260) в точку (220,260)
lineto(220,220);//линия из точки (220,260) в точку (220,220)
lineto(140,220);//линия из точки (220,220) в точку (140,220)
lineto(140,340);//линия из точки (140,220) в точку (140,340)
lineto(20,340);//линия из точки (140,340) в точку (20,340)
lineto(20,120);//линия из точки (20,340) в точку (20,120)
lineto(340,120);//линия из точки (20,120) в точку (340,120)
lineto(440,120);//линия из точки (340,120) в точку (440,120)
lineto(440,80);//линия из точки (440,120) в точку (440,80)
lineto(20,80);//линия из точки (440,80) в точку (20,80)
setcolor (12); //устанавливаем розовый цвет
line (20,40,20,80);//линия из точки (40,40) в точку (40,80)
setcolor(5);//устанавливаем фиолетовый цвет
outtextxy(150,20,"4epB94OK");//выводим выражение в кавычках
}
const int h=5;
main()//основная функция main()
{
int x,y,code,count=0,f,m[150],i,e;//оъявление переменных, count=переменная-счётчик, сразу устанавливаем начальное значение=0
initwindow(520,400);//открытие окна графики
x=10,y=369;//начальные значения х и у
setfillstyle(1,9);//устанавливаем стиль заливки-сплошная, цвет-светло-синий
bar(0,0,520,400);//закрасить поле светло-синим цветом
printf ("Червячок\n");
printf("Game by Dmitry Rezvanov\nСделайте свой выбор:\nНажмите 1 для старта\n2 для выхода: ");
scanf ("%d",&f);
Labirint(x,y,3);//вызов функции, рисующей лабиринт(на параметры не обращай внимание, писал от балды)
/*Надо сделать так чтобы квадрат не заходил на нарисованные линии.Cпециально добавлена переменная счётчик count, 
планирую ввести счёт соприкосновений квадрата с линиями.Каждый раз при заходе на линии переменная увеличивает 
значение на 1. Если счётчик достигнет скажем 5, то программа выходит по break.
*/
while (count < 2)//бесконечный цикл, выход только по break!!!
{
if (f==1)
{
Draw(x,y,4);//Вызов функции Draw, рисуем красный квадрат с координатами углов  х1,у1,х2,у2(0,369,30,399)
code=getch();/*Если переменная code равна функции getch()(если нажата клавиша, то getch() возвращает код клавиши 
и код пишется в переменную code)*/
if(code==27)//Если код равен 27(этот код имеет клавиша Esc.), то выходим из цикла и завершаем выполнение программы
{
break;//выход их цикла
}
else
{
Draw (x,y,6);//рисуем светло синий квадрат
switch(code)//если переменная code....
{
case 75:x--;break;//будет равна 75, то уменьшаем х на 1
case 77:x++;break;//будет равна 77, то увеличиваем х на 1 
case 72:y--;break;//будет равна 72, то уменьшаем у на 1
case 80:y++;break;//будет равна 80, то увеличиваем у на 1
}
if((x<=150 && y==360)||((x==150) && (y>=280)&&(y<=360))||((x<=330 && x>=150)&& y==280)||((x+30==190)&&(y+30>=320 && y+30<=400))||((x+30>=190)&&(x+30<=290)&&(y+30==320))||((x==290)&&((y>=320) && (y<=400)))||(((x<=370)&&(x>=330))&&(y==360))||(((y>=240)&&(y<=360))&&(x==370))||((x+30==330)&&((y+30>=280)&&(y+30<=360)))||(((x<=460)&&(x>=370))&&(y==240))||(((x+30<=460)&&(x+30>=360))&&(y+30==220))||(((y>=220)&&(y<=240))&&(x==460))||((x+30==360)&&((y+30>=220)&&(y+30<=260)))||(((x+30<=360)&&(x+30>=220))&&(y+30==260))||((x==220)&&(y>=220 && y<=260))||((x+30>=140 && x+30<=220) && y+30==220)||((y+30>=220 && y+30<=340) && x+30==140)||((x+30<=140 && x+30>=20)&&(y+30==340))||((y>=120 && y<=340)&&(x==20))||((x>=20 && x<=440)&& y==120)||((y>=80 && y<=120)&&(x==440))||((x+30>=20 && x+30<=440)&& y+30==80)||((y+30<=400 && y+30>=280)&& (x+30==410))||((x+30>=410 && x+30<=500)&&(y==280))||((y+30>=180 && y+30<=280)&&(x+30==500))||((x<=500 && x>=320)&&(y==180))||((y>=180 && y<=220) && x==320)||((x>=260 && x<=320)&& y==220)||((y+30>=180 && y+30<=220)&& x+30==260) )
{
count++;
setcolor (15);
printf("%d",count);
}
else
{
switch(count)
{
case 0:outtextxy(440,10,"HP=1");break;continue;
case 1:outtextxy(440,10,"HP=0");break;continue;

}
if(x<=20 && y<=60)
{
outtextxy(280,180,"FINISH!!!!");
delay(3000);
break;
}
else
{
continue;
}
}
}
}
else
{
printf("Пока!");
delay(500);
break;
}
}
if(count==2)
{
outtextxy(280,180,"GAME OVER");
delay (3000);
}
else
{
closegraph();//закрываем окно с графикой
}
}//конец программы


