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

📄 unit1.pas

📁 delphi 环境下的一个游戏
💻 PAS
字号:
unit Unit1;

interface

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

type
  TMathChars = set of Char;
  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit1: TEdit;
    Label5: TLabel;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Timer1Timer(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
    RandomData:array of Integer;
    SpendTime:Integer;
    Function isInputValid():Boolean;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  mathset: TMathChars = ['0','1','2','3','4','5','6',
                         '7','8','9','-','(',')','*',
                         '/','+','-','^'];
implementation

uses Unit2;



{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
   //初始化,设置数组RandomData的长度为4
   //并将每个数组元素初始化为零
   setLength(RandomData,4);
   for i := 0 to 3 do
       RandomData[i]:=0;
   SpendTime:=0;
   Timer1.Enabled:=False;
   Timer1.Interval:=1000;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
filename:String;
begin
   Randomize;//初始化随机数
   for i := 0 to 3 do
   begin
        RandomData[i]:=Random(13)+1;//产生一个1到13的随机数
        filename:=IntToStr(RandomData[i])+'.bmp';//根据随机数,得到文件名
        //根据i的不同为不同的Image组件载入图像文件
        case i of
          0 : Image1.Picture.LoadFromFile(filename);
          1 : Image2.Picture.LoadFromFile(filename);
          2 : Image3.Picture.LoadFromFile(filename);
          3 : Image4.Picture.LoadFromFile(filename);
        end;
        edit1.Text:='';
        edit1.SetFocus;
   end;
   Button1.Caption:='重新开始';
   Timer1.Enabled:=True;
   Timer1.Interval:=1000;
   SpendTime:=0; //将SpendTime重新设为0
end;

procedure TForm1.Button2Click(Sender: TObject);
var
result:integer;
answer:String;
begin
   Timer1.Enabled:=False;
   if (not IsInputValid()) then
   begin
     Application.MessageBox('您输入的数至少有一个不是系统所发4张扑克中的一个',
                '输入错误',MB_OK);
     exit;
   end;

   try
      result:=TotalCompute(Edit1.Text);
   except
      on Exception do
      begin
        Application.MessageBox('您的输入有误','输入错误',MB_OK);
        exit;
      end;
   end;

   if (Abs(result-24)<0.001) then
        Application.MessageBox('您真行,我服了您!','对了',MB_OK)
   else
   begin
        answer:='您输入的表达式的计算结果为'+IntToStr(Result)+'!';
        Application.MessageBox(PChar(answer),'错了',MB_OK);
   end;

end;

procedure TForm1.Button3Click(Sender: TObject);
begin
   Close;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
   if (MessageDlg('现在要退出游戏吗?',
    mtConfirmation, [mbOk, mbCancel], 0) = mrOk) then
      canClose:=True
   else
      canClose:=False;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
   SpendTime:=SpendTime+1;
   Label5.Caption:='使用时间:'+IntToStr(SpendTime)+'秒';
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
   if(not (Key in mathset)) then
        Key:=#0;
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   if (Key = VK_RETURN) then
        Button2Click(Sender);
end;

Function TForm1.isInputValid():Boolean;
var
tempStr,Current:String;
ppos:Integer;
InputData:array of Integer;
i:integer;
begin
   tempStr:=Edit1.Text;

   //去掉(和)号
   ppos:=Pos('(',tempStr);
   while(ppos<>0) do
   begin
      Delete(tempStr,ppos,1);//删除括号
      ppos:=Pos('(',tempStr);
   end;

   ppos:=Pos(')',tempStr);
   while(ppos<>0) do
   begin
      Delete(tempStr,ppos,1);//删除括号
      ppos:=Pos(')',tempStr);
   end;

   //获取输入的数字
   setLength(InputData,4);
   ppos:=AnyFirstPos(tempStr);
   InputData[0]:=StrToInt(Copy(tempStr,1,ppos-1));
   tempStr:=Copy(tempStr,ppos+1,Length(tempStr)-ppos);
   ppos:=AnyFirstPos(tempStr);
   InputData[1]:=StrToInt(Copy(tempStr,1,ppos-1));
   tempStr:=Copy(tempStr,ppos+1,Length(tempStr)-ppos);
   ppos:=AnyFirstPos(tempStr);
   InputData[2]:=StrToInt(Copy(tempStr,1,ppos-1));
   tempStr:=Copy(tempStr,ppos+1,Length(tempStr)-ppos);
   ppos:=AnyFirstPos(tempStr);
   InputData[3]:=StrToInt(Copy(tempStr,1,ppos-1));

   //将大于10的数设置为1
   for i:=0 to 3 do
   begin
     if(RandomData[i]>10) then
       RandomData[i]:=1;
   end;

   //利用循环判断当前字符是不是不属于4个数中的任何一个
   for i:=0 to 3 do
   begin
     Current:=Copy(tempStr,i+1,1);
     //如果不属于4个数中的任何一个,则返回false,表示输入有误
     if((InputData[i]<>RandomData[0])
        and (InputData[i]<>RandomData[1])
        and (InputData[i]<>RandomData[2])
        and (InputData[i]<>RandomData[3])) then
     begin
           isInputValid:=false;//返回False
           exit;
     end;
   end;

 isInputValid:=true;

end;


end.

⌨️ 快捷键说明

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