Delphi 经典游戏程序设计40例 的学习 例3 图样的重叠与多重地图03


背景图 + 前图

代码

unit rei40_02;

interface

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

type
  TRein40_02 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

 // procedure MakeMapClean;

const
  Yoko = 37;
  Tate = 27;

var
  Rein40_02: TRein40_02;

   Ptmap1: array[0..(37 * 27 - 1)] of Byte = (
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
      7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7,7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
      7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7,
    7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7,
    7, 7, 7, 8, 9, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
      7, 7, 7, 7, 7, 7, 7, 8, 9, 7, 7, 7, 7, 7,
    7, 1, 1,10,11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
      1, 1, 1, 1, 1, 1, 1,10, 11, 1, 1, 1, 1, 7,
    7, 1, 1,10,11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
      1, 1, 1, 1, 1, 1, 1,10,11, 1, 1, 1, 1, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 9, 7, 7, 7,
      7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,10,11, 1, 1, 1,
      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7,
    7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,10,11, 1, 1, 1,
      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 8, 9, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
      7, 7, 7, 7, 7, 7, 8, 9, 7, 7, 7, 7, 7, 7,
    7, 1, 1, 1, 1, 1, 1, 1,10,11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
      1, 1, 1, 1, 1, 1,10,11, 1, 1, 1, 1, 1, 7,
    7, 1, 1, 1, 1, 1, 1, 1,10,11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
      1, 1, 1, 1, 1, 1,10,11, 1, 1, 1, 1, 1, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
      8, 9, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     10,11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7,
    7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     10,11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 8, 9, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
      7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 1, 1, 1, 1, 1, 1, 1,10,11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7,
    7, 1, 1, 1, 1, 1, 1, 1,10,11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
      7, 7, 7, 8, 9, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
      1, 1, 1,10,11, 1, 1, 1, 1, 1, 1, 1, 1, 7,
    7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
      1, 1, 1,10,11, 1, 1, 1, 1, 1, 1, 1, 1, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 8, 9, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
      7, 7, 7, 7, 7, 7, 7, 8, 9, 7, 7, 7, 7, 7,
    7, 1, 1, 1, 1, 1, 1, 1,10,11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
      1, 1, 1, 1, 1, 1, 1,10,11, 1, 1, 1, 1, 7,
    7, 1, 1, 1, 1, 1, 1, 1,10,11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
      1, 1, 1, 1, 1, 1, 1,10,11, 1, 1, 1, 1, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
      7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
    7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
      7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
  );

     Ptmap2: array[0..36, 0..26] of Byte = (
    (2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,2,2,2,2,2,4,2,2,2,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,4,2,2,2,2,2,2,2,2,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,2,2,2,4,2,2,2,2,2,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2, 2, 2, 2, 2,12,12,12,12),
    (2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2, 2, 2, 2, 2,12,12,12,12),
    (2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2, 2, 2, 2,12,12,12,12,12,12),
    (2,2,2,2,2,2,2,2,4,2,2,2,2,2,2,2,2,2, 2, 2, 2,12,12,12,12,12,12),
    (2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2, 2, 2, 2, 2,12,12,12,12),
    (2,2,2,5,6,2,2,2,2,2,2,2,2,2,2,2,2,2, 2, 2, 2, 2, 2,12,12,12,12),
    (2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,12, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,12,12,12,12,12,12,12,12,12),
    (2,2,2,2,2,2,2,4,2,2,2,2,2,2,2,2,2,2,12,12,12,12,12,12,12,12,12),
    (2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,2,2,2,2,2,2,2,4,2,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2,12,12),
    (2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2, 2, 2, 2, 2, 2, 2,12,12)
   );

   Ptmap3: array[0..36, 0..26] of Byte = (
    (2,2,2,2,2,2,2,2, 2,2,2,2,2,2, 2,2,2,2,2,2, 2,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,2, 2,2,2,2,2,2, 2,2,2,2,2,2, 2,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,2, 2,2,2,2,2,2, 2,2,2,2,2,2, 2,2,2,2,2,2,0),
    (2,2,2,2,2,3,2,2, 2,2,2,2,2,2, 2,2,2,2,2,2, 2,2,2,2,2,2,0),
    (2,2,2,2,2,4,2,2, 2,2,2,2,2,2, 0,2,2,3,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,2, 2,2,2,2,2,2,12,2,2,4,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,2, 2,2,2,2,2,2,12,2,2,2,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,2, 2,2,3,2,2,2, 0,2,2,2,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,2, 2,2,4,2,2,2, 0,2,2,2,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,2, 2,2,2,2,2,2, 0,2,2,2,2,2, 0,2,2,3,2,2,0),
    (2,2,2,2,2,2,2,2, 2,2,2,2,2,2, 0,2,2,2,2,2, 0,2,2,4,2,2,0),
    (2,2,2,2,2,2,2,2, 2,2,2,2,2,2, 0,2,2,2,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,3, 2,2,2,2,2,2, 0,2,2,2,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,4, 2,2,2,2,2,2, 0,2,2,2,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,2, 2,2,2,2,2,2, 0,2,2,2,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,2, 0,2,2,2,2,2, 0,2,2,2,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,2, 0,2,2,2,2,2, 0,2,2,2,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,2,12,2,2,2,2,2, 0,2,2,2,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,2,12,2,2,2,2,2, 0,2,2,2,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,2, 0,2,2,2,2,2, 0,2,2,2,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,2, 0,2,2,2,2,2, 0,2,2,2,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,2, 0,2,2,2,2,2, 0,2,2,2,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,2,3,2, 0,2,2,2,2,2, 0,2,2,2,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,2,4,2, 0,2,2,2,2,2, 0,2,2,2,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,2, 0,2,2,2,2,2, 2,2,2,2,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,2, 0,2,2,2,2,2, 2,2,3,2,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,3,2,2, 0,2,2,2,2,2, 2,2,4,2,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,4,2,2, 0,2,2,2,2,2, 2,2,2,2,2,2, 0,2,2,2,2,2,0),
    (2,2,5,6,2,2,2,2, 2,2,2,2,2,2, 2,2,2,2,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,2, 2,2,2,2,2,2, 2,2,2,2,2,2, 0,2,2,3,2,2,0),
    (2,2,2,2,2,2,2,2, 2,2,2,2,2,2, 2,2,3,2,2,2,12,2,2,4,2,2,0),
    (2,2,2,2,2,2,2,2, 2,2,2,2,2,2, 2,2,4,2,2,2,12,2,2,2,2,2,0),
    (2,2,2,2,2,2,3,2, 2,2,2,2,2,2, 2,2,2,2,2,2, 0,2,2,2,2,2,0),
    (2,2,2,2,2,2,4,2, 2,2,2,2,2,2, 2,2,2,2,2,2, 2,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,2, 2,2,2,2,2,2, 2,2,2,2,2,2, 2,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,2, 2,2,2,2,2,2, 2,2,2,2,2,2, 2,2,2,2,2,2,0),
    (2,2,2,2,2,2,2,2, 2,2,2,2,2,2, 2,2,2,2,2,2, 2,2,2,2,2,2,0)
   );

  Ptmap4: array[0..36, 0..26] of Byte = (
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,17,17,17,17,17,17,17,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,18,18,18,18,18,18,18,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0,17,17,17,17,17,17,17,12, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0,18,18,18,18,18,18,18,12, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0,17,17,17,17,17,17,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0,18,18,18,18,18,18,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,17,17,
      17,17,17,17,17, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,18,18,
      18,18,18,18,18, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,12,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 7),
    (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 7)
   );

   Load_Bmap : TBitmap;
   Make_Bmap : TBitmap;
   Xpat_Bmap : TBitmap;

   P,PX,PY,Xdip : Byte;

   Rect_L,Rect_M : TRect;
   

implementation

{$R *.dfm}

procedure TRein40_02.FormCreate(Sender: TObject);
begin
  Rein40_02.Height := 480;
  Rein40_02.Width :=640;

  Button1.Height :=25;
  Button1.Width :=25;
  Button1.Top :=16;
  Button1.Left :=603;

  Button2.Height :=25;
  Button2.Width :=25;
  Button2.Top := 56;
  Button2.Left :=603;

  Button3.Height :=25;
  Button3.Width :=25;
  Button3.Top :=96;
  Button3.Left :=603;

  Button4.Height :=25;
  Button4.Width :=25;
  Button4.Top := 136;
  Button4.Left :=603;

  Button5.Height :=25;
  Button5.Width :=25;
  Button5.Top :=176;
  Button5.Left :=603;

  Button6.Height :=25;
  Button6.Width :=25;
  Button6.Top := 216;
  Button6.Left :=603;

  Load_Bmap := TBitmap.Create;
  Load_Bmap.LoadFromFile(GetCurrentDir + '\Pat_Sample.bmp');

  Xpat_Bmap :=TBitmap.Create;
  Xpat_Bmap.Width := 256;
  Xpat_Bmap.Height :=256;

  Rect_L :=Rect(0,0,256,256);
  Xpat_Bmap.Canvas.CopyMode :=cmSrcCopy;
  Xpat_Bmap.Canvas.CopyRect(Rect_L,Load_Bmap.Canvas,Rect_L);

  Xpat_Bmap.Canvas.Brush.Color :=clBlack;
  Xpat_Bmap.Canvas.BrushCopy(Rect_L,Load_Bmap,Rect_L,clWhite);

  Xpat_Bmap.Canvas.CopyMode :=cmMergePaint;
  Xpat_Bmap.Canvas.CopyRect(Rect_L,Load_Bmap.Canvas,Rect_L);


  Make_Bmap := TBitmap.Create;
  Make_Bmap.Width := Yoko * 16;
  Make_Bmap.Height := Tate * 16;

  Xdip :=0;
end;

procedure MakeMapClean;

begin
   with Make_Bmap  do
  begin
    Canvas.Brush.Color := clRed;
    Canvas.FillRect(Rect(0,0,Yoko*16,Tate*16));
  end;
end;

procedure TRein40_02.Button1Click(Sender: TObject);

var
  X,Y : Byte;

begin
  //MakeMapClean;
  Make_Bmap.Canvas.CopyMode := cmSrcCopy ;
  for Y :=0  to (Tate -1) do
    for X :=0  to (Yoko - 1) do
    begin
      p := Ptmap1[ Y* Yoko + X] ;
      if p <> 0 then
      begin
        PX :=(p mod 16) * 16;
        PY :=(p div 16) * 16;

        Rect_L := Rect(PX,PY,PX+16,PY+16);
        Rect_M := Rect(x*16,y*16,x*16+16,y*16+16);

        Make_Bmap.Canvas.CopyRect(Rect_M,Load_Bmap.Canvas,Rect_L);

      end;

    end;

    Rein40_02.Canvas.CopyMode := cmSrcCopy;
    Rein40_02.Canvas.Draw(0,0,Make_Bmap);



end;

procedure TRein40_02.FormPaint(Sender: TObject);
begin



     Rein40_02.Canvas.CopyMode := cmSrcCopy;
     Rein40_02.Canvas.Draw(0,0,Make_Bmap);

     if Xdip = 1 then
     Rein40_02.Canvas.draw(0,0,Xpat_Bmap);

end;

procedure TRein40_02.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Load_Bmap.Free;
  Make_Bmap.Free;
  Xpat_Bmap.Free;
end;

procedure TRein40_02.Button2Click(Sender: TObject);
var
  X,Y : Byte;

begin
 // MakeMapClean;
  Make_Bmap.Canvas.CopyMode := cmSrcCopy;

  for y:=0 to (Tate-1) do
    for x:=0 to (Yoko-1) do
    begin
      p := ptmap2[x,y];
      if p  <> 0 then
      begin
        PX := (p mod 16) *16 ;
        PY := (p div 16) *16 ;
        Rect_L := Rect(PX,PY,PX+16,PY+16);
        Rect_M := Rect(x*16,y*16,x*16+16,y*16+16);
        Make_Bmap.Canvas.CopyRect(Rect_M,Load_Bmap.Canvas,Rect_L);

      end;

    end;

    Rein40_02.Canvas.CopyMode := cmSrcCopy;
    Rein40_02.Canvas.Draw(0,0,Make_Bmap);
end;

procedure TRein40_02.Button3Click(Sender: TObject);
begin
//  MakeMapClean;
  Rein40_02.Canvas.Draw(0,0,Xpat_Bmap);

  Xdip :=1;

end;

procedure TRein40_02.Button4Click(Sender: TObject);

var
  x,y :Byte;

