bir odev yaptık solucan oyunu istatikciyiz ama hoca programcı sanıyor bizi bizde bulduk verdik biyerden kodları ama acıklamasını istiyor yardım dermisiniz neyin ne olduğuna sizin icin basit bişi

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Timer1: TTimer;
Timer2: TTimer;
Timer3: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Timer2Timer(Sender: TObject);
procedure Timer3Timer(Sender: TObject);
private

public

end;

var
Form1: TForm1;
X1,Y1 : Array[1..50] Of Integer;
Uzunluk,X,Y : Byte;
Yon : Byte;
Yx,Yy,Ky,Rx,Ry: integer;
Say1,Puan,Hz : integer;
Ovr,Bln : Byte;
Zmn : Integer;
implementation

uses Unit2;



Procedure Pyaz;
Begin
Form1.Canvas.Brush.Color:=clBtnFace;
Form1.Canvas.Font.Size:=15;
Form1.Canvas.TextOut(350,30,'Hız........ : ');
Form1.Canvas.TextOut(350,30,'Hız........ : ' + inttostr(200-Hz));
Form1.Canvas.TextOut(350,50,'Puanınız. : ');
Form1.Canvas.TextOut(350,50,'Puanınız. : ' + inttostr(Puan));
End;

Procedure Ower;
Begin

Form1.Canvas.Brush.Color:=clBtnFace;
Form1.Canvas.Font.Size:=75;
Form1.Canvas.TextOut(50,50,'Oyun Bitti');
Zmn:=300;
Form1.Timer1.Interval :=0;
Form1.Timer2.Interval :=2;
Exit;
End;

Procedure TusKontrol;
Begin
if (ky107) And (ky109) Then Form1.Timer1.Interval:=Hz;
if (ky=37) and (Yon=3) Then Ky:=0;
if (ky=39) and (Yon=1) Then Ky:=0;
if (ky=38) and (Yon=2) Then Ky:=0;
if (ky=40) and (Yon=4) Then Ky:=0;
if ky=37 Then Begin Yon:=1; End;
if ky=40 Then Begin Yon:=2; End;
if ky=39 Then Begin Yon:=3; End;
if ky=38 Then Begin Yon:=4; End;
if Ky=27 Then Ower;
if ky=80 then Form1.Timer1.Interval:=0;
if ky=107 then Hz:=Hz-1;
if ky=109 then Hz:=Hz+1;
if (ky=107) Or (ky=109) Then Pyaz;
if Hz198 Then Hz:=198;

End;

Procedure Rnd;
Begin
Rx:=(Random(29]2)*10+1;
Ry:=(Random(29]2)*10+1;
Puan:=Puan+10;
Pyaz;
End;

procedure TForm1.FormCreate(Sender: TObject);
begin
Show;
Form1.Canvas.Font.Size:=12;
Form1.Canvas.Font.Name:='Times New Roman';
Canvas.Rectangle(1,1,497,384);
Canvas.Rectangle(2,2,496,383);
Canvas.Rectangle(16,16,324,314);
Canvas.Rectangle(17,17,323,313);
Canvas.Rectangle(18,18,322,312);
Form1.Canvas.TextOut(20,323,'+ : Hızı Artır');
Form1.Canvas.TextOut(20,343,'- : Hızı Azalt');
Form1.Canvas.TextOut(20,363,'P : Durdur');
Uzunluk:=11;
Puan:=-10;
Yon:=1;
Hz:=50;
Ovr:=0;
Bln:=0;
Zmn:=0;
timer3.Interval:=1;
For X:=1 To 30 Do
Begin
For Y:=1 To 29 Do
Begin
Canvas.Ellipse (X*10+11,Y*10+11,X*10+20,Y*10+20);
End;
End;

Randomize;
Rnd;
Canvas.Brush.Color:=clRed;
Form1.Canvas.Ellipse (Rx,Ry,Rx+9,Ry+9);

Canvas.Brush.Color:=clblack;
For X:=1 To Uzunluk-1 Do
Begin
X1[X]:=(X+21)* 10+1;
Y1[X]:=21;
Canvas.Ellipse (X1[X],Y1[X],X1[X]+9,Y1[X]+9);
End;
Pyaz;
End;

Procedure Kontrol;
Begin
If (X1[1]=21) And (Yon=1) Then Form1.Timer1.Interval:=Hz+250;
If (Y1[1]=21) And (Yon=4) Then Form1.Timer1.Interval:=Hz+250;
If (X1[1]=311) And (Yon=3) Then Form1.Timer1.Interval:=Hz+250;
If (Y1[1]=301) And (Yon=2) Then Form1.Timer1.Interval:=Hz+250;
If (X1[1]320) Or (Y1[1]310) Then form1.Timer1.interval:=0;
If (X1[1]=Rx) And (Y1[1]=Ry) Then
Begin
Rnd;
Uzunluk:=Uzunluk+1;
End;
For Say1:=2 To Uzunluk Do
Begin
if (X1[1]=X1[Say1]) And (Y1[1]=Y1[Say1]) Then Ower;
End;
End;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
For X:=Uzunluk DownTo 2 Do
Begin
X1[X]:=X1[X-1];
Y1[X]:=Y1[X-1];
End;

if Yon=1 Then X1[1]:=X1[1]-10;
if Yon=2 Then Y1[1]:=Y1[1]+10;
if Yon=3 Then X1[1]:=X1[1]+10;
if Yon=4 Then Y1[1]:=Y1[1]-10;
Kontrol;
if form1.timer1.interval=0 Then Begin Ower; Exit; End;

Canvas.Brush.Color:=clBtnFace;
Canvas.Ellipse (X1[uzunluk],Y1[uzunluk],X1[uzunluk]+9,Y1[uzunluk]+9);
Canvas.Brush.Color:=clblack;
Canvas.Ellipse (X1[1],Y1[1],X1[1]+9,Y1[1]+9);

if Bln=5 Then Canvas.Brush.Color:=clWhite;
Form1.Canvas.Ellipse (Rx,Ry,Rx+9,Ry+9);
Bln:=Bln+1;
if Bln=11 Then Bln:=0;


End;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Ky:=Key;
TusKontrol;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin

end;


procedure TForm1.Timer2Timer(Sender: TObject);
begin
if zmn250 Then Zmn:=Zmn-1;
if zmn