5. тестирование
5.1 тестирование функций пп
Выполнение функций в
данном проекте идет отличное так как небольшой сбой бал бы сразу замечен при
работе программы.
5.2
тестирование надежности
Функция по считыванию
клавиш продуманна таким образом что только реагирует на те клавиши на которые
есть код выполнения, остальные игнорируются.
|
|
|
|
|
|
КП. 2203. 04. 35. ПЗ
|
Лист
|
|
|
|
|
|
15
|
Изм
|
Лист
|
№ докум
|
Подп.
|
Дата
|
приложение
Событие таймера:
procedure
FNTimeCallBack(uTimerID, uMessage: UINT;dwUser, dw1, dw2: DWORD) stdcall;
var
word:DWORD;
begin
Inc(CountTickTimer);
if
(((PressedKey[19]=true)or
(PressedKey[80]=true))and(CountTickTimer>100))and(CountFuel>0) then
if(not Pause) then begin
Pause:=true;
CountTickTimer:=0;
end
else
begin
Pause:=false;
CountTickTimer:=0;
end;
if not Pause then begin
if Selected_Menu_item='Start' then //Нажата клавиша
Start
begin
if SpeedGL.MediaPlayer1.FileName<>'Sound\Race.mp3' then begin
SpeedGL.MediaPlayer1.FileName:='Sound\Race.mp3';
SpeedGL.MediaPlayer1.Open;
SpeedGL.MediaPlayer1.Play;
end;
if (PressedKey[27]=true)and(CountTickTimer>100) then
begin
Selected_Menu_item:='';
SpeedGL.MediaPlayer1.Stop;
SpeedGL.MediaPlayer1.Close;
SpeedGL.MediaPlayer1.FileName:='';
Menu_item:=2;
CountTickTimer:=0;
Speed:=0.0;
sound:=false;
CountFuel:=8;
CountKM:=0;
end;
//торможение
if PressedKey[40]=true then
begin
Speed:=Speed+0.00002;
GasDeley:=1;
end;
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 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\Video\SL_Start_Logo.avi' then
if SpeedGL.MediaPlayer1.FileName<>'Sound\Main_Menu.mp3' then begin
SpeedGL.MediaPlayer1.FileName:='Sound\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;
Selected_Menu_item:='Exit';
CountTickTimer:=0;
end;
if PressedKey[40]=true then
begin
Inc(Menu_item);
PlaySound('Sound\Select_MainMenu.wav',0,SND_ASYNC);
CountTickTimer:=0;
end; //вниз
if PressedKey[38]=true then
begin
Dec(Menu_item);
PlaySound('Sound\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\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\Actor.mp3' then begin
SpeedGL.MediaPlayer1.FileName:='Sound\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\Garage.mp3' then begin
SpeedGL.MediaPlayer1.FileName:='Sound\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\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.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;