|
||||||||||||
|
||||||||||||
|
|||||||||
МЕНЮ
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА - РЕФЕРАТЫ - Игровая программаИгровая программаМинистерство образования Российской ФедерацииПрофессиональный колледж № Специальность:______________________________________________________________________________________КУРСОВОЙ ПРОЕКТДисциплина __Технология разработки программных продуктов_Тема _____Игровая программа «Автомобильные гонки»______________________________________________________ ( КР. 2203. 04. 35. ПЗ )РАСЧЕТНО-ПОЯСНИТЕЛЬНАЯ ЗАПИСКА Руководитель _______ ________________ _____________________ Дата Личная подпись Расшифровка подписи Нормоконтролер ______ ____________ _____________________ Зав. кафедрой ______ ____________ _____________________ Выполнил студент группы ____________________________________ Оценка ____________________________________________________ Новокузнецк, 2005
приложение Событие таймера: 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; SpeedGL.MediaPlayer1.FileName:=''; 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.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;
|
РЕКЛАМА
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА | ||
© 2010 |