- •2.Работа с двумерными массивами
- •1 N
- •1 M
- •2.3 Код программы
- •2.4.Запуск программы
- •3.Работа с графическими фигурами
- •3.1. Алгоритм решения задачи
- •3.2. Описание программы
- •3.3. Код программы
- •3.4. Запуск программы
- •4.Создание игры
- •4.2 Код програмы
- •4.3 Запуск програмы.
- •5.Главное меню программы
- •5.1. Код программы
- •5.2. Запуск программы
3.3. Код программы
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<graphics.h>
#include<conio.h>
#include<dos.h>
void main()
{
int gdriver = DETECT, gmode, errorcode,i;
initgraph(&gdriver, &gmode, "c:\\borlandc\\bgi");
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
{
int i,bv,q;
bv=0;
float y,xn=470,xk=170,x,prov,pr;
int cc,ce,buffer;
x=xn;
e:
setbkcolor(bv);
do
{
buffer = kbhit();
if (buffer)
goto w;
prov=x/10;
pr=int(prov);
if(prov==pr){cc=rand()%16;
while(cc==4) cc=rand()%16;
ce=rand()%16;
while(ce==cc) ce=rand()%16;}
cleardevice();
y=240+sqrt(22500-(x-320)*(x-320));
setcolor(ce);
rectangle(x-45,y-50,x+45,y+50);
setfillstyle(1,ce);
floodfill(x,y,ce);
setcolor(cc);
circle(x,y,40);
setfillstyle(1,cc);
floodfill(x,y,cc);
delay(25);
x-=2;
}while(x>xk);
x=xk;
do
{
buffer = kbhit();
if (buffer)
goto w;
prov=x/10;
pr=int(prov);
if(prov==pr){cc=rand()%16;
while(cc==4) cc=rand()%16;
ce=rand()%16;
while(ce==cc) ce=rand()%16;}
cleardevice();
y=240-sqrt(22500-(x-320)*(x-320));
setcolor(ce);
rectangle(x-45,y-50,x+45,y+50);
setfillstyle(1,ce);
floodfill(x,y,ce);
setcolor(cc);
circle(x,y,40);
setfillstyle(1,cc);
floodfill(x,y,cc);
delay(25);
x+=2;
}
while(x<xn);
w:
q=getch();
switch(q)
{
case 49: if (bv > 0) bv-=1; goto e;
case 50: if (bv < 15) bv+=1; goto e;
case 27: goto t;
default: goto w;
}
t:
setbkcolor(0);
getch();
}
3.4. Запуск программы
Рисунок 3.2 –Начало движения фигур.
Рисунок 3.3 – Движение фигур, изменения цвета заднего фона.
4.Создание игры
Условие: Создать игру «Подбери ключ». Перед играющим 4 закрытые двери и 4 ключа. Каждый из которых может открыть несколько дверей. Открыть все двери 8 попытками.
4.1 АЛГОРИТМ РЕШЕНИЯ ЗАДАЧИ
Решение организовано следующим образом: выполняется начальная заливка фона, далее в цикле прорисовываются двери и ключи(в виде прямоугольников).Задается возможности ключей открывать двери(матрица исходов где строки ключи а столбцы двери).Задается выбор ключей и дверей путем смены цвета; и непосредственно открывание дверей. В конце выводится результат игры.
Упрощенная блок схема выглядит так:
Рис.4.1-Блок-схема
Начало
Заливка фона
Рисование дверей и ключ.
Задание матриц. исходов.
Выбор ключ.,дверей
Открытие дверей
Результат игры
Конец
4.2 Код програмы
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<graphics.h>
#include<conio.h>
#include<dos.h>
void game()
{
int gdriver = DETECT, gmode, errorcode,i;
initgraph(&gdriver, &gmode, "c:\\borlandc\\bgi");
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
{
clrscr();
cleardevice();
int t,i,j,x1=10,y1=10,x2=140,y2=300,fk=-1,fd=-1,key[4][4],x[4],y[4],h=8,win=0;
setfillstyle ( 1, 4 );
setcolor(15);
for (i=0;i<4;i++)
{
setfillstyle (1,4);
bar(x1+i*160,y1,x2+i*160,y2);
setfillstyle (1,2);
bar(110+i*160,160,130+i*160,170);
rectangle (110+i*160,160,130+i*160,170);
rectangle (x1+i*160,y1,x2+i*160,y2);
bar(10+i*30,450,30+i*30,470);
}
//////////////////////////////////////////////////////////////
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
key[i][j]=0;
}
for(i=0;i<4;i++)
{
x[i]=rand()%4;
y[i]=rand()%4;
for(j=0;j<i;j++)
if(y[j]==y[i])i--;
}
for(i=0;i<4;i++)
key[x[i]][y[i]]=1;
for(i=0;i<4;i++)
{
printf("\n");
for(j=0;j<4;j++)
printf("%d ",key[i][j]);
}
//////////////////////////////////////////////////////////////
while (h>0)
{
j=0;
while(j!=13)
{
j=getch();
switch(j)
{
case 51: goto e;
case 50:fk++;if(fk>3)fk=0;break;
case 49:fk--;if(fk<0)fk=3;break;
}
for (i=0;i<4;i++)
{
if(i==fk)setfillstyle (1,1);
else setfillstyle (1,2);
bar(10+i*30,450,30+i*30,470);
}
}
j=0;
while(j!=13)
{
j=getch();
switch(j)
{
case 27: goto e;
case 50:fd++;if(fd>3)fd=0;break;
case 49:fd--;if(fd<0)fd=3;break;
}
for (i=0;i<4;i++)
{
if(i==fd)setcolor (1);
else setcolor (15);
rectangle (x1+i*160,y1,x2+i*160,y2);
}
}
if(key[fk][fd]==1){setfillstyle(1,0);bar(x1+fd*160,y1,x2+fd*160,y2);win++;}
if(win==4)
{
clrscr();
cleardevice();
printf("you win");
getch();
game();
}
h--;
}
clrscr();
cleardevice();
printf("you lost");
game();
e:
getch();}
void main()
{
game();
getch();
}