unit samp2;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  dddd, ddddut;

type
  TForm1 = class(TForm)
    DDDD1: TDDDD;
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormDestroy(Sender: TObject);
    procedure DDDD1Init(Sender: TObject; fNeedChange: Boolean);
    procedure DDDD1Destroy(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
    Surf1:TDDDDSurface;
    Spr:TDDDDSprite;
    Bg:TDDDDBg;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  i:Integer;
begin
  DDDD1.Clear;		//バックバッファのクリア

  for i:=31 downto 1 do begin
    Spr[i].Pos:=Spr[i-1].Pos; //i-1番のスプライトの、表示位置を得に、iのスプライトを置く
  end;
  Spr.Move(0, X,Y);	//マウスカーソルの位置に、スプライトを持ってくる
  Bg.RollX:=Bg.RollX+1; //左に一ドットスクロールさせる。
  Bg.Update;		//ＢＧをバックバッファに書き込む
  Spr.Update;		//スプライトをバックバッファに書き込む

  DDDD1.Flip;		//これまでの作業結果を見せる
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Bg.Free;
  Spr.Free;
end;

procedure TForm1.DDDD1Init(Sender: TObject; fNeedChange: Boolean);
var
i,x,y:Integer;
begin
  //サーフェスの作成
  Surf1:=TDDDDSurface.Create(DDDD1,128,192, 64);

  //サーフェスの設定
  Surf1.LoadBMP('samp.bmp');
  Surf1.ColorKey:=Surf1.Pixels[0,0];  //一番左上のドットの色をカラーキーに

  DDDD1.BackColor:=Surf1.Pixels[0,0]; //背景色も同じ色に

  //パレットの読みこみ
  DDDD1.ReadPalette('samp.bmp');
  DDDD1.UpdatePalette;


  //スプライトセットの作成、スプライトは同時に32個使う、シェイプは1種類まで
  Spr:=TDDDDSprite.Create(32,1);
  //マウスカーソルを消す
  ShowCursor(False);
  //スプライトシェイプ0番は、サーフェス0番の(0,0)-(128,192)
  Spr.SetShape(0, Surf1, Rect(0,0,128,192));
  //スプライト0-31番は、スプライトシェイプ0番を持つ
  //スプライト0-31番を、見えるようにしろ
  for i:=0 to 31 do begin
    Spr[i].IShape:=0;
    Spr[i].Visible:=True;
  end;
  //Bgの作成
  // Bgは、5x6チップで構成、１チップの大きさは128x192ドット
  Bg:=TDDDDBg.Create(5,6,128,192);
  //チップ0番は、Surf1の(0,0)に左上座標を持つ矩形から取ってくる
  //  チップ0番は、カラーキーによる透過コピーをしない(False)
  Bg.SetChip(0, Surf1, 0,0, False);
  //Bgテーブルの設定、全部チップ０番で埋める
  For y:=0 to 4 do
    For x:=0 to 5 do
      Bg[x,y]:=0;

end;

procedure TForm1.DDDD1Destroy(Sender: TObject);
begin
  Surf1.Free;
end;

end.
