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

📄 rei_05.pas

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

interface

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

type
  //  定义复合图案的record类型
  TPatDt = record
    Xpos: Integer;
    Ypos: Integer;
    Xsiz: Byte;
    Ysiz: Byte;
    Pban: array[0..15] of Byte;
  end;

  TRei40_05 = class(TForm)
    Timer1: TTimer;
    Timer2: TTimer;
    Timer3: TTimer;
    Timer4: TTimer;
    Timer5: TTimer;
    MainMenu1: TMainMenu;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure Timer3Timer(Sender: TObject);
    procedure Timer4Timer(Sender: TObject);
    procedure Timer5Timer(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private }
    procedure PatDi(Pnum: Byte; X1, Y1: Word; Bmap: TBitmap);
    procedure ChrDi(Cnum: TPatdt; Bmap: TBitmap);
    procedure ChrCl(Cnum: TPatdt; Bmap: TBitmap);
  public
    { Public  }
  end;

const
  Yoko = 37;               //定义横向图案数
  Tate = 27;               //定义直立图案数
  DYoko = Yoko * 16;       //定义横向点数
  DTate = Tate * 16;       //定义直立点数

var
  Rei40_05: TRei40_05;
  //  定义载入用与绘制用的点阵图
  Load_Bmap: TBitmap;
  Make_Bmap: TBitmap;
  //  定义各种变数(Byte型态、Trect型态、TpatDt型态)
  PX, PY, n: Byte;
  Rect_L, Rect_D, Rect_M: TRect;
  Chr1, Chr2, Chr3, Chr4: TPatDt;

implementation

{$R *.DFM}

procedure TRei40_05.FormCreate(Sender: TObject);
var
  //  定义区域变数
  X, Y: Byte;
begin
  //  设定表格属性
  Rei40_05.Height := 480;
  Rei40_05.Width := 640;
  Rei40_05.Canvas.CopyMode := cmSrcCopy;
  //  载入图案
  Load_Bmap := TBitmap.Create;
  Load_Bmap.LoadFromFile(GetCurrentDir + '\ExData\Pat_Sample.bmp');
  //  储存绘制用点阵图
  Make_Bmap := TBitmap.Create;
  Make_Bmap.Width := DYoko;
  Make_Bmap.Height := DTate;
  //  绘制用点阵图的初始设定
  Make_Bmap.Canvas.CopyMode := cmSrcCopy;
  for Y := 0 to (Tate - 1) do
    for X := 0 to (Yoko - 1) do
      PatDi(2, X * 16, Y * 16, Make_Bmap);
  //复合图案的初始设定
  with Chr1 do
  begin
    Xpos := DYoko - 32;
    Ypos := 50;
    Xsiz := 1;
    Ysiz := 2;
    Pban[0] := 5;
    Pban[1] := 6;
  end;
  with Chr2 do
  begin
    Xpos := DYoko - 32;
    Ypos := 150;
    Xsiz := 2;
    Ysiz := 1;
    Pban[0] := 3;
    Pban[1] := 4;
  end;
  with Chr3 do
  begin
    Xpos := DYoko - 32;
    Ypos := 250;
    Xsiz := 1;
    Ysiz := 2;
    Pban[0] := 5;
    Pban[1] := 6;
  end;
  with Chr4 do
  begin
    Xpos := DYoko - 32;
    Ypos := 350;
    Xsiz := 2;
    Ysiz := 1;
    Pban[0] := 3;
    Pban[1] := 4;
  end;
end;

procedure TRei40_05.Timer1Timer(Sender: TObject);
begin
  //  将所有的复合图案绘制在Make_Bmap,并显示在萤幕上
  ChrDi(Chr1, Make_Bmap);
  ChrDi(Chr2, Make_Bmap);
  ChrDi(Chr3, Make_Bmap);
  ChrDi(Chr4, Make_Bmap);
  Rei40_05.Canvas.Draw(0, 0, Make_Bmap);
end;

procedure TRei40_05.PatDi(Pnum: Byte; X1, Y1: Word; Bmap: TBitmap);
begin
  //  将指定的图案绘制在指定点阵图的指定位置上
  PX := (Pnum and $F) * 16;
  PY := Pnum and $F0;
  Rect_L := Rect(PX, PY, PX + 16, PY + 16);
  Rect_D := Rect(X1, Y1, X1 + 16, Y1 + 16);
  Bmap.Canvas.CopyMode := cmSrcCopy;
  Bmap.Canvas.CopyRect(Rect_D, Load_Bmap.Canvas, Rect_L);
end;

procedure TRei40_05.ChrDi(Cnum: TPatdt; Bmap: TBitmap);
var
  X, Y: Byte;
begin
  //  将指定的复合图案绘制在指定点阵图的指定位置上
  n := 0;
  for Y := 0 to (Cnum.Ysiz - 1) do
    for X := 0 to (Cnum.Xsiz - 1) do
    begin
      PatDi(Cnum.Pban[n], Cnum.Xpos + X * 16, Cnum.Ypos + Y * 16, Bmap);
      n := n + 1;
    end;
end;

procedure TRei40_05.ChrCl(Cnum: TPatdt; Bmap: TBitmap);
var
  X, Y: Byte;
begin
  //  将指定点阵图上的复合图案以图案编号2(天蓝色)去除
  for Y := 0 to (Cnum.Ysiz - 1) do
    for X := 0 to (Cnum.Xsiz - 1) do
      PatDi(2, Cnum.Xpos + X * 16, Cnum.Ypos + Y * 16, Bmap);
end;

procedure TRei40_05.Timer2Timer(Sender: TObject);
begin
  //  去除复合图案1并变更座标
  ChrCl(Chr1, Make_Bmap);
  Chr1.Xpos := Chr1.Xpos - 1;
  if Chr1.Xpos < 0 then
    Chr1.Xpos := DYoko - 32;
end;

procedure TRei40_05.Timer3Timer(Sender: TObject);
begin
  //  去除复合图案2并变更座标
  ChrCl(Chr2, Make_Bmap);
  Chr2.Xpos := Chr2.Xpos - 1;
  if Chr2.Xpos < 0 then
    Chr2.Xpos := DYoko - 32;
end;

procedure TRei40_05.Timer4Timer(Sender: TObject);
begin
  //  去除复合图案3并变更座标
  ChrCl(Chr3, Make_Bmap);
  Chr3.Xpos := Chr3.Xpos - 1;
  if Chr3.Xpos < 0 then
    Chr3.Xpos := DYoko - 32;
end;

procedure TRei40_05.Timer5Timer(Sender: TObject);
begin
  //  去除复合图案并变更座标
  ChrCl(Chr4, Make_Bmap);
  Chr4.Xpos := Chr4.Xpos - 1;
  if Chr4.Xpos < 0 then
    Chr4.Xpos := DYoko - 32;
end;

procedure TRei40_05.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  //  释放载入用与绘制用点阵图
  Load_Bmap.Free;
  Make_Bmap.Free;
end;

end.

⌨️ 快捷键说明

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