1. 程式人生 > 其它 >Delphi 經典遊戲程式設計40例 的學習 例2

Delphi 經典遊戲程式設計40例 的學習 例2

unit rei40_02;

interface

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

type
  TRein40_02 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

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)
   );

   Load_Bmap : TBitmap;
   Make_Bmap : TBitmap;

   P,PX,PY,GX,GY : 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;

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

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

procedure TRein40_02.Button1Click(Sender: TObject);

var
  X,Y : Byte;

begin
  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);
end;

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

end.

 

學習點:

1,圖樣的概念 ,pattern

2, 用圖樣組成 圖形,

3,TBITMAP 類

4,圖樣 做成 圖形的資料結構 ,演算法。