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