I use tshape as "bird" wtih name "kotak" and array of "pipe" with name "pipa"
procedure tform1.nilaiAwal; var i:integer; begin for i:=1 to 7 do begin pipa[i]:=tshape.Create(form1); pipa[i].Parent:=form1; pipa[i].Left:=400+200*i; pipa[i].Height:=70+random(70); end; // kotak:=tShape.Create(form1); kotak.Parent:=form1; kotak.Left:=200; // a:=-7; v:=40; y:=0; dt:=1; skor:=0; jalan:=false; vx:=10; edit1.Enabled:=false; end;
The code below using Euler Method to move "the pipe" and "the bird"
procedure tform1.proses; var i:integer; begin while jalan=true do begin for i:=1 to 7 do begin pipa[i].Left:=pipa[i].Left-vx; if pipa[i].Left+pipa[i].Width<0 then begin pipa[i].Left:=200*7; pipa[i].Height:=70+random(90); end; end; v:=v+a*dt; y:=y+v*dt; kotak.Top:=round(y); tabrak; edit1.Text:=intToStr(skor); application.ProcessMessages;sleep(100); end; end;
And the scoring (or loosing) is here
procedure tform1.tabrak; var i:integer; begin for i:=1 to 7 do begin if (kotak.Left>pipa[i].Left) and (kotak.Left<pipa[i].left+pipa[i].Width) then begin if(kotak.Top<pipa[i].Height) then jalan:= false else skor:=skor+1; end; end; end;
Here's the full code
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, extCtrls, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; procedure proses; procedure nilaiAwal; procedure tabrak; procedure FormCreate(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end; var Form1: TForm1; kotak: tShape; pipa: array[1..7] of tShape; a,v,y,dt:real; vx,skor:integer; jalan:boolean; implementation {$R *.dfm} procedure tform1.nilaiAwal; var i:integer; begin for i:=1 to 7 do begin pipa[i]:=tshape.Create(form1); pipa[i].Parent:=form1; pipa[i].Left:=400+200*i; pipa[i].Height:=70+random(70); end; // kotak:=tShape.Create(form1); kotak.Parent:=form1; kotak.Left:=200; // a:=-7; v:=40; y:=0; dt:=1; skor:=0; jalan:=false; vx:=10; edit1.Enabled:=false; end; procedure tform1.proses; var i:integer; begin while jalan=true do begin for i:=1 to 7 do begin pipa[i].Left:=pipa[i].Left-vx; if pipa[i].Left+pipa[i].Width<0 then begin pipa[i].Left:=200*7; pipa[i].Height:=70+random(90); end; end; v:=v+a*dt; y:=y+v*dt; kotak.Top:=round(y); tabrak; edit1.Text:=intToStr(skor); application.ProcessMessages;sleep(100); end; end; procedure tform1.tabrak; var i:integer; begin for i:=1 to 7 do begin if (kotak.Left>pipa[i].Left) and (kotak.Left<pipa[i].left+pipa[i].Width) then begin if(kotak.Top<pipa[i].Height) then jalan:= false else skor:=skor+1; end; end; end; procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin jalan:=true; v:=40; proses; end; procedure TForm1.FormCreate(Sender: TObject); begin nilaiAwal; end; end.
No comments:
Post a Comment