Смекни!
smekni.com

Игровая программа (стр. 3 из 3)

if Speed>0 then Speed:=0;//скоростьторможения

//////////////////////////////////////////////////////////

if (Gas)and(CountFuel<>0) then

begin

GasDeley:=GasDeley+0.0005;

if GasDeley>=1 then Speed:=Speed+0.00005 else Speed:=-0.025;

if Speed>-0.01 then

begin

Speed:=-0.01;

Gas:=false;

GasDeley:=1;

end;

end

else

if Speed<-0.01 then Speed:=-0.01;//ограничение скорости

//////////////////////////////////////////////////////////

Y_Kord:=Y_Kord+Speed;//наращивание скорости

if EnymiGoToWay then begin

Y_Enymi:=Y_Enymi+Speed+0.0085;

X_Enymi:=X_Enymi+(0.001*LR);

if X_Enymi>=Right_death_dot then LR:=-1;

if X_Enymi<=Left_death_dot then LR:=1;

if (Y_Enymi>1.2)or(Y_Enymi<-1.2)then EnymiGoToWay:=false;

end;

if FuelGoToWay then

Y_KordFuel:=Y_KordFuel+Speed; //Перемещениеэлементов

if (Speed<>0)and(Speed<-0.00002)and(CountFuel>0) then

CountFuel:=CountFuel+MinusFuel/(Speed*50); //Уменьшениетоплива

if (CountFuel<=0)or(CountKM>=20) then begin Gas:=false; GasDeley:=1; Speed:=Speed+0.000003; end;

if (Speed<-0.005)and(MinusFuel=0.00002) then MinusFuel:=MinusFuel*10 else

if MinusFuel=0.0002 then MinusFuel:=MinusFuel/10;

if Y_Kord<=-2.0 then Y_Kord:=0;//перестановка кадров

if X_KordCar>=Right_death_dot then

begin

X_KordCar:=Right_death_dot;//ограничениесправа

if Speed<-0.001 then begin Speed:=Speed+0.00002; GasDeley:=1; end;//Уменьшениескоростиприприкосновениикбардюрусправап

end;

if X_KordCar<=Left_death_dot then

begin

X_KordCar:=Left_death_dot;//ограничениеслева

if Speed<-0.001 then begin Speed:=Speed+0.00002; GasDeley:=1; end;//Уменьшениескоростиприприкосновениикбардюруслева

end;

end;

end

else

if (PressedKey[27]=true)and(CountTickTimer>100) then

begin

Selected_Menu_item:='';

Menu_item:=2;

CountTickTimer:=0;

Speed:=0.0;

Pause:=false;

sound:=false;

CountFuel:=8;

CountKM:=0;

end;

if Selected_Menu_item='' then //Нажатаклавиша Esc вигреилиничегоневыбрано

begin

if SpeedGL.MediaPlayer1.FileName<>'Textures&bsol;Video&bsol;SL_Start_Logo.avi' then

if SpeedGL.MediaPlayer1.FileName<>'Sound&bsol;Main_Menu.mp3' then begin

SpeedGL.MediaPlayer1.FileName:='Sound&bsol;Main_Menu.mp3';

SpeedGL.MediaPlayer1.Open;

SpeedGL.MediaPlayer1.Play;

end;

if CountTickTimer>100 then begin

if PressedKey[27]=true then

begin

SpeedGL.MediaPlayer1.Stop;

SpeedGL.MediaPlayer1.Close;

SpeedGL.MediaPlayer1.FileName:='';

Selected_Menu_item:='Exit';

CountTickTimer:=0;

end;

if PressedKey[40]=true then

begin

Inc(Menu_item);

PlaySound('Sound&bsol;Select_MainMenu.wav',0,SND_ASYNC);

CountTickTimer:=0;

end; //вниз

if PressedKey[38]=true then

begin

Dec(Menu_item);

PlaySound('Sound&bsol;Select_MainMenu.wav',0,SND_ASYNC);

CountTickTimer:=0;

end;//вверх

if CountTickTimer>1000 then CountTickTimer:=110;

end;

if Menu_item>4 then Menu_item:=1;//ограничение

if Menu_item<1 then Menu_item:=4;// впределах 4 пунктов

