procedure FNTimeCallBack (uTimerID, uMessage: UINT; dwUser, dw1, dw2: DWORD) stdcall;
if (CountFuel> 0) and (CountKM <20) then if PressedKey [38] = true then Speed: = Speed-0.000005; / / розгін
if (PressedKey [39] = true) and (Speed <-0.00001) then X_KordCar: = X_KordCar +0.00005-Speed / 5; / / поворот праворуч з урахуванням швидкості
if (PressedKey [37] = true) and (Speed <-0.00001) then X_KordCar: = X_KordCar-0.00005 + Speed / 5; / / поворот вліво з урахуванням швидкості
if (PressedKey [40] = False) and (PressedKey [38] = False) then begin Speed: = Speed +0.000003; GasDeley: = 1; end; / / гальмування інерцією
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 Speed <-0.001 then begin Speed: = Speed +0.00002; GasDeley: = 1; end; / / Зменшення швидкості при дотику до бардюр справап
if Speed <-0.001 then begin Speed: = Speed +0.00002; GasDeley: = 1; end; / / Зменшення швидкості при дотику до бардюр зліва
if Selected_Menu_item =''then / / Натиснуто клавіша Esc в грі або нічого не вибрано
if SpeedGL.MediaPlayer1.FileName <> 'Textures \ Video \ SL_Start_Logo.avi' then
if PressedKey [37] = true then
begin
Dec (CarMenuItem);
CountTickTimer: = 0;
LeftButton: = true;
PlaySound ('Sound \ Select_CarMenu.wav', 0, SND_ASYNC);
end;
if PressedKey [39] = true then
begin
Inc (CarMenuItem);
CountTickTimer: = 0;
RightButton: = true;
PlaySound ('Sound \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ Select_MainMenu.wav', 0, SND_ASYNC);
Menu_item: = 4;
end;
{If Selected_Menu_item = 'Start' then
begin
if
end;}
end; / / Selected_Menu_item
end;