Колобок Зарегистрирован: 05.08.2005
Всего сообщений: 1
Откуда: Украина
Пол: Мужской
05 Авг 2005 Пт 19:23 Помогите с игрой на Си
Я сделал небольшую игру Автосимулятор, которая напоминает игру в тетрис когда машинка объезжала другие машинки которые падали сверху. Так вот у менгя проблема: я никак не могу придумать как сделать так чтобы машинки одновременно и падали и их можно было объезжать. А то они у меня двигаются только при нажатии клавиш. Прошу помочь
Текст программы ниже:
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
void GAME (void);
char Car[7290];
int gdriver = DETECT,gmode,errorcode;
int cnopka,cnopka2,X1cur,Y1cur,X2cur,Y2cur,LIFE;
int i,j,dx,dx2,fl,dy,x,y,k,cheker;
int place;
void message (int x,int y,int press,char *text)
{ int kol;
if (press==1)kol=0; else kol=15;
setcolor(kol);
outtextxy(x,y,text);
}
void sbar(int x,int y,int x1,int y1,int s,int col)
{
setfillstyle(s,col);
bar(x,y,x1,y1);
}
void knopkakl(int x,int y,int x1,int y1,int col,int press)
{int yes,no;
if (press==1)yes=0; else yes=15;
sbar(x,y,x1,y1,1,col);
setcolor(yes);
rectangle(x,y-1,x1,y1);
rectangle(x+1,y-1,x1-1,y1-1);
rectangle(x-5,y-5,x1+5,y1+5);
}
void MANU (void)
{ setfillstyle(1,0);
bar(0,0,650,650);
/*Drawing the button START*/
knopkakl(255,150,355,180,7,0);
message(265,160,1,"Start Game");
/*Drawing the button ABOUT*/
knopkakl(255,205,356,235,7,0);
message(265,215,1,"About Game");
/*Drawing button EXIT*/
knopkakl(255,255,356,285,7,0);
message(285,265,1,"Exit");
/*Printing help commands*/
setcolor(WHITE);
outtextxy(10,430,"Press:");
outtextxy(10,450,"S - to start the game");
outtextxy(220,450,"A - to read about game");
outtextxy(450,450,"ESC - for Exit");
}
void GAME (void)
{
/*Drawing player's Car*/
setfillstyle(1,0);
bar(0,0,650,650);
setcolor(WHITE);
setfillstyle(1,WHITE);
bar(305,350,345,353);
line(313,353,305,390);
line(337,353,345,390);
setfillstyle(9,BROWN);
bar(288,355,305,380);
bar(280,405,302,440);
bar(345,355,362,380);
bar(348,405,369,440);
setfillstyle(7,7);
bar(305,390,345,430);
rectangle(305,390,345,430);
setfillstyle(1,WHITE);
bar(312,400,338,420);
line(345,430,337,440);
line(304,430,312,440);
line(312,440,337,440);
/*Drawing the playing pole*/
rectangle(150,2,500,450);
rectangle(147,0,502,452);
/*Mooving the Car*/
X1cur=280; X2cur=100;
Y1cur=350; Y2cur=100;
dx=5;dx2=-5; dy=4;
LIFE=3; fl=0; cheker=0;
getimage(280,350,369,440,Car);
place=280;
while(cnopka!=27)
{
if(!fl)
{
x=rand()%3;y=5;
if(x==2) place+=125;
if(x==0) place-=125;
else if(x==1) place=280;
if(place<=155) place=155;
if(place>=405) place=405;
putimage(place,y,Car,XOR_PUT);
fl=1;
}
else
{
setfillstyle(1,0);bar(place,y,place+90,y+90);
putimage(place,y+=dy,Car,XOR_PUT);
if(y+dy>=352){setfillstyle(1,0);bar(place,y,place+90,y+90);
fl=0; cheker+=1;if(cheker==10) dy+=1;}
{
if (cheker==100)
{
setcolor(WHITE);
outtextxy(250,150,"Congratulations!");
outtextxy(250,170,"You Won this game");
outtextxy(250,190,"Press ESC to exit");
getch();break;exit(1);
}
}
}
cnopka=getch();
switch(cnopka)
{
case 77:{setfillstyle(1,0);bar(X1cur,Y1cur,X1cur+90,Y1cur+90);
putimage(X1cur+=dx,Y1cur,Car,XOR_PUT);
if(X1cur+dx>=405) dx=0; else dx=5;break;}
case 75:{setfillstyle(1,0);bar(X1cur,Y1cur,X1cur+90,Y1cur+90);
putimage(X1cur+=dx2,Y1cur,Car,XOR_PUT);
if(X1cur+dx2<=155) dx2=0; else dx2=-5;break;}
case 27:exit(1);
}
}
}
void main(void)
{
initgraph(&gdriver, &gmode, "");
randomize();
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
MANU();
while(cnopka2!=27)
{
cnopka2=getch();
switch(cnopka2)
{case 's':{knopkakl(255,150,355,180,8,0);message(265,160,0,"Start Game");
delay(100);knopkakl(255,150,355,180,7,0);message(265,160,1,"Start Game");
delay(150);GAME();break;}
case 'a':{knopkakl(255,205,356,235,8,0);message(265,215,0,"About Game");
delay(100);knopkakl(255,205,356,235,7,0);message(265,215,1,"About Game");break;}
case 27:{knopkakl(255,255,356,285,8,0);message(285,265,0,"Exit");
delay(100); knopkakl(255,255,356,285,7,0);
message(285,265,1,"Exit");delay(100);break;}
}
}
closegraph();
}
[/url]