股利增长率公式g=:这是我写的一个随机生成迷宫的程序,有错,谁帮我改下!

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/04 12:04:02
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
Procedure rectB(x,y:integer);
Procedure rectW(x,y:integer);
Function ok(i,j,k:integer):boolean;
procedure mi(x,y:integer);
{ Public declarations }
end;

var
Form1: TForm1;

implementation
Type
xy=record
x:1..100;
y:1..100;
end;
Type
link=^history;
history=record
data:xy;
end;
var
p:link;
aa:array[0..30,0..30] of integer;
FangXiang:array[0..3,0..1]of -1..1=((1,0),(0,1),(-1,0),(0,-1));
newx,newy:integer;
mystack:TStack;
{$R *.dfm}

Function tform1.ok(i,j,k:integer):boolean;
var
newi,newj:integer;
begin
ok:=true;
newi:=i+FangXiang[k,0];
newj:=j+FangXiang[k,1];
if not(newi in[0..30]) and not(newj in[0..30]) then result:=false;
if (aa[newi,newj]=1) or (aa[newi,newj]=3) then result:=false;
end;
procedure tform1.mi(x,y:integer);
var
k:integer;
begin
randomize;
k:=random(3);
if ok(x,y,k) then
begin
newx:=x+FangXiang[k,0];
newy:=y+FangXiang[k,1];
aa[newx,newy]:=3;
p^.data.x:=newx;
p^.data.y:=newy;
mystack.Push(p);
if (newx=29)and(newy=30) then exit else mi(newx,newy);
end
else
begin
if not(ok(x,y,0) or ok(x,y,1) or ok(x,y,2) or ok(x,y,3)) then
begin
p:=mystack.Pop;
mi(p^.data.x,p^.data.y);
end else mi(x,y);
end;
end;

procedure Tform1.rectB(x,y:integer);
begin
form1.Canvas.Pen.Color:=clblack;
form1.Canvas.Brush.Color:=clblack;
form1.Canvas.Rectangle(rect(x,y,x+10,y+10));
end;
Procedure Tform1.rectW(x,y:integer);
begin
form1.Canvas.Pen.Color:=clwhite;
form1.Canvas.Brush.Color:=clwhite;
form1.Canvas.Rectangle(rect(x,y,x+10,y+10));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
begin
for i:=0 to 30 do
for j:=0 to 30 do
begin
rectw(10+j*10,10+i*10);
if (i=0) or (i=30) or ((j=0)and not(i=1)) or ((j=30)and not(i=29)) then
begin
rectb(10+j*10,10+i*10);
end;
if (i>0) and (i<30) and (j>0) and (j<30) then
rectb(10+j*10,10+i*10);
end;
mi(0,0);
for i:=0 to 30 do
for j:=0 to 30 do
if aa[i,j]=3 then rectw(10+j*10,10+i*10);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
new(p);
mystack:=tstack.create;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
i:integer;
begin
try
for i:=0 to mystack.Count-1 do
begin
p:=mystack.Pop;
dispose(p);
end;
finally
mystack.Free;
end;
end;

end.
是DELPHI

注释都没有,何况我还对pascal语法不熟~