📄 main1.pas
字号:
unit main1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, Menus, StdCtrls, ExtDlgs;
type block=array[1..3,1..3] of byte;
type
TForm1 = class(TForm)
Image1: TImage;
PopupMenu1: TPopupMenu;
start1: TMenuItem;
whole1: TMenuItem;
show1: TMenuItem;
MainMenu1: TMainMenu;
start2: TMenuItem;
start3: TMenuItem;
whole2: TMenuItem;
show2: TMenuItem;
exit1: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
OpenPictureDialog1: TOpenPictureDialog;
procedure start1Click(Sender: TObject);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure whole1Click(Sender: TObject);
procedure show1Click(Sender: TObject);
procedure exit1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N2Click(Sender: TObject);
private
grid:block;
pre_x,pre_y:byte;
bgb:tbitmap;
fk:array[1..9] of tbitmap;
backg:string;
procedure draw;
procedure init;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses help;
{$R *.DFM}
procedure tform1.init;
var j,x,y,xl,yl:byte;
i:integer;
begin
randomize;
xl:=3;
yl:=3;
for j:=1 to 100 do
begin
x:=xl;
y:=yl;
i:=random(4);
case i of
0:if xl<3 then xl:=xl+1;
1:if yl<3 then yl:=yl+1;
2:if xl>1 then xl:=xl-1;
3:if yl>1 then yl:=yl-1;
end;
grid[x,y]:=grid[xl,yl];
grid[xl,yl]:=0;
// draw;
end;
end;
procedure tform1.draw;
var i,j:byte;
begin
with image1.canvas do
begin
for i:=1 to 3 do
for j:=1 to 3 do
begin
if grid[i,j]<>0 then
image1.Canvas.Draw(20+i*80-80,20+j*80-80,fk[grid[i,j]])
// brush.Color:=clred+grid[i,j]*100
else
begin
brush.Color:=clgreen;
rectangle(80*i-60,80*j-60,80*i+20,80*j+20);
floodfill(80*i,80*j,clblack,fsborder);
end;
// rectangle(80*i-60,80*j-60,80*i+20,80*j+20);
end;
end;
end;
procedure TForm1.start1Click(Sender: TObject);
var bg:trect;
i,j,x,y:byte;
begin
// bgb:=tbitmap.Create;
bgb.LoadFromFile(backg);
image1.Canvas.StretchDraw(rect(20,20,260,260),bgb);
for i:=1 to 9 do
begin
fk[i]:=tbitmap.Create;
fk[i].width:=80;
fk[i].height:=80;
x:=i mod 3;
if x=0 then
x:=3;
y:=((i-1) div 3)+1;
fk[i].canvas.CopyRect(rect(0,0,78,78),image1.canvas,rect(20+80*x-80,20+80*y-80,20+80*x-2,20+80*y-2));
end;
bg:=rect(0,0,image1.width,image1.height);
image1.canvas.brush.color:=clgreen;
image1.Canvas.FillRect(bg);
for i:=1 to 3 do
for j:=1 to 3 do
grid[i,j]:=i+j*3-3;;
init;
pre_x:=0;
pre_y:=0;
draw;
whole1.Enabled:=true;
whole2.Enabled:=true;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var i,j,x1,y1:byte;
begin
if (x>20) and (x<260) and (y>20) and (y<260) then
begin
image1.Cursor:=crhandpoint;
i:=(x+60) div 80;
j:=(y+60) div 80;
if (pre_x<>0) and (grid[i,j]=0) and ((abs(i-pre_x)+abs(j-pre_y))=1) then
begin
grid[i,j]:=grid[pre_x,pre_y];
grid[pre_x,pre_y]:=0;
draw;
end;
// draw;
end
else
image1.Cursor:=crdefault;
j:=0;
for i:=1 to 8 do
begin
x1:=i mod 3;
if x1=0 then
x1:=3;
y1:=((i-1) div 3)+1;
if grid[x1,y1]<>i then
j:=1;
end;
if j=0 then
image1.canvas.Draw(20,20,bgb);
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var i,j:byte;
begin
i:=(x+60) div 80;
j:=(y+60) div 80;
if (i>0) and (i<4) and (j>0) and (j<4) then
begin
pre_x:=i;
pre_y:=j;
end
else
begin
pre_x:=0;
pre_y:=0;
end;
// label1.Caption:=inttostr(pre_x);
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
pre_x:=0;
pre_y:=0;
end;
procedure TForm1.whole1Click(Sender: TObject);
begin
image1.Canvas.StretchDraw(rect(20,20,260,260),bgb);
show1.Enabled:=true;
show2.Enabled:=true;
end;
procedure TForm1.show1Click(Sender: TObject);
begin
show1.Enabled:=false;
show2.Enabled:=false;
draw;
end;
procedure TForm1.exit1Click(Sender: TObject);
begin
close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
bgb:=tbitmap.Create;
backg:='defa.bmp';
// bgb.LoadFromFile('defa.bmp');
// image1.Canvas.StretchDraw(rect(20,20,260,260),bgb);
end;
procedure TForm1.N3Click(Sender: TObject);
begin
form2.showmodal;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
if openpicturedialog1.Execute then
backg:=openpicturedialog1.FileName;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -