📄 game.pas
字号:
{
模块名称:隐藏游戏
使用方法:1、Show
返回值: 无
}
unit Game;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Menus, ExtCtrls, Buttons;
type
TFormGame = class(TForm)
MainMenu: TMainMenu;
ItemGame: TMenuItem;
ItemNewGame: TMenuItem;
ItemPCFirst: TMenuItem;
ItemManFirst: TMenuItem;
ItemChange: TMenuItem;
fg3: TMenuItem;
ItemExit: TMenuItem;
ItemHelp: TMenuItem;
ItemHelpReadme: TMenuItem;
ItemReadme1: TMenuItem;
ItemReadme2: TMenuItem;
ItemReadme3: TMenuItem;
ItemReadme4: TMenuItem;
ItemReadme5: TMenuItem;
ItemReadme6: TMenuItem;
ItemReadme7: TMenuItem;
fg4: TMenuItem;
ItemAbout: TMenuItem;
Item_fg: TBevel;
Image1: TImage;
Image2: 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;
ImageSelected: TImage;
ImageNone: TImage;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
LabelPCLine: TLabel;
LabelPCNumber: TLabel;
EditManLine: TEdit;
EditManNumber: TEdit;
BtnChange: TButton;
Timer1: TTimer;
Timer2: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ItemPCFirstClick(Sender: TObject);
procedure ItemManFirstClick(Sender: TObject);
procedure BtnChangeClick(Sender: TObject);
procedure ItemExitClick(Sender: TObject);
procedure ItemAboutClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure EditManLineKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure EditManNumberKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure OnEditManChange(Sender: TObject);
procedure OnImageDogsClick(Sender: TObject);
procedure OnImageDogsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure DrawDogs;
procedure DrawDogsSelected;
private
{ Private declarations }
FImageDogs : array [1 .. 15] of TImage; //图片数组
FnCurrentNumber, FnInitNumber : array [1 .. 3] of integer; //棋子的个数和原始状态
FnFirstNumber, FnLastNumber : array[1 .. 3] of integer; //每行棋子的开始、结束数目
FnLineNumber, FnNumber, FnCountNumber : integer; //所拿旗子的行数、个数、总和
FboolPC : boolean; //人或电脑先走
FboolPCThink : boolean; //电脑考虑标志
FboolClickFlag : boolean; //单击判断
FnLoseModal : array [1 .. 3, 1 .. 12] of integer; //输棋的形式
FnImageFlag : array [1 .. 15] of integer; //棋子状态 0:无 1:有 2:删除
public
{ Public declarations }
end;
var
FormGame : TFormGame;
implementation
uses
GameAbout,
Global;
{$R *.DFM}
procedure TFormGame.FormCreate(Sender: TObject);
begin
//多语言文字
Self.Font.Charset := GetCharset;
Self.Caption := GetWord('隐藏游戏');
ItemGame.Caption := GetWord('游戏') + '(&G)';
ItemNewGame.Caption := GetWord('新游戏') + '(&N)';
ItemPCFirst.Caption := GetWord('电脑先走') + '(&D)';
ItemManFirst.Caption := GetWord('人脑先走') + '(&R)';
ItemChange.Caption := GetWord('换手') + '(&S)';
ItemExit.Caption := GetWord('退出') + '(&X)';
ItemHelp.Caption := GetWord('帮助') + '(&H)';
ItemHelpReadme.Caption := GetWord('游戏说明');
ItemReadme1.Caption := GetWord('游戏说明');
ItemReadme2.Caption := GetWord(' 共三行棋子,双方轮流拿子,拿最后一子的一方为输。');
ItemReadme3.Caption := GetWord('游戏规则');
ItemReadme4.Caption := GetWord(' 每次只能在某一行中拿棋子,个数不限。');
ItemReadme5.Caption := GetWord('操作方法');
ItemReadme6.Caption := GetWord(' 1、在框中直接输入行数和个数,然后换手。');
ItemReadme7.Caption := GetWord(' 2、使用左键单击棋子,然后右键单击选中棋子。');
ItemAbout.Caption := GetWord('关于 隐藏游戏') + '(&A)';
Label1.Caption := GetWord('人脑');
Label2.Caption := GetWord('第');
Label3.Caption := GetWord('拿');
Label4.Caption := GetWord('行');
Label5.Caption := GetWord('个');
Label6.Caption := GetWord('电脑');
Label9.Caption := GetWord('第');
Label10.Caption := GetWord('拿');
Label7.Caption := GetWord('行');
Label8.Caption := GetWord('个');
BtnChange.Caption := GetWord('换手') + '(&S)';
end;
procedure TFormGame.FormShow(Sender: TObject);
var
i : integer;
begin
//初始化图片数组
for i := 1 to 15 do
FImageDogs[i] := (FindComponent('Image' + IntToStr(i)) as TImage);
//初始化"换手"按钮和菜单
BtnChange.Enabled := True;
ItemChange.Enabled := True;
//棋子的个数和原始状态
FnInitNumber[1] := 3;
FnInitNumber[2] := 5;
FnInitNumber[3] := 7;
FnCurrentNumber[1] := FnInitNumber[1];
FnCurrentNumber[2] := FnInitNumber[2];
FnCurrentNumber[3] := FnInitNumber[3];
FnFirstNumber[1] := 1;
FnFirstNumber[2] := 4;
FnFirstNumber[3] := 9;
FnLastNumber[1] := 3;
FnLastNumber[2] := 8;
FnLastNumber[3] := 15;
//参数初始化
FnLineNumber := 0;
FnNumber := 0;
FboolPC := False;
FboolPCThink := False;
FboolClickFlag := False;
EditManLine.Text := '';
EditManNumber.Text := '';
LabelPCLine.Caption := '';
LabelPCNumber.Caption := '';
FnLoseModal[1, 1] := 1; FnLoseModal[2, 1] := 2; FnLoseModal[3, 1] := 3;
FnLoseModal[1, 2] := 1; FnLoseModal[2, 2] := 3; FnLoseModal[3, 2] := 2;
FnLoseModal[1, 3] := 2; FnLoseModal[2, 3] := 1; FnLoseModal[3, 3] := 3;
FnLoseModal[1, 4] := 2; FnLoseModal[2, 4] := 3; FnLoseModal[3, 4] := 1;
FnLoseModal[1, 5] := 3; FnLoseModal[2, 5] := 1; FnLoseModal[3, 5] := 2;
FnLoseModal[1, 6] := 3; FnLoseModal[2, 6] := 2; FnLoseModal[3, 6] := 1;
FnLoseModal[1, 7] := 1; FnLoseModal[2, 7] := 4; FnLoseModal[3, 7] := 5;
FnLoseModal[1, 8] := 1; FnLoseModal[2, 8] := 5; FnLoseModal[3, 8] := 4;
FnLoseModal[1, 9] := 2; FnLoseModal[2, 9] := 4; FnLoseModal[3, 9] := 6;
FnLoseModal[1, 10] := 2; FnLoseModal[2, 10] := 5; FnLoseModal[3, 10] := 7;
FnLoseModal[1, 11] := 3; FnLoseModal[2, 11] := 4; FnLoseModal[3, 11] := 7;
FnLoseModal[1, 12] := 3; FnLoseModal[2, 12] := 5; FnLoseModal[3, 12] := 6;
//初始化Image框
for i := 1 to 15 do
begin
with FImageDogs[i] do
begin
OnClick := OnImageDogsClick;
OnMouseDown := OnImageDogsMouseDown;
Picture := ImagePic.Picture;
end;
FnImageFlag[i] := 1;
end;
end;
procedure TFormGame.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if FboolPCThink then
begin
Timer1.Enabled := False;
Timer2.Enabled := False;
end;
end;
procedure TFormGame.ItemPCFirstClick(Sender: TObject);
begin
ItemNewGame.Enabled := False;
if FboolPCThink then
begin
Timer1.Enabled := False;
Timer2.Enabled := False;
end;
FormShow(Self);
FboolPC := True;
BtnChange.Click;
end;
procedure TFormGame.ItemManFirstClick(Sender: TObject);
begin
ItemNewGame.Enabled := False;
if FboolPCThink then
begin
Timer1.Enabled := False;
Timer2.Enabled := False;
end;
FormShow(Self);
FboolPC := False;
EditManLine.SetFocus;
EditManLine.SelectAll;
end;
procedure TFormGame.BtnChangeClick(Sender: TObject);
var
strManNumer : string;
i, j, k : integer;
begin
if not BtnChange.Enabled then Exit;
if FboolPC then
FboolPC := False
else
begin
FnLineNumber := 0;
FnNumber := 0;
strManNumer := '0' + EditManLine.Text;
if (Length(strManNumer) = 2) and (strManNumer > '00') and (strManNumer < '04') then
FnLineNumber := StrToInt(strManNumer);
strManNumer := '0' + EditManNumber.Text;
if (Length(strManNumer) = 2) and (strManNumer > '00') and (strManNumer < '08') then
FnNumber := StrToInt(strManNumer);
if (FnLineNumber < 1) or (FnLineNumber > 3) then
begin
with EditManLine do
begin
SetFocus;
SelectAll;
Exit;
end;
end;
if FnCurrentNumber[FnLineNumber] = 0 then
begin
with EditManLine do
begin
SetFocus;
SelectAll;
Exit;
end;
end;
if (FnNumber < 1) or (FnNumber > FnCurrentNumber[FnLineNumber]) then
begin
with EditManNumber do
begin
SetFocus;
SelectAll;
Exit;
end;
end;
DrawDogs;
end;
while True do
begin
FboolPCThink := True;
BtnChange.Enabled := False;
ItemChange.Enabled := False;
FnCountNumber := FnCurrentNumber[1] + FnCurrentNumber[2] + FnCurrentNumber[3];
FnLineNumber := 0;
FnNumber := 0;
if FnCountNumber = 15 then
begin
FnLineNumber := trunc(Int(Random * 3)) + 1;
FnNumber := 1;
Break;
end;
if FnCountNumber=0 then //Win
Break;
j := 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -