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

📄 rei_24.pas

📁 Delphi经典游戏程序设计40例.pdf 中国铁道出版社出版 含源码
💻 PAS
字号:
unit Rei_24;

interface

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

type
  TRei40_24 = class(TForm)
    Timer1: TTimer;
    MainMenu1: TMainMenu;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private 定义 }
  public
    { Public  定义 }
  end;

const
  Yoko = 37;           //显示的横向图案数
  Tate = 27;           //显示的纵向图案数
  DYoko = Yoko * 16;   //显示的横向点数
  DTate = Tate * 16;   //显示的纵向点数
  TX = 312;            //目标X座标
  TY = 224;            //目标Y座标

var
  Rei40_24: TRei40_24;
  //  定义原图用与绘制用的点阵图
  Back_Bmap, Make_Bmap: TBitmap;
  //  定义各种变量(Byte类型、TRect类型)
  AT, Ct, LW: Byte;
  Rect_B, Rect_M, Rect_D: TRect;

implementation

{$R *.DFM}

procedure TRei40_24.FormCreate(Sender: TObject);
begin
  //  设定Form属性
  Rei40_24.Height := 480;
  Rei40_24.Width := 640;
  Button1.Height := 25;
  Button1.Left := 603;
  Button1.Top := 16;
  Button1.Width := 25;
  Button2.Height := 25;
  Button2.Left := 603;
  Button2.Top := 56;
  Button2.Width := 25;
  Button3.Height := 25;
  Button3.Left := 603;
  Button3.Top := 96;
  Button3.Width := 25;
  Button4.Height := 25;
  Button4.Left := 603;
  Button4.Top := 136;
  Button4.Width := 25;
  //  储存原图用点阵图并载入原图
  Back_Bmap := TBitmap.Create;
  Back_Bmap.Width := DYoko;
  Back_Bmap.Height := DTate;
  Back_Bmap.LoadFromFile(GetCurrentDir + '\ExData\Bunny.bmp');
  //  储存绘制用点阵图
  Make_Bmap := TBitmap.Create;
  Make_Bmap.Width := DYoko + 32;
  Make_Bmap.Height := DTate + 32;
end;

procedure TRei40_24.Timer1Timer(Sender: TObject);
var
  //  定义局部变量
  Bt: Byte;
begin
  //  攻击效果(1)~(4)的处理
  case AT of
    0: begin
      Make_Bmap.Canvas.CopyMode := cmSrcCopy;
      Rect_B := Rect(48, 24, 640, 480 - 24);
      Rect_M := Rect(16, 16, DYoko + 16, DTate + 16);
      Make_Bmap.Canvas.CopyRect(Rect_M, Back_Bmap.Canvas, Rect_B);
    end;
    1: begin
      Make_Bmap.Canvas.Pen.Mode := pmXor;
      Make_Bmap.Canvas.Pen.Width := 1;
      Make_Bmap.Canvas.Pen.Color := clYellow;
      Make_Bmap.Canvas.Brush.Color := clOlive;
      Bt := Ct;
      Make_Bmap.Canvas.Ellipse
        (TX - Bt * 8, TY - 20 - Bt * 8, TX + Bt * 8, TY + 20 + Bt * 8);
      if Ct >= 33 then
      begin
        Bt := Ct - 32;
        Make_Bmap.Canvas.Ellipse
          (TX - Bt * 8, TY - 20 - Bt * 8, TX + Bt * 8, TY + 20 + Bt * 8);
      end;
      Ct := Ct + 1;
      if Ct > 80 then
        AT := 0;
    end;
    2: begin
      Make_Bmap.Canvas.Pen.Mode := pmXor;
      Make_Bmap.Canvas.Pen.Width := 2;
      Make_Bmap.Canvas.Pen.Color := clWhite;
      Make_Bmap.Canvas.Brush.Color := clBlack;
      if Ct = 0 then
        for Bt := 25 downto 1 do
          Make_Bmap.Canvas.Ellipse
            (TX - Bt * 8, TY - Bt * 8, TX + Bt * 8, TY + Bt * 8)
      else begin
        Bt := 26 - Ct;
        Make_Bmap.Canvas.Ellipse
          (TX - Bt * 8, TY - Bt * 8, TX + Bt * 8, TY + Bt * 8);
      end;
      Ct := Ct + 1;
      if Ct > 26 then
        AT := 0;
    end;
    3: begin
      Make_Bmap.Canvas.Pen.Mode := pmXor;
      Make_Bmap.Canvas.Pen.Width := 80;
      Make_Bmap.Canvas.Pen.Color := clGreen;
      Make_Bmap.Canvas.Brush.Color := clLime;
      Make_Bmap.Canvas.Ellipse(TX - 150, TY - 170, TX + 150, TY + 170);
      Ct := Ct + 1;
      if Ct = 20 then
        AT := 0;
    end;
    4: begin
      Make_Bmap.Canvas.Pen.Mode := pmXor;
      case Ct and 3 of
        0, 1: begin
          LW := 38;
          Make_Bmap.Canvas.Pen.Width := 25;
          Make_Bmap.Canvas.Pen.Color := clRed;
          Make_Bmap.Canvas.Brush.Color := clFuchsia;
        end;
        2, 3: begin
          LW := 48;
          Make_Bmap.Canvas.Pen.Width := 30;
          Make_Bmap.Canvas.Pen.Color := clPurple;
          Make_Bmap.Canvas.Brush.Color := clWhite;
        end;
      end;
      Make_Bmap.Canvas.Polygon([
        Point(TX - 4 * LW, TY), Point(TX - 2 * LW, TY + LW),
        Point(TX - 3 * LW, TY + 3 * LW), Point(TX - LW, TY + 2 * LW),
        Point(TX, TY + 4 * LW), Point(TX + LW, TY + 2 * LW),
        Point(TX + 3 * LW, TY + 3 * LW), Point(TX + 2 * LW, TY + LW),
        Point(TX + 4 * LW, TY), Point(TX + 2 * LW, TY - LW),
        Point(TX + 3 * LW, TY - 3 * LW), Point(TX + LW, TY - 2 * LW),
        Point(TX, TY - 4 * LW), Point(TX - LW, TY - 2 * LW),
        Point(TX - 3 * LW, TY - 3 * LW), Point(TX - 2 * LW, TY - LW)]);
      Ct := Ct + 1;
      if Ct = 23 then
        AT := 0;
    end;
  end;
  Rei40_24.Canvas.CopyMode := cmSrcCopy;
  Rect_M := Rect(16, 16, DYoko + 16, DTate + 16);
  Rect_D := Rect(0, 0, DYoko, DTate);
  Rei40_24.Canvas.CopyRect(Rect_D, Make_Bmap.Canvas, Rect_M);
end;

procedure TRei40_24.Button1Click(Sender: TObject);
begin
  //  攻击效果(1)的指定
  if AT = 0 then
  begin
    AT := 1;
    Ct := 0;
  end;
end;

procedure TRei40_24.Button2Click(Sender: TObject);
begin
  //  攻击效果(2)的指定
  if AT = 0 then
  begin
    AT := 2;
    Ct := 0;
  end;
end;

procedure TRei40_24.Button3Click(Sender: TObject);
begin
  //  攻击效果(3)的指定
  if AT = 0 then
  begin
    AT := 3;
    Ct := 0;
  end;
end;

procedure TRei40_24.Button4Click(Sender: TObject);
begin
  //  攻击效果(4)的指定
  if AT = 0 then
  begin
    AT := 4;
    Ct := 0;
  end;
end;

procedure TRei40_24.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  //  将原图用与绘制用的点阵图释放掉
  Back_Bmap.Free;
  Make_Bmap.Free;
end;

end.

⌨️ 快捷键说明

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