📄 unit1.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 + -