if PressedKey[13]=true then begin

PlaySound('Sound&bsol;Choose_MainMenu.wav',0,SND_ASYNC);

case Menu_item of

1:begin

Selected_Menu_item:='Start';

Score:=0;

FuelGoToWay:=false;

NextKM_GenerFuel:=1;

CountKM:=0;

CountFuel:=8;

CountNitro:=0;

MinusFuel:=0.00002;

Y_KordFuel:=1.5;

FuelGoToWay:=false;

GasDeley:=1;

Gas:=false;

NextKmEnymy:=0.3;

Y_Enymi:=1.2;

end;

2:begin Selected_Menu_item:='Car'; end;

3:begin Selected_Menu_item:='Actors'; end;

4:begin Selected_Menu_item:='Exit'; end;

end;

end;

end;

if CountTickTimer>100 then begin

if Selected_Menu_item='Actors' then //Нажатаклавиша Sound

begin

if SpeedGL.MediaPlayer1.FileName<>'Sound&bsol;Actor.mp3' then begin

SpeedGL.MediaPlayer1.FileName:='Sound&bsol;Actor.mp3';

SpeedGL.MediaPlayer1.Open;

SpeedGL.MediaPlayer1.Play;

end;

if PressedKey[27]=true then

begin

Selected_Menu_item:='';

SpeedGL.MediaPlayer1.Stop;

SpeedGL.MediaPlayer1.Close;

SpeedGL.MediaPlayer1.FileName:='';

CountTickTimer:=0;

end;

end;

if Selected_Menu_item='Car' then //Нажатаклавиша Car

begin //Car

if SpeedGL.MediaPlayer1.FileName<>'Sound&bsol;Garage.mp3' then begin

SpeedGL.MediaPlayer1.FileName:='Sound&bsol;Garage.mp3';

SpeedGL.MediaPlayer1.Open;

SpeedGL.MediaPlayer1.Play;

end;

if PressedKey[27]=true then

begin

Selected_Menu_item:='';

SpeedGL.MediaPlayer1.Stop;

SpeedGL.MediaPlayer1.Close;

SpeedGL.MediaPlayer1.FileName:='';

CountTickTimer:=0;

OldSelectMenyItem:='Car';

end;

if PressedKey[37]=true then

begin

Dec(CarMenuItem);

CountTickTimer:=0;

LeftButton:=true;

PlaySound('Sound&bsol;Select_CarMenu.wav',0,SND_ASYNC);

end;

if PressedKey[39]=true then

begin

Inc(CarMenuItem);

CountTickTimer:=0;

RightButton:=true;

PlaySound('Sound&bsol;Select_CarMenu.wav',0,SND_ASYNC);

end;

if CarMenuItem>4 then CarMenuItem:=1;

if CarMenuItem<1 then CarMenuItem:=4;

end; //Car

end;//CountTickTimer

if Selected_Menu_item='Exit' then //Нажатаклавиша Exit вгланомменю

begin

SpeedGL.MediaPlayer1.Free;

Application.Terminate;

Application.ProcessMessages;

end;

InvalidateRect(SpeedGL.Handle, nil, False);//перерисовка

if (Symvol=0)and

(PressedKey[78]=true)and

(CountNitro>0)and

(GasDeley=1) then

begin

Gas:=true;

CountNitro:=CountNitro-1;

GasDeley:=0;

PlaySound('Sound&bsol;Start_Nitro.wav',0,SND_ASYNC);

end;

end;


событие OnPaint:

procedure TSpeedGL.FormPaint(Sender: TObject);

var

ps:TPaintStruct;

begin

BeginPaint(dc,ps);

if Selected_Menu_item='' then

begin

case Menu_item of

1:begin LeftTiresMeny:=-0.849; RightTiresMeny:=0.8; TopTiresMeny:=0.76; end;

2:begin LeftTiresMeny:=-1.1; RightTiresMeny:=1.0; TopTiresMeny:=0.4; end;

3:begin LeftTiresMeny:=-0.8; RightTiresMeny:=0.8; TopTiresMeny:=0.0; end;

4:begin LeftTiresMeny:=-0.8; RightTiresMeny:=0.8; TopTiresMeny:=-0.58; end;

end;

if OldSelectMenyItem='Car' then begin

if RemoveMeny>=0.0 then begin RemoveMeny:=0.0; OldSelectMenyItem:='' end else

RemoveMeny:=RemoveMeny+0.018;

glCallList(Background);

glPushMatrix;

glTranslatef(RemoveMeny,0.0,0.0);

glCallList(StringMeny);

glPopMatrix;

end

else begin

glCallList(Background);//Загрузкафона

glCallList(StringMeny);//Загрузканадписейвменю

end;

if (Selected_Menu_item<>'Car')and(RemoveMeny=0.0) then begin

Angel:=Angel+1;

if Angel=360 then Angel:=0;

glCallList(8);//Загрузкаколеса

glPushMatrix;

glScalef(0.5,0.66,0.5);

glTranslatef(LeftTiresMeny,TopTiresMeny,0.0);

glRotatef(Angel,0.0,0.0,1.0);

glCallList(Tires);

glPopMatrix;

glPushMatrix;

glScalef(0.5,0.66,1.0);

glTranslatef(RightTiresMeny,TopTiresMeny,0.0);

glRotatef(Angel,0.0,0.0,1.0);

glCallList(Tires);

glPopMatrix;

end;

end;

if Selected_Menu_item='Start' then //Нажатаклавиша Start играначалась

begin //Start

// glClear(GL_COLOR_BUFFER_BIT); //медленноестирание

glPushMatrix;

glTranslatef(0.0,Y_Kord,0.0);

glCallList(WayDesert_1);

glPopMatrix;

glPushMatrix;

glTranslatef(0.0,Y_Kord+1.99,0.0);

glCallList(WayDesert_1);

glPopMatrix;

if not Pause then

if Speed<>0 then CountKM:=CountKM+abs(Speed/27);//количестопройденыхкилометров

// Caption:=FloatToStrF(CountKM,ffNumber,6,3);

//Генерирование Бензина или Нитро на дороге

if (CountKM>NextKM_GenerFuel)and(FuelGoToWay=False)and(speed<>0) then

begin

if Random(2)=1 then X_KordFuel:=Random*0.5 else X_KordFuel:=-Random*0.5;

FuelGoToWay:=true;

Y_KordFuel:=1.5;

Inc(NextKM_GenerFuel,1);

if not FuelOrNitro then FuelOrNitro:=true else FuelOrNitro:=false;

end;

if (FuelGoToWay)and(Y_KordFuel<-1.2) then FuelGoToWay:=False;

//Прорисовка Бензина или Нитро

if not KordObjectItems(X_KordFuel,Y_KordFuel,0.05,0.065,X_KordCar,Y_KordCar,CarXPogresh,CarYPogresh) then

begin // KordObject

glPushMatrix;

glTranslatef(X_KordFuel,Y_KordFuel,0.0);

if FuelOrNitro then glCallList(ItemFuelList) else glCallList(ItemNitroList);

glPopMatrix;

end//KordObject

else

begin

Y_KordFuel:=1.5;

FuelGoToWay:=False;

PlaySound('Sound&bsol;Get_Nitro_Fuel.wav',0,SND_ASYNC);

if FuelOrNitro then if CountFuel<20 then CountFuel:=CountFuel+1;

if not FuelOrNitro then if CountNitro<=10 then CountNitro:=CountNitro+1;

end;

//////////////////////////////////////////////////////

{Caption:=FloatToStrF(CountFuel,ffNumber,6,3)+' '+

FloatToStrF(CountNitro,ffNumber,6,3)+' '+

FloatToStrF(CountKM,ffNumber,6,3)+' '+

FloatToStrF(GasDeley,ffNumber,6,3);}

//////////////////////////////////////////////////////

if (CountKM>NextKmEnymy)and(EnymiGoToWay=False)and(speed<>0) then

begin

NumbrCar:=random(9)+1;

EnymiGoToWay:=true;

NextKmEnymy:=NextKmEnymy+0.1;

Y_Enymi:=1.2;

end;

if (EnymiGoToWay)and(Y_Enymi<-1.2) then EnymiGoToWay:=False;

if not KordObjectEnimy(X_Enymi,Y_Enymi,0.08,0.130,X_KordCar,Y_KordCar,CarXPogresh-0.05,CarYPogresh-0.05) then

begin // KordObject

glPushMatrix;

glTranslatef(X_Enymi,Y_Enymi,0.0);

glCallList(EnymiCars[NumbrCar]);

glPopMatrix;

end//KordObject

else

begin

Y_Enymi:=1.2;

EnymiGoToWay:=False;

GasDeley:=1;

Gas:=false;

Speed:=-0.001;

PlaySound('Sound&bsol;Denger_Sound.wav',0,SND_ASYNC);

if CountFuel>0 then CountFuel:=CountFuel-1;

if CountFuel<0 then CountFuel:=0;

end;

//рисованиемашины

if ChooseCar='ShotWarKiller' then begin

glPushMatrix;

glTranslatef(X_KordCar,Y_KordCar,0.0);

glCallList(WarKiller);

glPopMatrix;

end;

if ChooseCar='ShotFlash' then begin

glPushMatrix;

glTranslatef(X_KordCar,Y_KordCar,0.0);

glCallList(Flash);

glPopMatrix;

end;

if ChooseCar='ShotGembic' then begin

glPushMatrix;

glTranslatef(X_KordCar,Y_KordCar,0.0);

glCallList(Gembic);

glPopMatrix;

end;

if ChooseCar='ShotGlass' then begin

glPushMatrix;

glTranslatef(X_KordCar,Y_KordCar,0.0);

glCallList(Glass);

glPopMatrix;

end;

//Проигрыш и выигрышь в игре

if (CountFuel<=0)and(CountKM<20) then begin glCallList(GameOver); if not sound then sound:=true; end;

if CountKM>=20 then begin glCallList(YouWin); if not sound then sound:=true; end;

if ((CountFuel<=0)or(CountKM>=20))and(Speed>=0)then begin

glPushMatrix;

glTranslatef(0.0,-0.4,0.0);

glCallList(PressEsc);

glPopMatrix

end;

//Игровоеменю

glPushMatrix;

glTranslatef(0.7,0.58,0.0);

glScalef(1.5,1.5,1.0);

glCallList(GameMenu);

glPopMatrix;

//Надписи на меню

glPushMatrix;

glTranslatef(0.64,0.68,1.0);

glCallList(FontList);

glPopMatrix;

//

if Pause then glCallList(PauseToGame);

end; //Start

if Selected_Menu_item='Car' then //Нажатаклавиша Car

begin //Car

if RemoveMeny<=-0.5 then RemoveMeny:=-0.5 else RemoveMeny:=RemoveMeny-0.018;

glCallList(Background);

glPushMatrix;

glTranslatef(RemoveMeny,0.0,0.0);

glCallList(StringMeny);

glPopMatrix;

if RemoveMeny<=-0.5 then

begin

//Меню

glPushMatrix;

glTranslatef(0.5,0.2,0.0);

glCallList(SubMenuInCar);

glPopMatrix;

DeleyButtonInCarMeny;

//Выбираетсямашина

case CarMenuItem of

1:begin

//ShotWarKiller

glPushMatrix;

glTranslatef(0.5,0.12,0.0);

glCallList(ShotWarKiller);

glPopMatrix;

ChooseCar:='ShotWarKiller';

CarXPogresh:=XPogreshWarKiller;

CarYPogresh:=YPogreshWarKiller;

end;

2:begin

//ShotFlash

glPushMatrix;

glTranslatef(0.5,0.12,0.0);

glCallList(ShotFlash);

glPopMatrix;

ChooseCar:='ShotFlash';

CarXPogresh:=XPogreshFlash;

CarYPogresh:=YPogreshFlash;

end;

3:begin

//ShotGembic

glPushMatrix;

glTranslatef(0.5,0.12,0.0);

glCallList(ShotGembic);

glPopMatrix;

ChooseCar:='ShotGembic';

CarXPogresh:=XPogreshFlash;

CarYPogresh:=YPogreshFlash;

end;

4:begin

//ShotGlass

glPushMatrix;

glTranslatef(0.5,0.12,0.0);

glCallList(ShotGlass);

glPopMatrix;

ChooseCar:='ShotGlass';

CarXPogresh:=XPogreshFlash;

CarYPogresh:=YPogreshFlash;

end;

end;//Case

end;//RemoveMeny

end; //Car

if Selected_Menu_item='Actors' then //Нажатаклавиша Actors

begin

glCallList(Actor);

end;

if Selected_Menu_item='Exit' then //Нажатаклавиша Exit

begin

end;

SwapBuffers(DC);

EndPaint(DC,ps);

{if Selected_Menu_item='Start'then begin

Canvas.Brush.Color:=clWhite;

Canvas.TextOut(500,40,'Бензин: '+FloatToStrF(CountFuel,ffNumber,6,3)+'л');

Canvas.TextOut(500,55,'Нитро: '+FloatToStrF(CountNitro,ffNumber,6,3)+'кг/см');

Canvas.TextOut(500,70,'К.метры: '+FloatToStrF(CountKM,ffNumber,6,3)+'км');

end;}

//

Caption:=StatisticCaption;

//Поддержка аппаратного ускорителя и версия OpenGL клавиша 'a'

if PressedKey[65]=true then

Caption:='OpenGL: '+

StrPas(glGetString(GL_VERSION))+

' '+

StrPas(glGetString(GL_VENDOR))+

' '+

StrPas(glGetString(GL_RENDERER));

if PressedKey[70]=true then //Показывать Fps -- клавиша 'f'

begin

newCount:=GetTickCount;

Inc(frameCount);

If abs(newCount - lastCount) > 1000 then

begin

StatisticCaption:='FPS: '+FloatToStr(frameCount);

lastCount := newCount;

frameCount := 0;

end;

end;

if PressedKey[75]=true then

StatisticCaption:='X='+FloatToStrF(xpos,ffNumber,4,3)+

' '+'Y='+FloatToStrF(ypos,ffNumber,4,3);

if (PressedKey[70]=false)and

(PressedKey[75]=false)and

(PressedKey[65]=false)then StatisticCaption:='SpeedLine';

end;

procedure TSpeedGL.FormDestroy(Sender: TObject);

begin

//glDeleteLists(1,1);

timeKillEvent(uTimerID);

wglMakeCurrent (0, 0);

wglDeleteContext (hrc);

ReleaseDC (Handle, DC);

end;

procedure TSpeedGL.FormMouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

begin

//////////////////////////////////////////////

xpos:=2*X/ClientWidth-1;

ypos:=2*(ClientHeight-Y)/ClientHeight-1;

//////////////////////////////////////////////

if Selected_Menu_item='' then begin //Selected_Menu_item

if (xpos>-0.3)and(ypos>0.4)and

(xpos<0.3)and(ypos>0.4)and

(xpos<0.3)and(ypos<0.6)and

(xpos>-0.3)and(ypos<0.6)then begin

if Menu_item<>1 then

PlaySound('Sound&bsol;Select_MainMenu.wav',0,SND_ASYNC);

Menu_item:=1;

end;

if (xpos>-0.3)and(ypos>0.15)and

(xpos<0.3)and(ypos>0.15)and

(xpos<0.3)and(ypos<0.35)and

(xpos>-0.3)and(ypos<0.35)then begin

if Menu_item<>2 then

PlaySound('Sound&bsol;Select_MainMenu.wav',0,SND_ASYNC);

Menu_item:=2;

end;

if (xpos>-0.3)and(ypos>-0.1)and

(xpos<0.3)and(ypos>-0.1)and

(xpos<0.3)and(ypos<0.1)and

(xpos>-0.3)and(ypos<0.1)then begin

if Menu_item<>3 then

PlaySound('Sound&bsol;Select_MainMenu.wav',0,SND_ASYNC);

Menu_item:=3;

end;

if (xpos>-0.3)and(ypos>-0.5)and

(xpos<0.3)and(ypos>-0.5)and

(xpos<0.3)and(ypos<-0.3)and

(xpos>-0.3)and(ypos<-0.3)then begin

if Menu_item<>4 then

PlaySound('Sound&bsol;Select_MainMenu.wav',0,SND_ASYNC);

Menu_item:=4;

end;

{if Selected_Menu_item='Start' then

begin

if

end;}

end; //Selected_Menu_item

end;