天天看點

點燈遊戲--一個動态建立元件的示例

  { 點燈遊戲--一個動态建立元件的示例

  Tips : 在動态建立元件時, Parent屬性設定很重要, 如果不設定, 元件是不能顯示的~~ 呵呵, 這個是易犯的低級錯誤, 至少對我來說.

  }

  unit ULamp;

  interface

  uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, ExtCtrls;

  type

  TFormLamp = class(TForm)

  procedure FormCreate(Sender: TObject);

  procedure FormDestroy(Sender: TObject);

  private

  { Private declarations }

  public

  { Public declarations }

  protected

  procedure PanelClickHandle(Sender: TObject);

  end;

  function IsFinished: Boolean;

  var

  FormLamp: TFormLamp;

  LampPanel : array[0..24] of TPanel;

  implementation

  {$R *.dfm}

  function IsFinished: Boolean;

  var

  i: Integer;

  begin

  Result := True;

  for i := 0 to 24 do

  begin

  if (LampPanel[i].Color = $006060) then Result := Result and False;

  end;

  end;

  procedure TFormLamp.PanelClickHandle(Sender: TObject);

  var

  X,Y: Integer;

  ThisTag: Integer;

  begin

  {

  上: (X,Y-1); 下: (X,Y+1), 左: (X-1,Y), 右: (X+1,Y);

  }

  ThisTag := (Sender as TPanel).Tag;

  X := ThisTag div 5;

  Y := ThisTag mod 5;

  LampPanel[ThisTag].Color := $ffffff - LampPanel[ThisTag].Color;

  if (Y>0) then LampPanel[X*5+Y-1].Color := $ffffff - LampPanel[X*5+Y-1].Color;

  if (X>0) then LampPanel[(X-1)*5+Y].Color := $ffffff - LampPanel[(X-1)*5+Y].Color;

  if (Y nil then LampPanel[i].Free;

  end;

  end.