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

📄 helpag.pas

📁 源代码竟供大家参考
💻 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 + -