begin
  //MakeMapClean;
  Make_Bmap.Canvas.CopyMode := cmSrcCopy;

  for y:=0 to (Tate-1) do
    for x:=0 to (Yoko-1) do
    begin
      p := Ptmap3[x,y];
      if p <> 0 then
      begin
        PX := (p mod 16) *16;
        PY := (p div 16) *16;
        Rect_L :=Rect(PX,PY,PX+16,PY+16) ;
        Rect_M :=Rect(x*16,y*16,x*16+16,y*16+16);
        Make_Bmap.Canvas.CopyRect(Rect_M,Load_Bmap.Canvas,Rect_L);
      end;
    end;

    for y:=0 to (Tate-1) do
      for x:=0 to (Yoko-1) do
      begin
        p := Ptmap4[x,y];
        if p <>0 then
        begin
           PX := (P mod 16) *16;
           PY := (p div 16)  *16;
           Rect_L := Rect(PX,PY,PX+16,PY+16);
           Rect_M := Rect(x*16,y*16,x*16+16,y*16+16);

           Make_Bmap.Canvas.CopyMode := cmSrcPaint;
           Make_Bmap.Canvas.CopyRect(Rect_M,Xpat_Bmap.Canvas,Rect_L);

           Make_Bmap.Canvas.CopyMode := cmSrcAnd;
           Make_Bmap.Canvas.CopyRect(Rect_M,Load_Bmap.Canvas,Rect_L);

        end;  
      end;

      Rein40_02.Canvas.Draw(0,0,Make_Bmap) ;

      Xdip :=0;
end;

procedure TRein40_02.Button5Click(Sender: TObject);
var
  x,y :Byte;

begin
 // MakeMapClean;
  Make_Bmap.Canvas.CopyMode := cmSrcCopy;

  for y:=0 to (Tate-1) do
    for x:=0 to (Yoko-1) do
    begin
      p := ptmap3[x,y];
      if p  <> 0 then
      begin
        PX := (p mod 16) *16 ;
        PY := (p div 16) *16 ;
        Rect_L := Rect(PX,PY,PX+16,PY+16);
        Rect_M := Rect(x*16,y*16,x*16+16,y*16+16);
        Make_Bmap.Canvas.CopyRect(Rect_M,Load_Bmap.Canvas,Rect_L);

      end;

    end;

    Rein40_02.Canvas.CopyMode := cmSrcCopy;
    Rein40_02.Canvas.Draw(0,0,Make_Bmap);
end;

procedure TRein40_02.Button6Click(Sender: TObject);
var
  x,y :Byte;
begin
 // MakeMapClean;
Make_Bmap.Canvas.CopyMode := cmSrcCopy;

  for y:=0 to (Tate-1) do
    for x:=0 to (Yoko-1) do
    begin
      p := ptmap4[x,y];
      if p  <> 0 then
      begin
        PX := (p mod 16) *16 ;
        PY := (p div 16) *16 ;
        Rect_L := Rect(PX,PY,PX+16,PY+16);
        Rect_M := Rect(x*16,y*16,x*16+16,y*16+16);
        Make_Bmap.Canvas.CopyRect(Rect_M,Load_Bmap.Canvas,Rect_L);

      end;

    end;

    Rein40_02.Canvas.CopyMode := cmSrcCopy;
    Rein40_02.Canvas.Draw(0,0,Make_Bmap);
end;

end.

 

背景图

 前图

问题 :重复点按钮图会乱,原来的图不会消除。

自己做了一个 过程,

 procedure MakeMapClean;

但是这个过程 不能放倒 类里面说明,奇怪。

procedure MakeMapClean;

begin
with Make_Bmap do
begin
Canvas.Brush.Color := clRed;
Canvas.FillRect(Rect(0,0,Yoko*16,Tate*16));
end;
end;

是对 Make_Bmap 刷红, 还是不行。

应该是对 FORM 的canvas 进行 刷会底色吧。

procedure CleanScreen;

begin
with Rein40_02 do
begin
Canvas.Brush.Color := clWhite;
Canvas.FillRect(Rect(0,0,Yoko*16,Tate*16));
end;
end;

还是不行,

应该是 P<>0的时候没有对 Makemap 进行贴图处理,

研究下 。

就是这个问题,

为了省掉 处理 空图 的贴图 处理 ,实际也不算是BUG 

但是 为什么我写的 PROCUDURE 为什么不能放倒 CLASS里面?







相关