?? u_point24.~pas
字號:
unit U_Point24;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Menus,Math;
type
TmathVar = set of Char;
TFrm_Point = class(TForm)
Image1: TImage;
Image2: TImage;
Image3: TImage;
Image4: TImage;
E_Point: TEdit;
Btn_Calc: TButton;
Menu_Point: TMainMenu;
F1: TMenuItem;
N_Start: TMenuItem;
N_GameRu: TMenuItem;
N_Exit: TMenuItem;
Label1: TLabel;
Label2: TLabel;
Lab_Time: TLabel;
Tim_Point: TTimer;
But_ReSet: TButton;
//讀取第一個運算符的位置以得到表達式的第一個數字
function AnyFirstPos(Str: string): Integer;
//讀取最后一個運算符的位置以得到表達式的最后一個數字
function AnyLastPos(Str: string): Integer;
//判斷最先出現的符號是+號、-號、*號還是/號
function AnyFirstF(Str:String):Char;
//此計算用于計算不帶()號的加、減、乘、除運算
function SubCompute(Str:String):integer;
//用于計算表達式的結果
function TotalCompute(Str:String):integer;
Function isInputValid():Boolean;
procedure FormCreate(Sender: TObject);
procedure N_StartClick(Sender: TObject);
procedure N_GameRuClick(Sender: TObject);
procedure N_ExitClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure But_ReSetClick(Sender: TObject);
procedure Tim_PointTimer(Sender: TObject);
procedure E_PointKeyPress(Sender: TObject; var Key: Char);
procedure Btn_CalcClick(Sender: TObject);
procedure E_PointKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
RanDomData : array of Integer; //存放四個隨機數
SpendTime : Integer;
{ Private declarations }
public
{ Public declarations }
end;
var
Frm_Point: TFrm_Point;
mathVar : TmathVar = ['0','1','2','3','4','5','6','7','8','9','(',')',
'+','-','*','/',#13,#8];{#13 回車 #8 退格}
implementation
uses U_Help;
{$R *.dfm}
{===================================初始化================================}
// 程序啟動時圖片框讀取背景圖片
procedure TFrm_Point.FormCreate(Sender: TObject);
begin
Image1.Picture.LoadFromFile('pic\bg.bmp');
Image2.Picture.LoadFromFile('pic\bg.bmp');
Image3.Picture.LoadFromFile('pic\bg.bmp');
Image4.Picture.LoadFromFile('pic\bg.bmp');
end;
//菜單
//開始游戲
{隨機讀取4張牌同時啟動計時器}
procedure TFrm_Point.N_StartClick(Sender: TObject);
var
i : Integer;
begin
SpendTime := 0;
Btn_Calc.Enabled := True;
Tim_Point.Enabled := True;
Randomize;//初始化隨機數
SetLength(RanDomData, 4);
for i := 0 to 3 do
begin
RanDomData[i] := Random(13) + 1;
end;
Image1.Picture.LoadFromFile('pic\' + IntToStr(RanDomData[0]) + '.bmp');
Image2.Picture.LoadFromFile('pic\' + IntToStr(RanDomData[1]) + '.bmp');
Image3.Picture.LoadFromFile('pic\' + IntToStr(RanDomData[2]) + '.bmp');
Image4.Picture.LoadFromFile('pic\' + IntToStr(RanDomData[3]) + '.bmp');
end;
//游戲規則
procedure TFrm_Point.N_GameRuClick(Sender: TObject);
begin //啟動幫助
Frm_Help.Show;
end;
//退出
procedure TFrm_Point.N_ExitClick(Sender: TObject);
begin
close;
end;
procedure TFrm_Point.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
if Application.MessageBox('是否要退出游戲?', '系統詢問',
MB_OKCANCEL + MB_ICONQUESTION) = IDOK then
begin
CanClose := true;
end
else
begin
CanClose := False;
end;
end;
procedure TFrm_Point.But_ReSetClick(Sender: TObject);
begin
But_ReSet.Caption := '重新發牌';
N_Start.Caption := '重新游戲';
N_Start.Click;
E_Point.Clear;
end;
procedure TFrm_Point.Tim_PointTimer(Sender: TObject);
begin
SpendTime := SpendTime + 1;
Lab_Time.Caption := IntToStr(SpendTime);
end;
procedure TFrm_Point.E_PointKeyPress(Sender: TObject; var Key: Char);
begin
if Btn_Calc.Enabled and (not (key in mathVar)) then
begin
Application.MessageBox('請輸入合法字符!', '系統提示',
MB_OK + MB_ICONWARNING);
key := #0;
end;
end;
{=========================================================================}
//計算
procedure TFrm_Point.Btn_CalcClick(Sender: TObject);
var
resu:integer;
answer:String;
begin
if E_Point.Text = '' then
begin
Application.MessageBox('請輸入數學表達式!', '系統提示',
MB_OK + MB_ICONINFORMATION);
exit;
end;
resu := 0;
Tim_Point.Enabled:=False;
try
if (not IsInputValid()) then
begin
Application.MessageBox('您輸入的數至少有一個不是系統所發4張撲克中的一個',
'輸入錯誤',MB_OK+MB_ICONERROR);
Tim_Point.Enabled:= True;
exit;
end;
resu:=TotalCompute(E_Point.Text);
except
Application.MessageBox('您的輸入有誤','輸入錯誤',
MB_OK+MB_ICONWARNING);
Tim_Point.Enabled:= True;
exit;
end;
if (Abs(resu-24)<0.001) then
begin
Application.MessageBox('您真行,我服了您!','對了',
MB_OK+MB_ICONINFORMATION);
N_Start.Click;
E_Point.Clear;
end
else
begin
answer:='您輸入的表達式的計算結果為'+IntToStr(Resu)+'!';
Application.MessageBox(PChar(answer),'錯了',MB_OK+MB_ICONERROR);
Tim_Point.Enabled:= True;
end;
end;
{=========================================================================}
//讀取第一個運算符的位置以得到表達式的第一個數字
function TFrm_Point.AnyFirstPos(Str: string): Integer;
var
SubPos:integer;
PluPos:integer;
MulPos:integer;
DivPos:integer;
FirstPos:integer;
begin
//定位字符串中最先一個運算符的位置
SubPos:=Pos('-',Str);
PluPos:=Pos('+',Str);
MulPos:=Pos('*',Str);
DivPos:=Pos('/',Str);
FirstPos:=200;
if (SubPos=0) then //如果沒有-號
SubPos:=200; //將SubPos設置成一個不可能的值
if (PluPos=0) then //如果沒有+號
PluPos:=200; //將PluPos設置成一個不可能的值
if (MulPos=0) then //如果沒有*號
MulPos:=200; //將MulPos設置成一個不可能的值
if (DivPos=0) then //如果沒有/號
DivPos:=200; //將DivPos設置成一個不可能的值
if(FirstPos > SubPos) then
FirstPos := SubPos;
if (FirstPos > PluPos) then
FirstPos := PluPos;
if (FirstPos>MulPos) then
FirstPos := MulPos;
if (FirstPos > DivPos) then
FirstPos:=DivPos;
Result := FirstPos; //結束函數,返回位置
end;
//讀取最后一個運算符的位置以得到表達式的最后一個數字
function TFrm_Point.AnyLastPos(Str: string): Integer;
var
SubPos:integer;
PluPos:integer;
MulPos:integer;
DivPos:integer;
Pos:Integer;
begin
//定位字符串中最后一個運算符的位置
SubPos:=LastDelimiter('-',Str);
PluPos:=LastDelimiter('+',Str);
MulPos:=LastDelimiter('*',Str);
DivPos:=LastDelimiter('/',Str);
Pos:=SubPos;
if (Pos<PluPos) then
Pos:=PluPos;
if (Pos<MulPos) then
Pos:=MulPos;
if (Pos<DivPos) then
Pos:=DivPos;
Result:=Pos; //結束函數,返回位置
end;
//判斷最先出現的符號是+號、-號、*號還是/號
function TFrm_Point.AnyFirstF(Str: String): Char;
var
SubPos:integer;
PluPos:integer;
MulPos:integer;
DivPos:integer;
Operator:char;
tempPos:integer;
begin
SubPos:=Pos('-',Str);
PluPos:=Pos('+',Str);
MulPos:=Pos('*',Str);
DivPos:=Pos('/',Str);
if (SubPos=0) then //如果沒有-號
SubPos:=200; //將SubPos設置成一個不可能的值
if (PluPos=0) then //如果沒有+號
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -