unit1.pas

来自「Delphi7编程80例(完全版)」· PAS 代码 · 共 109 行

PAS
109
字号
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Timer1: TTimer;
    Image2: TImage;
    Image3: TImage;
    Timer2: TTimer;
    Image4: TImage;
    Button1: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Timer2Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
 Image1.Left:=0;               //下移小狗位置复原
 Image1.Top:=0;
 Image3.Top:=Form1.Height-16;  //上升浮桥位置复原
 Image4.Visible:=False;
   //开启Timer
 Timer1.Enabled:=True;
 Timer2.Enabled:=True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 If Image1.Top+Image1.Height>Image2.Top Then
  {这句代码主要是和后面的Image1.Top:=Image1.Top+4相抵消,
  小狗就只有水平方向的运动速度了}
  Image1.Top:=Image1.Top-4;                   
 If PtInRect(Rect(Image1.Left,Image1.Top,Image1.Left+Image1.Width,Image1.Top+Image1.Height),
             Point(Image3.Left,Image3.Top))   Then           //小狗遇到了桥
  Timer1.Enabled:=False;
 If (Image1.Top>Image3.Top+Image3.Height) or      //小狗位于桥的下放
    (Image1.Top+Image1.Height>Form1.Height) or   //小狗超过了窗口的下边界
    (Image1.Left+Image1.Width>Form1.Width) Then  //小狗超过了窗口的右边界
 Begin
  Timer1.Enabled:=False;
  Timer2.Enabled:=False;
  showMessage('游戏失败');
  end;
 Image1.Left:=Image1.Left+4;  //小狗右移
 Image1.Top:=Image1.Top+4;    //小狗下移
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
 Image3.Top:=Image3.Top-2;
 If PtInRect(Rect(Image1.Left,Image1.Top,Image1.Left+Image1.Width,Image1.Top+Image1.Height),
   Point(Image3.Left,Image3.Top))   Then
  Image1.Top:=Image1.Top-2;  //Image1和Image3一起向上运动
 If Image3.Top=40 Then        //快接近顶端时,停止Timer2
 Begin
  Image4.Left:=Image3.Left+Image3.Width;  //两只小狗见面
  Image4.Top:=Image1.Top;
  Image4.Visible:=True;
  Timer2.Enabled:=False;
  Application.MessageBox('成功了!两只小狗见面了!','游戏成功',1);
 end;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 If ssLeft in Shift Then
 Begin
  Image2.Visible:=True;       //当按下左键时,渡桥可见
  Image2.Left:=x;
  Image2.Top:=y;
 end
 Else
 Begin
  {没有按下左键但鼠标又在移动时,渡桥放置在左下角,使左边小狗可以继续下移 }
  Image2.Left:=10;
  Image2.Top:=Height-120;
 end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 Image2.Visible:=False;            //当松开鼠标时,渡桥隐藏
end;

end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?