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

📄 unit1.~pas

📁 点灯游戏代码.一个益智小游戏.一个25个格
💻 ~PAS
字号:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    Panel5: TPanel;
    Panel6: TPanel;
    Panel7: TPanel;
    Panel8: TPanel;
    Panel9: TPanel;
    Panel10: TPanel;
    Panel11: TPanel;
    Panel12: TPanel;
    Panel13: TPanel;
    Panel14: TPanel;
    Panel15: TPanel;
    Panel16: TPanel;
    Panel17: TPanel;
    Panel18: TPanel;
    Panel19: TPanel;
    Panel20: TPanel;
    Panel21: TPanel;
    Panel22: TPanel;
    Panel23: TPanel;
    Panel24: TPanel;
    Panel25: TPanel;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure Change(i:integer);
    procedure PanelClick(Sender: TObject);
    function CheckWin:Boolean;
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
    //所有Panel的数组
    p: array[1..25] of TPanel;
    //存储当前灯的状态
    c: array[1..25] of Boolean;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
 var i:integer;
begin
  p[1]:=panel1;p[2]:=panel2;p[3]:=panel3;p[4]:=panel4;p[5]:=panel5;
  p[6]:=panel6;p[7]:=panel7;p[8]:=panel8;p[9]:=panel9;
  p[10]:=panel10;p[11]:=panel11;p[12]:=panel12;p[13]:=panel13;
  p[14]:=panel14;p[15]:=panel15;p[16]:=panel16;p[17]:=panel17;
  p[18]:=panel18;p[19]:=panel19;p[20]:=panel20;p[21]:=panel21;
  p[22]:=panel22;p[23]:=panel23;p[24]:=panel24;p[25]:=panel25;
  //设置所有Panel的Tag属性,并把当前状态设为“关”
  for i:=1 to 25 do
  begin
  p[i].Tag:=i; c[i]:=false;
end;
end;

procedure TForm1.Change(i:integer);
begin
  //改变灯当前的状态
  c[i]:=not c[i];
 if c[i] then
  p[i].Color :=clBlack   //如果开着,显示黑色
else
 p[i].Color :=clWhite;  //如果关了,显示白色
end;

function TForm1.CheckWin:Boolean;
var i:integer;
begin
  result:=True;
  for i:=1 to 25 do
    if not c[i] then
    begin
      //如果某个灯是关着的,则返回False
      Result:=False;
      exit
    end;
end;

procedure TForm1.PanelClick(Sender: TObject);
var i,j:integer;
begin
  //得到点击的灯的序号
  i:=TPanel(Sender).Tag ;
  //改变被点击的灯
  Change(i);
  //如果被点击的灯不是第一排,则改变上边的灯
  if i >5 then Change(i-5);
  //如果被点击的灯不是最后一排,则改变下边的灯
  if i<21 then Change(i+5);
  //如果被点击的灯不是最后一列,则改变右边的灯
  if (i mod 5) <>0 then Change(i+1);
  //如果被点击的灯不是第一列,则改变左边的灯
  if (i mod 5) <>1 then Change(i-1);
  //如果胜利,则弹出消息
  if CheckWin then Showmessage('你赢了!');
end;


procedure TForm1.N1Click(Sender: TObject);
begin
application.MessageBox('点击一个格子,它和周围四个格子的颜色都会由白变黑或由黑变白。当25个格子全变成黑色时,游戏胜利!加油哦!','游戏规则',mb_ok)
end;

procedure TForm1.N2Click(Sender: TObject);
var i:integer;
begin
 for i:=1 to 25 do
 p[i].Color:=clWhite;
end;

end.
 

⌨️ 快捷键说明

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