Написал Гонки, но их нужно немного доделать. Нужно сделать так, чтобы машинка игрока двигалась только в горизонтальном направлении, а "вражеские" машинки двигались на встречу сами. Сейчас "вражеские" машинки двигаются только когда я двигаю свою машинку. Ещё есть проблема с изменением цвета фона после одного столкновения, а нужно, чтобы игра заканчивалась после трёх столкновений. Исходник игры Нажмите для просмотра прикрепленного файла
andriano
1.06.2008 22:07
Я что-то не увидел: что у нас происходит по таймеру?
Гость
17.06.2008 18:01
Цитата(Budyaga @ 1.06.2008 1:42)
Написал Гонки, но их нужно немного доделать. Нужно сделать так, чтобы машинка игрока двигалась только в горизонтальном направлении, а "вражеские" машинки двигались на встречу сами. Сейчас "вражеские" машинки двигаются только когда я двигаю свою машинку. Ещё есть проблема с изменением цвета фона после одного столкновения, а нужно, чтобы игра заканчивалась после трёх столкновений. Исходник игры Нажмите для просмотра прикрепленного файла
Впринципи все сделал. Вот исходник там все найдешь. Изменения:
Procedure Izo(S1:PStar1;S2,S21:PStar2;S3,S31,S32:PStar3;F:PFly;F1,F2,F3,F4:PFly1;o:potr); var graphdriver:integer; graphmode:integer; errorcode,i:integer;
begin graphdriver:=detect; initgraph(graphdriver,graphmode,'d:\BP\bgi'); errorcode:=graphresult; if errorcode<>grok then begin writeln('NOOOOOOOOOOOOOO '); halt; end; S1^.On; S2^.On;S21^.On; S3^.On;S31^.On; S32^.On; F^.On; F1^.On;F2^.On;F3^.On;F4^.On;o^.on; readln; F^.Move(80,80);F1^.Move(80,80);F2^.Move(80,80);F3^.Move(80,80);F4^.Move(80,80); S1^.Drive(80,30); S2^.Drive(80,30);S21^.Drive(80,30); S32^.drive(80,30); S3^.Drive(80,30); S31^.Drive(80,30);S:=0; while (udr<>3) and (drag(F^,F1^,F2^,F3^,F4^)) and (drag1(S1^,S2^,S3^)) and (drag2(S21^,S31^,S32^)) do begin If TEST(S1^,S2^,S21^,S3^,S31^,S32^,F^)=true the begin cleardevice; Udr:=Udr+1; end else s:=s+1; end; end;
и также:
function drag(var f:fly;var f1:fly1;var f2:fly1;var f3:fly1;var f4:fly1):boolean; var key:char; dx,dy:integer; step,step1:integer; begin step:=5; step1:=5; if keypressed then begin key:=readkey; if key=chr(0) then key:=readkey; dx:=0; dy:=0; case ord(key) of 75: dx:=-step; 77: dx:=step; 72: dy:=-step1; 80: dy:=step1; 27: begin drag:=false; exit end; end; delay(4000); end else begin Dx:=0; Dy:=0; delay(6000);end; f.move(dx,dy);f1.move(dx,dy);f2.move(dx,dy);f3.move(dx,dy);f4.move(dx,dy); drag:=true; end;
Гость
17.06.2008 18:03
Забыл исходник приципить. Вот держи.
{$R-} {$Q-} Program gonki; uses CRT,graph; type STAR1=object x:0..640; y:0..480; c:0..15; V:boolean; constructor Init(x1,y1, c1:integer); Procedure On; virtual; Procedure Off; virtual; Procedure Drive(dX,dY:integer); Function GetX:integer; Function GetY:integer; end;
otr=object(STAR1) l:0..640; h:0..480; constructor Init(x1,y1,l1,h1,c1:integer); Procedure On;virtual; Procedure Off;virtual; Function Getl:integer; function geth:integer; end;
procedure Fly1.off; begin v:=false; Setfillstyle(1,0); SetColor(0); Circle(x,y,z); Floodfill(x,y,0); end;
Procedure Fly1.Move(dX,dy:integer); begin Off; x:=x+Dx; y:=y+dy; On; end;
Function Fly1.getz:integer; begin getz:=z; end;
procedure init(l1,h1,k1,q1,m1:integer); var l,h,k,m,q:integer; i:boolean; begin l:=l1; k:=k1; h:=h1; q:=q1; m:=m1; i:=false; end; Procedure On; var i:boolean; m,h,l,q,k:integer; begin i:=true; SetColor(m); line(l,h,k,q); end;
Procedure Off; var i:boolean; k,q,h,l,m:integer; begin SetColor(0); Rectangle(l,h,k,q); i:=False; end; var OneStar1:PStar1; oneotr:Potr; OneStar2,TwoStar2:PStar2; OneStar3,TwoStar3,ThreeStar3:PStar3; OneFly:PFly; OneFly1,TwoFly1,ThreeFly1,FourFly1:PFly1; S1:Star1; o:otr; S2,S21:Star2; S3,S31,S32:Star3; F:Fly; F1,F2,F3,F4:Fly1; s,Udr:integer;
function drag(var f:fly;var f1:fly1;var f2:fly1;var f3:fly1;var f4:fly1):boolean; var key:char; dx,dy:integer; step,step1:integer; begin step:=5; step1:=5; if keypressed then begin key:=readkey; if key=chr(0) then key:=readkey; dx:=0; dy:=0; case ord(key) of 75: dx:=-step; 77: dx:=step; 72: dy:=-step1; 80: dy:=step1; 27: begin drag:=false; exit end; end; delay(4000); end else begin Dx:=0; Dy:=0; delay(6000);end; f.move(dx,dy);f1.move(dx,dy);f2.move(dx,dy);f3.move(dx,dy);f4.move(dx,dy); drag:=true; end;
Function TEST(var S1:Star1;var S2,S21:Star2;var S3,S31,S32:Star3;var F:Fly):boolean; begin if (abs(S1.GetX-F.GetX)<F.GetR) and (abs(S1.GetY-F.GetY)<F.GetR) then TEST:=true; if (abs(S2.GetX-F.GetX)<S2.GetR+F.GetR) and (abs(S2.GetY-F.GetY)<S2.GetR+F.GetR) then TEST:=true; if (abs(S3.GetX-F.GetX)<F.GetR) and (abs(S3.GetY-F.GetY)<F.GetR) then TEST:=true; if (abs(S3.GetZ-F.GetX)<F.GetR) and (abs(S3.GetW-F.GetY)<F.GetR) then TEST:=true; if (abs(S21.GetX-F.GetX)<S21.GetR+F.GetR) and (abs(S21.GetY-F.GetY)<S21.GetR+F.GetR) then TEST:=true; if (abs(S31.GetX-F.GetX)<F.GetR) and (abs(S31.GetY-F.GetY)<F.GetR) then TEST:=true; if (abs(S31.GetZ-F.GetX)<F.GetR) and (abs(S31.GetW-F.GetY)<F.GetR) then TEST:=true; if (abs(S32.GetX-F.GetX)<F.GetR) and (abs(S32.GetY-F.GetY)<F.GetR) then TEST:=true; if (abs(S32.GetZ-F.GetX)<F.GetR) and (abs(S32.GetW-F.GetY)<F.GetR) then TEST:=true; end;
Function drag1(var S1:Star1;var S2:Star2;var S3:Star3):boolean; var i,dy,dx:integer; step,step1:integer; begin While S1.GetY<350 do begin step:=10;step1:=10; dy:=step;dx:=step1;delay(5); S1.drive(dx,dy);S2.drive(dx,dy);S3.drive(dx,dy); drag1:=true; If TEST(S1,S2,S21,S3,S31,S32,F)=true then Drag1:=false;exit end; while S1.GetY>10 do begin step:=-480;step1:=-480; dy:=step;dx:=step1;delay(10); S1.drive(dx,dy);S2.drive(dx,dy);S3.drive(dx,dy); drag1:=true; If TEST(S1,S2,S21,S3,S31,S32,F)=true then Drag1:=false;exit end; end;
Function drag2(var S21:Star2;var S31:Star3; var S32:Star3):boolean; var i,dy,dx:integer; step,step1:integer; begin While S21.GetY<470 do begin step:=30;step1:=random(5)-5; dy:=step;dx:=step1;delay(5); S21.drive(dx,dy);S31.drive(dx,dy);S32.drive(dx,dy); drag2:=true; If TEST(S1,S2,S21,S3,S31,S32,F)=true then Drag2:=false;exit end; while S21.GetY>10 do begin step:=-480;step1:=40; dy:=step;dx:=step1;delay(10); S21.drive(dx,dy);S31.drive(dx,dy);S32.drive(dx,dy); drag2:=true; If TEST(S1,S2,S21,S3,S31,S32,F)=true then Drag2:=false;exit end; end; Procedure Izo(S1:PStar1;S2,S21:PStar2;S3,S31,S32:PStar3;F:PFly;F1,F2,F3,F4:PFly1;o:potr); var graphdriver:integer; graphmode:integer; errorcode,i:integer;
begin graphdriver:=detect; initgraph(graphdriver,graphmode,'d:\BP\bgi'); errorcode:=graphresult; if errorcode<>grok then begin writeln('NOOOOOOOOOOOOOO '); halt; end; S1^.On; S2^.On;S21^.On; S3^.On;S31^.On; S32^.On; F^.On; F1^.On;F2^.On;F3^.On;F4^.On;o^.on; readln; F^.Move(80,80);F1^.Move(80,80);F2^.Move(80,80);F3^.Move(80,80);F4^.Move(80,80); S1^.Drive(80,30); S2^.Drive(80,30);S21^.Drive(80,30); S32^.drive(80,30); S3^.Drive(80,30); S31^.Drive(80,30);S:=0; while (udr<>3) and (drag(F^,F1^,F2^,F3^,F4^)) and (drag1(S1^,S2^,S3^)) and (drag2(S21^,S31^,S32^)) do begin If TEST(S1^,S2^,S21^,S3^,S31^,S32^,F^)=true the begin cleardevice; Udr:=Udr+1; end else s:=s+1; end;