⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main1.pas

📁 智力拼图游戏源代码
💻 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 + -