📄 helpag.pas
字号:
unit helpag;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Menus, ExtCtrls, Buttons;
type
Tf_help_about_game = class(TForm)
sp: TButton;
RH: TEdit;
RG: TEdit;
menu_help_about_game: TMainMenu;
menu_yx: TMenuItem;
menu_yx_xyx: TMenuItem;
menu_yx_hs: TMenuItem;
fg3: TMenuItem;
menu_yx_exit: TMenuItem;
menu_help: TMenuItem;
menu_help_readme: TMenuItem;
fg4: TMenuItem;
menu_help_about: TMenuItem;
menu_line: TGroupBox;
menu_help_readme_1: TMenuItem;
menu_help_readme_2: TMenuItem;
menu_help_readme_3: TMenuItem;
menu_help_readme_4: TMenuItem;
menu_vhelp_readme_5: TMenuItem;
menu_help_readm_6: TMenuItem;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
dh: TLabel;
dg: TLabel;
Image1: TImage;
Image3: TImage;
Image4: TImage;
Image5: TImage;
Image6: TImage;
Image7: TImage;
Image8: TImage;
Image9: TImage;
Image10: TImage;
Image11: TImage;
Image12: TImage;
Image13: TImage;
Image14: TImage;
Image15: TImage;
imagepic: TImage;
Image2: TImage;
imagenone: TImage;
menu_yx_xyx_dn: TMenuItem;
menu_yx_xyx_rn: TMenuItem;
Imagef: TImage;
Timer1: TTimer;
Timer2: TTimer;
N11: TMenuItem;
procedure spClick(Sender: TObject);
procedure menu_yx_exitClick(Sender: TObject);
procedure menu_yx_hsClick(Sender: TObject);
procedure menu_yx_xyx_dnClick(Sender: TObject);
procedure menu_yx_xyx_rnClick(Sender: TObject);
procedure menu_help_aboutClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure RHKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure RGKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure ImagedogClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure drawdog;
procedure drawdogf;
procedure Timer2Timer(Sender: TObject);
procedure ImagedogMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure RHGChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
f_help_about_game : Tf_help_about_game;
pc_man : integer; //人或电脑先走
m,n,l : integer; //拿旗子的行数、个数、总和
h,hm : array[1..3] of integer; //棋子的个数和原始状态
a,b,c : array[1..12] of integer; //输棋的形式
imagedog : array[1..17] of TImage; //图片数组
imageflag : array[1..15] of integer; //棋子状态数组
firstdog,lastdog : array[1..3] of integer; //每行棋子的开始、结束数目
comthink : integer; //电脑考虑标志
clickflag : integer; //单击判断
i,j,k : integer;
implementation
uses helpaga;
{$R *.DFM}
procedure Tf_help_about_game.drawdog();
begin
for k:=firstdog[m] to lastdog[m] do
if imageflag[k]=2 then
begin
imagedog[k].picture:=imagedog[16].picture;
imageflag[k]:=0;
end;
h[m]:=h[m]-n;
end;
procedure Tf_help_about_game.drawdogf();
begin
for i:=1 to 3 do
for k:= hm[i]-h[i]+firstdog[i] to lastdog[i] do
begin
imagedog[k].picture:=imagepic.Picture;
imageflag[k]:=1;
end;
for k:= hm[m]-h[m]+firstdog[m] to hm[m]-h[m]+firstdog[m]+n-1 do
begin
imagedog[k].picture:=imagef.Picture;
imageflag[k]:=2;
end;
end;
procedure Tf_help_about_game.spClick(Sender: TObject);
var rhg : string;
begin
If SP.Enabled=False Then Exit;
If pc_man=0 then //pc_man=0 pc-first
pc_man:=1
else
begin
m:=0; n:=0;
rhg:='0'+RH.text;
if (Length(rhg)=2) and (rhg>'00') and (rhg<'04') then
m:=strtoint(rhg);
rhg:='0'+RG.text;
if (Length(rhg)=2) and (rhg>'00') and (rhg<'08') then
n:=strtoint(rhg);
If (m<1) Or (m>3) Then
begin
RH.SetFocus;
RH.SelStart:=0;
RH.SelLength:=Length(RH.Text);
Exit;
End;
If h[m]=0 Then
begin
RH.SetFocus;
RH.SelStart:=0;
RH.SelLength:=Length(RH.Text);
Exit;
End;
If (n<1) Or (n>h[m]) Then
begin
RG.SetFocus;
RG.SelStart:=0;
RG.SelLength:=Length(RG.Text);
Exit;
End;
drawdog;
end;
while true do
begin
comthink:=1;
sp.Enabled:=false;
menu_yx_hs.Enabled:=False;
L:=h[1]+h[2]+h[3];
m:=0;
n:=0;
If L=15 Then
begin
m:=trunc(Int(Random*3))+1;
n:=1;
break;
End;
If L=0 Then { Win }
break;
j:=0;
For i:=1 To 12 do
begin
If (h[1]=A[I]) And (h[2]=B[I]) And (h[3]=C[I]) Then
begin
while (j=0) do
begin
m:=trunc(Int(random*3))+1;
n:=1;
If h[m]>=3 Then n:=trunc(Int(random*2))+1;
for k:=1 to m do
if k<>m then
if h[k]=h[m]-n then j:=1;
j:=1-j;
end;
j:=1;
break;
End;
end;
if j=1 then
break;
If (L=h[1]) Or (L=h[2]) Or (L=h[3]) Then
begin
If L<>1 Then
begin { L=1 Lose }
for i:=1 to 3 do
if h[i]<>0 then
M:=i;
N:=L-1;
End;
break;
End;
If (h[1]=0) Or (h[2]=0) Or (h[3]=0) Then
begin
If L=2 Then
begin
for i:=1 to 2 do
if h[i]=1 then
m:=m+i;
If M=3 Then
M:=trunc(Int(random*2))+1;
N:=1;
break;
End;
If (h[1]=1) Or (h[2]=1) Or (h[3]=1) Then
begin
for i:=1 to 3 do
if h[i]>1 then
m:=i;
N:=L-1;
break;
End;
If (h[1]<>h[2]) And (h[2]<>h[3]) And (h[3]<>h[1]) Then
begin
for i:=1 to 3 do
if h[i]>L/2 then
m:=i;
if h[1]=0 then
n:=abs(h[2]-h[3]);
if h[2]=0 then
n:=abs(h[1]-h[3]);
if h[3]=0 then
n:=abs(h[1]-h[2]);
break;
end
Else
begin
for i:=1 to 2 do
if h[i]<>0 then
m:=m+i;
if m=3 Then
m:=trunc(Int(random*2))+1;
N:=1;
break;
End;
End;
If (h[1]=h[2]) And (h[2]=h[3]) Then
begin
M:=trunc(Int(random*3))+1;
N:=h[1];
break;
End;
If (L-h[1]=2) Or (L-h[2]=2) Or (L-h[3]=2) Then
begin
for i:=1 to 3 do
if h[i]<>1 then
m:=i;
N:=L-3;
break;
End;
If (h[1]=h[2]) Or (h[2]=h[3]) Or (h[3]=h[1]) Then
begin
if h[1]=h[2] then
m:=3;
if h[2]=h[3] then
m:=1;
if h[1]=h[3] then
m:=2;
n:=h[m];
break;
End;
If (L-h[1]=3) Or (L-h[2]=3) Or (L-h[3]=3) Or (L-h[1]=4) Or (L-h[2]=4)
Or (L-h[3]=4) Or ((L-h[1]=5) And (Abs(h[2]-h[3])=1))
Or ((L-h[2]=5) And (Abs(h[1]-h[3])=1))
Or ((L-h[3]=5) And (Abs(h[1]-h[2])=1)) Then
begin
for i:=1 to 3 do
if h[i]>3 then
m:=i;
N:=L-6;
break;
End;
If (L-h[1]=5) Or (L-h[2]=5) Or (L-h[3]=5) Or ((L-h[1]=6) And (Abs(h[2]-h[3])=4))
Or ((L-h[2]=6) And (Abs(h[1]-h[3])=4))
Or ((L-h[3]=6) And (Abs(h[1]-h[2])=4)) Then
begin
for i:=1 to 3 do
if h[i]>5 then
m:=i;
N:=L-10;
break;
End;
If (L-h[1]=9) And (Abs(h[2]-h[3])=1) Then
begin
M:=1;
N:=L-10;
break;
End;
for i:=1 to 3 do
if L-h[i]=12-2*i then
m:=i;
n:=L-12;
break;
end;
If L<=1 Then
begin
If L=0 Then //you lose
Case trunc(int(random*4))+1 of
1: Application.MessageBox('你输了', '隐藏游戏', mb_OK);
2: Application.MessageBox('笨蛋!', '隐藏游戏', mb_OK);
3: Application.MessageBox('弱智!', '隐藏游戏', mb_OK);
4: Application.MessageBox('白痴!', '隐藏游戏', mb_OK);
end
Else //you win
Case trunc(Int(random*4))+1 of
1: Application.MessageBox('你赢了', '隐藏游戏', mb_OK);
2: Application.MessageBox('厉害!', '隐藏游戏', mb_OK);
3: Application.MessageBox('了不得', '隐藏游戏', mb_OK);
4: Application.MessageBox('我要砍了你!', '隐藏游戏', mb_OK);
End;
comthink:=0;
Exit;
End
Else
begin
Timer1.Interval:=1000;
Timer1.Enabled:=true;
end;
end;
procedure Tf_help_about_game.menu_yx_exitClick(Sender: TObject);
begin
close;
end;
procedure Tf_help_about_game.menu_yx_hsClick(Sender: TObject);
begin
spClick(Sender);
end;
procedure Tf_help_about_game.RHGChange(Sender: TObject);
var rhg : string;
begin
if clickflag=1 then exit;
(Sender as TEdit).SetFocus;
(Sender as TEdit).SelStart:=0;
(Sender as TEdit).SelLength:=Length((Sender as TEdit).Text);
for i:=1 to 3 do
for k:= hm[i]-h[i]+firstdog[i] to lastdog[i] do
begin
imagedog[k].picture:=imagepic.Picture;
imageflag[k]:=1;
end;
m:=0; n:=0;
rhg:='0'+RH.text;
if (Length(rhg)=2) and (rhg>'00') and (rhg<'04') then
m:=strtoint(rhg);
rhg:='0'+RG.text;
if (Length(rhg)=2) and (rhg>'00') and (rhg<'08') then
n:=strtoint(rhg);
If (m<1) Or (m>3) Then Exit;
If h[m]=0 Then Exit;
If (n<1) Or (n>h[m]) Then Exit;
drawdogf;
end;
procedure Tf_help_about_game.RHKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key=40) or (key=13) then
rg.SetFocus;
end;
procedure Tf_help_about_game.RGKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key=38) or (key=40) then
rh.SetFocus;
if key=13 then
spClick(Sender);
end;
procedure Tf_help_about_game.menu_yx_xyx_dnClick(Sender: TObject);
begin
if comthink=1 then
begin
Timer1.Enabled:=False;
Timer2.Enabled:=False;
end;
FormShow(nil);
pc_man:=0;
spClick(Sender);
end;
procedure Tf_help_about_game.menu_yx_xyx_rnClick(Sender: TObject);
begin
if comthink=1 then
begin
Timer1.Enabled:=False;
Timer2.Enabled:=False;
end;
FormShow(nil);
pc_man:=1;
RH.SetFocus;
RH.SelStart:=0;
RH.SelLength:=Length(RH.Text);
end;
procedure Tf_help_about_game.menu_help_aboutClick(Sender: TObject);
begin
if comthink=1 then
begin
// Timer1.Enabled:=False;
// Timer2.Enabled:=False;
end;
f_help_about_game.Enabled:=False;
f_help_about_game_about.Show;
end;
procedure Tf_help_about_game.FormShow(Sender: TObject);
begin
//按钮初始化
sp.enabled:=True;
menu_yx_hs.Enabled:=true;
//棋子的个数和原始状态
hm[1]:=3; hm[2]:=5; hm[3]:=7;
h[1]:=hm[1]; h[2]:=hm[2]; h[3]:=hm[3];
firstdog[1]:=1; lastdog[1]:=3;
firstdog[2]:=4; lastdog[2]:=8;
firstdog[3]:=9; lastdog[3]:=15;
//参数初始化
m:=0; n:=0; pc_man:=1;
comthink:=0;
clickflag:=0;
rh.Text:=''; rg.Text:='';
dh.Caption:=''; dg.Caption:='';
a[1]:=1; b[1]:=2; c[1]:=3;
a[2]:=1; b[2]:=3; c[2]:=2;
a[3]:=2; b[3]:=1; c[3]:=3;
a[4]:=2; b[4]:=3; c[4]:=1;
a[5]:=3; b[5]:=1; c[5]:=2;
a[6]:=3; b[6]:=2; c[6]:=1;
a[7]:=1; b[7]:=4; c[7]:=5;
a[8]:=1; b[8]:=5; c[8]:=4;
a[9]:=2; b[9]:=4; c[9]:=6;
a[10]:=2; b[10]:=5; c[10]:=7;
a[11]:=3; b[11]:=4; c[11]:=7;
a[12]:=3; b[12]:=5; c[12]:=6;
imagedog[1]:=image1; imagedog[2]:=image2; imagedog[3]:=image3;
imagedog[4]:=image4; imagedog[5]:=image5; imagedog[6]:=image6;
imagedog[7]:=image7; imagedog[8]:=image8; imagedog[9]:=image9;
imagedog[10]:=image10; imagedog[11]:=image11; imagedog[12]:=image12;
imagedog[13]:=image13; imagedog[14]:=image14; imagedog[15]:=image15;
imagedog[16]:=imagenone;
//图片初始化
for i:=1 to 15 do
begin
imagedog[i].picture:=imagepic.picture;
imageflag[i]:=1;
end;
end;
procedure Tf_help_about_game.ImagedogClick(Sender: TObject);
var index : integer;
begin
if comthink=1 then exit;
clickflag:=1;
index:=StrToInt((Sender as TImage).Hint);
if imageflag[index]<>0 then
begin
for i:=1 to 3 do
if (index>=firstdog[i]) and (index<=lastdog[i]) then
m:=i;
n:=index-(hm[m]-h[m]+firstdog[m])+1;
RH.Text:=IntToStr(m);
RG.Text:=IntToStr(n);
drawdogf;
end;
clickflag:=0;
end;
procedure Tf_help_about_game.ImagedogMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var index : integer;
begin
if (comthink=1) or (Button<>mbRight) then exit;
index:=StrToInt((Sender as TImage).Hint);
if imageflag[index]=2 then
spClick(Sender);
end;
procedure Tf_help_about_game.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:=false;
DH.Caption:=inttostr(m);
DG.Caption:=inttostr(n);
drawdogf;
Timer2.Interval:=500;
Timer2.Enabled:=true;
end;
procedure Tf_help_about_game.Timer2Timer(Sender: TObject);
begin
Timer2.Enabled:=false;
SP.Enabled:=True;
menu_yx_hs.Enabled:=true;
clickflag:=1;
RH.Text:='';
RG.Text:='';
if f_help_about_game.Enabled=false then
begin
f_help_about_game.Enabled:=true;
RH.SetFocus;
f_help_about_game.Enabled:=false;
f_help_about_game_about.Show;
end
else
RH.SetFocus;
RH.SelStart:=0;
RH.SelLength:=Length(RH.Text);
clickflag:=0;
drawdog;
comthink:=0;
end;
procedure Tf_help_about_game.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
if comthink=1 then
begin
Timer1.Enabled:=False;
Timer2.Enabled:=False;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -