📄 xqdatat.pas
字号:
end;
if (iMode = 1) then mem.Lines.Add('网上棋牌乐(www.qipaile.net)');
end;
// 判断棋子是否可以位于当前的位置
function isQiziCanAtXY(Idx, XYx, XYy: dTInt32): dTBoolean;
var
XY: dTInt32;
begin
isQiziCanAtXY := True;
XY := XYx*10 + XYy;
case Idx of
1, 9, 2, 8, 10, 11, 17, 25, 18, 24, 26, 27: // 车、马、炮
begin
Exit;
end;
12..16: // 红兵
begin
if (XYy > 4) then Exit;
if (XY in [03,04, 23, 24, 43, 44, 63, 64, 83, 84]) then Exit;
end;
28..32: // 黑卒
begin
if (XYy < 5) then Exit;
if (XY in [05,06, 25, 26, 45, 46, 65, 66, 85, 86]) then Exit;
end;
3, 7: // 红相
begin
if (XY in [02, 20, 24, 42, 60, 64, 82]) then Exit;
end;
19, 23: // 黑象
begin
if (XY in [07, 25, 29, 47, 65, 69, 87]) then Exit;
end;
4, 6: //红士
begin
if (XY in [30, 32, 41, 50, 52]) then Exit;
end;
20, 22: //黑士
begin
if (XY in [37, 39, 48, 57, 59]) then Exit;
end;
5: // 红帅
begin
if (XY in [30,31,32,40,41,42,50,51,52]) then Exit;
end;
21: // 黑将
begin
if (XY in [37,38,39,47,48,49,57,58,59]) then Exit;
end;
end;
isQiziCanAtXY := False;
end;
// 将盘面归一化,避免查找失败
procedure dMakeStandardQzXY(var qzXY: dTXQZXY);
begin
Exit;
end;
// 判断局面是否相同
var
iSearchXYPieceNum: array [1..14] of Integer;
procedure dSetSearchQzXYParam(qzXY: dTXQZXY);
var
i: Integer;
begin
for i:=1 to 14 do iSearchXYPieceNum[i] := 0;
if (qzXY[ 1] <= 89) then Inc(iSearchXYPieceNum[ 1]);
if (qzXY[ 9] <= 89) then Inc(iSearchXYPieceNum[ 1]);
if (qzXY[ 2] <= 89) then Inc(iSearchXYPieceNum[ 2]);
if (qzXY[ 8] <= 89) then Inc(iSearchXYPieceNum[ 2]);
if (qzXY[ 3] <= 89) then Inc(iSearchXYPieceNum[ 3]);
if (qzXY[ 7] <= 89) then Inc(iSearchXYPieceNum[ 3]);
if (qzXY[ 4] <= 89) then Inc(iSearchXYPieceNum[ 4]);
if (qzXY[ 6] <= 89) then Inc(iSearchXYPieceNum[ 4]);
if (qzXY[ 5] <= 89) then Inc(iSearchXYPieceNum[ 5]);
if (qzXY[10] <= 89) then Inc(iSearchXYPieceNum[ 6]);
if (qzXY[11] <= 89) then Inc(iSearchXYPieceNum[ 6]);
if (qzXY[12] <= 89) then Inc(iSearchXYPieceNum[ 7]);
if (qzXY[13] <= 89) then Inc(iSearchXYPieceNum[ 7]);
if (qzXY[14] <= 89) then Inc(iSearchXYPieceNum[ 7]);
if (qzXY[15] <= 89) then Inc(iSearchXYPieceNum[ 7]);
if (qzXY[16] <= 89) then Inc(iSearchXYPieceNum[ 7]);
if (qzXY[17] <= 89) then Inc(iSearchXYPieceNum[ 8]);
if (qzXY[25] <= 89) then Inc(iSearchXYPieceNum[ 8]);
if (qzXY[18] <= 89) then Inc(iSearchXYPieceNum[ 9]);
if (qzXY[24] <= 89) then Inc(iSearchXYPieceNum[ 9]);
if (qzXY[19] <= 89) then Inc(iSearchXYPieceNum[10]);
if (qzXY[23] <= 89) then Inc(iSearchXYPieceNum[10]);
if (qzXY[20] <= 89) then Inc(iSearchXYPieceNum[11]);
if (qzXY[22] <= 89) then Inc(iSearchXYPieceNum[11]);
if (qzXY[21] <= 89) then Inc(iSearchXYPieceNum[12]);
if (qzXY[26] <= 89) then Inc(iSearchXYPieceNum[13]);
if (qzXY[27] <= 89) then Inc(iSearchXYPieceNum[13]);
if (qzXY[28] <= 89) then Inc(iSearchXYPieceNum[14]);
if (qzXY[29] <= 89) then Inc(iSearchXYPieceNum[14]);
if (qzXY[30] <= 89) then Inc(iSearchXYPieceNum[14]);
if (qzXY[31] <= 89) then Inc(iSearchXYPieceNum[14]);
if (qzXY[32] <= 89) then Inc(iSearchXYPieceNum[14]);
end;
function IsQzXYSame(var qzXY1, qzXY2: dTXQZXY; bQzNumOnly, bIgnoreYz: Boolean): Boolean;
var
i, AQzNum1, AQzNum2: Integer;
iPn: array [1..14] of Integer;
begin
Result := False;
if bQzNumOnly then
begin
for i:=1 to 14 do iPn[i] := 0;
if (qzXY2[ 1] <= 89) then Inc(iPn[ 1]);
if (qzXY2[ 9] <= 89) then Inc(iPn[ 1]);
if (qzXY2[ 2] <= 89) then Inc(iPn[ 2]);
if (qzXY2[ 8] <= 89) then Inc(iPn[ 2]);
if (qzXY2[ 3] <= 89) then Inc(iPn[ 3]);
if (qzXY2[ 7] <= 89) then Inc(iPn[ 3]);
if (qzXY2[ 4] <= 89) then Inc(iPn[ 4]);
if (qzXY2[ 6] <= 89) then Inc(iPn[ 4]);
if (qzXY2[ 5] <= 89) then Inc(iPn[ 5]);
if (qzXY2[10] <= 89) then Inc(iPn[ 6]);
if (qzXY2[11] <= 89) then Inc(iPn[ 6]);
if (qzXY2[12] <= 89) then Inc(iPn[ 7]);
if (qzXY2[13] <= 89) then Inc(iPn[ 7]);
if (qzXY2[14] <= 89) then Inc(iPn[ 7]);
if (qzXY2[15] <= 89) then Inc(iPn[ 7]);
if (qzXY2[16] <= 89) then Inc(iPn[ 7]);
if (qzXY2[17] <= 89) then Inc(iPn[ 8]);
if (qzXY2[25] <= 89) then Inc(iPn[ 8]);
if (qzXY2[18] <= 89) then Inc(iPn[ 9]);
if (qzXY2[24] <= 89) then Inc(iPn[ 9]);
if (qzXY2[19] <= 89) then Inc(iPn[10]);
if (qzXY2[23] <= 89) then Inc(iPn[10]);
if (qzXY2[20] <= 89) then Inc(iPn[11]);
if (qzXY2[22] <= 89) then Inc(iPn[11]);
if (qzXY2[21] <= 89) then Inc(iPn[12]);
if (qzXY2[26] <= 89) then Inc(iPn[13]);
if (qzXY2[27] <= 89) then Inc(iPn[13]);
if (qzXY2[28] <= 89) then Inc(iPn[14]);
if (qzXY2[29] <= 89) then Inc(iPn[14]);
if (qzXY2[30] <= 89) then Inc(iPn[14]);
if (qzXY2[31] <= 89) then Inc(iPn[14]);
if (qzXY2[32] <= 89) then Inc(iPn[14]);
if bIgnoreYz then
begin
for i:=1 to 14 do if iPn[i] < iSearchXYPieceNum[i] then Exit;
Result := True;
end
else
begin
for i:=1 to 14 do if iPn[i] <> iSearchXYPieceNum[i] then Exit;
Result := True;
end;
Exit;
end;
if (bIgnoreYz) then
begin
if (qzXY1[ 1] <= 89) then
if (qzXY1[ 1]<>qzXY2[ 1])and(qzXY1[ 1]<>qzXY2[ 9]) then Exit; // 车1
if (qzXY1[ 9] <= 89) then
if (qzXY1[ 9]<>qzXY2[ 1])and(qzXY1[ 9]<>qzXY2[ 9]) then Exit; // 车2
if (qzXY1[ 2] <= 89) then
if (qzXY1[ 2]<>qzXY2[ 2])and(qzXY1[ 2]<>qzXY2[ 8]) then Exit; // 马1
if (qzXY1[ 8] <= 89) then
if (qzXY1[ 8]<>qzXY2[ 2])and(qzXY1[ 8]<>qzXY2[ 8]) then Exit; // 马2
if (qzXY1[ 3] <= 89) then
if (qzXY1[ 3]<>qzXY2[ 3])and(qzXY1[ 3]<>qzXY2[ 7]) then Exit; // 相1
if (qzXY1[ 7] <= 89) then
if (qzXY1[ 7]<>qzXY2[ 3])and(qzXY1[ 7]<>qzXY2[ 7]) then Exit; // 相2
if (qzXY1[ 4] <= 89) then
if (qzXY1[ 4]<>qzXY2[ 4])and(qzXY1[ 4]<>qzXY2[ 6]) then Exit; // 士1
if (qzXY1[ 6] <= 89) then
if (qzXY1[ 6]<>qzXY2[ 4])and(qzXY1[ 6]<>qzXY2[ 6]) then Exit; // 士2
if (qzXY1[ 5] <= 89) then
if (qzXY1[ 5]<>qzXY2[ 5])and(qzXY1[ 5]<>qzXY2[ 5]) then Exit; // 帅
if (qzXY1[10] <= 89) then
if (qzXY1[10]<>qzXY2[10])and(qzXY1[10]<>qzXY2[11]) then Exit; // 炮1
if (qzXY1[11] <= 89) then
if (qzXY1[11]<>qzXY2[10])and(qzXY1[11]<>qzXY2[11]) then Exit; // 炮2
if (qzXY1[12] <= 89) then
if (qzXY1[12]<>qzXY2[12])and(qzXY1[12]<>qzXY2[13]) and // 兵1
(qzXY1[12]<>qzXY2[14])and(qzXY1[12]<>qzXY2[15]) and
(qzXY1[12]<>qzXY2[16])then Exit;
if (qzXY1[13] <= 89) then
if (qzXY1[13]<>qzXY2[12])and(qzXY1[13]<>qzXY2[13]) and // 兵2
(qzXY1[13]<>qzXY2[14])and(qzXY1[13]<>qzXY2[15]) and
(qzXY1[13]<>qzXY2[16])then Exit;
if (qzXY1[14] <= 89) then
if (qzXY1[14]<>qzXY2[12])and(qzXY1[14]<>qzXY2[13]) and // 兵3
(qzXY1[14]<>qzXY2[14])and(qzXY1[14]<>qzXY2[15]) and
(qzXY1[14]<>qzXY2[16])then Exit;
if (qzXY1[15] <= 89) then
if (qzXY1[15]<>qzXY2[12])and(qzXY1[15]<>qzXY2[13]) and // 兵4
(qzXY1[15]<>qzXY2[14])and(qzXY1[15]<>qzXY2[15]) and
(qzXY1[15]<>qzXY2[16])then Exit;
if (qzXY1[16] <= 89) then
if (qzXY1[16]<>qzXY2[12])and(qzXY1[16]<>qzXY2[13]) and // 兵5
(qzXY1[16]<>qzXY2[14])and(qzXY1[16]<>qzXY2[15]) and
(qzXY1[16]<>qzXY2[16])then Exit;
// 黑棋子的位置
if (qzXY1[17] <= 89) then
if (qzXY1[17]<>qzXY2[17])and(qzXY1[17]<>qzXY2[25]) then Exit; // 车1
if (qzXY1[25] <= 89) then
if (qzXY1[25]<>qzXY2[17])and(qzXY1[25]<>qzXY2[25]) then Exit; // 车2
if (qzXY1[18] <= 89) then
if (qzXY1[18]<>qzXY2[18])and(qzXY1[18]<>qzXY2[24]) then Exit; // 马1
if (qzXY1[24] <= 89) then
if (qzXY1[24]<>qzXY2[18])and(qzXY1[24]<>qzXY2[24]) then Exit; // 马2
if (qzXY1[19] <= 89) then
if (qzXY1[19]<>qzXY2[19])and(qzXY1[19]<>qzXY2[23]) then Exit; // 象1
if (qzXY1[23] <= 89) then
if (qzXY1[23]<>qzXY2[19])and(qzXY1[23]<>qzXY2[23]) then Exit; // 象2
if (qzXY1[20] <= 89) then
if (qzXY1[20]<>qzXY2[20])and(qzXY1[20]<>qzXY2[22]) then Exit; // 士1
if (qzXY1[22] <= 89) then
if (qzXY1[22]<>qzXY2[20])and(qzXY1[22]<>qzXY2[22]) then Exit; // 士2
if (qzXY1[21] <= 89) then
if (qzXY1[21]<>qzXY2[21])and(qzXY1[21]<>qzXY2[21]) then Exit; // 将
if (qzXY1[26] <= 89) then
if (qzXY1[26]<>qzXY2[26])and(qzXY1[26]<>qzXY2[27]) then Exit; // 炮1
if (qzXY1[27] <= 89) then
if (qzXY1[27]<>qzXY2[26])and(qzXY1[27]<>qzXY2[27]) then Exit; // 炮2
if (qzXY1[28] <= 89) then
if (qzXY1[28]<>qzXY2[28])and(qzXY1[28]<>qzXY2[29]) and // 卒1
(qzXY1[28]<>qzXY2[30])and(qzXY1[28]<>qzXY2[31]) and
(qzXY1[28]<>qzXY2[32])then Exit;
if (qzXY1[29] <= 89) then
if (qzXY1[29]<>qzXY2[28])and(qzXY1[29]<>qzXY2[29]) and // 卒2
(qzXY1[29]<>qzXY2[30])and(qzXY1[29]<>qzXY2[31]) and
(qzXY1[29]<>qzXY2[32])then Exit;
if (qzXY1[20] <= 89) then
if (qzXY1[30]<>qzXY2[28])and(qzXY1[30]<>qzXY2[29]) and // 卒3
(qzXY1[30]<>qzXY2[30])and(qzXY1[30]<>qzXY2[31]) and
(qzXY1[30]<>qzXY2[32])then Exit;
if (qzXY1[31] <= 89) then
if (qzXY1[31]<>qzXY2[28])and(qzXY1[31]<>qzXY2[29]) and // 卒4
(qzXY1[31]<>qzXY2[30])and(qzXY1[31]<>qzXY2[31]) and
(qzXY1[31]<>qzXY2[32])then Exit;
if (qzXY1[21] <= 89) then
if (qzXY1[32]<>qzXY2[28])and(qzXY1[32]<>qzXY2[29]) and // 卒5
(qzXY1[32]<>qzXY2[30])and(qzXY1[32]<>qzXY2[31]) and
(qzXY1[32]<>qzXY2[32])then Exit;
Result := True;
Exit;
end;
// 红棋子的位置
if (qzXY1[ 1]<>qzXY2[ 1])and(qzXY1[ 1]<>qzXY2[ 9]) then Exit; // 车1
if (qzXY1[ 9]<>qzXY2[ 1])and(qzXY1[ 9]<>qzXY2[ 9]) then Exit; // 车2
if (qzXY1[ 2]<>qzXY2[ 2])and(qzXY1[ 2]<>qzXY2[ 8]) then Exit; // 马1
if (qzXY1[ 8]<>qzXY2[ 2])and(qzXY1[ 8]<>qzXY2[ 8]) then Exit; // 马2
if (qzXY1[ 3]<>qzXY2[ 3])and(qzXY1[ 3]<>qzXY2[ 7]) then Exit; // 相1
if (qzXY1[ 7]<>qzXY2[ 3])and(qzXY1[ 7]<>qzXY2[ 7]) then Exit; // 相2
if (qzXY1[ 4]<>qzXY2[ 4])and(qzXY1[ 4]<>qzXY2[ 6]) then Exit; // 士1
if (qzXY1[ 6]<>qzXY2[ 4])and(qzXY1[ 6]<>qzXY2[ 6]) then Exit; // 士2
if (qzXY1[ 5]<>qzXY2[ 5])and(qzXY1[ 5]<>qzXY2[ 5]) then Exit; // 帅
if (qzXY1[10]<>qzXY2[10])and(qzXY1[10]<>qzXY2[11]) then Exit; // 炮1
if (qzXY1[11]<>qzXY2[10])and(qzXY1[11]<>qzXY2[11]) then Exit; // 炮2
if (qzXY1[12]<>qzXY2[12])and(qzXY1[12]<>qzXY2[13]) and // 兵1
(qzXY1[12]<>qzXY2[14])and(qzXY1[12]<>qzXY2[15]) and
(qzXY1[12]<>qzXY2[16])then Exit;
if (qzXY1[13]<>qzXY2[12])and(qzXY1[13]<>qzXY2[13]) and // 兵2
(qzXY1[13]<>qzXY2[14])and(qzXY1[13]<>qzXY2[15]) and
(qzXY1[13]<>qzXY2[16])then Exit;
if (qzXY1[14]<>qzXY2[12])and(qzXY1[14]<>qzXY2[13]) and // 兵3
(qzXY1[14]<>qzXY2[14])and(qzXY1[14]<>qzXY2[15]) and
(qzXY1[14]<>qzXY2[16])then Exit;
if (qzXY1[15]<>qzXY2[12])and(qzXY1[15]<>qzXY2[13]) and // 兵4
(qzXY1[15]<>qzXY2[14])and(qzXY1[15]<>qzXY2[15]) and
(qzXY1[15]<>qzXY2[16])then Exit;
if (qzXY1[16]<>qzXY2[12])and(qzXY1[16]<>qzXY2[13]) and // 兵5
(qzXY1[16]<>qzXY2[14])and(qzXY1[16]<>qzXY2[15]) and
(qzXY1[16]<>qzXY2[16])then Exit;
// 黑棋子的位置
if (qzXY1[17]<>qzXY2[17])and(qzXY1[17]<>qzXY2[25]) then Exit; // 车1
if (qzXY1[25]<>qzXY2[17])and(qzXY1[25]<>qzXY2[25]) then Exit; // 车2
if (qzXY1[18]<>qzXY2[18])and(qzXY1[18]<>qzXY2[24]) then Exit; // 马1
if (qzXY1[24]<>qzXY2[18])and(qzXY1[24]<>qzXY2[24]) then Exit; // 马2
if (qzXY1[19]<>qzXY2[19])and(qzXY1[19]<>qzXY2[23]) then Exit; // 象1
if (qzXY1[23]<>qzXY2[19])and(qzXY1[23]<>qzXY2[23]) then Exit; // 象2
if (qzXY1[20]<>qzXY2[20])and(qzXY1[20]<>qzXY2[22]) then Exit; // 士1
if (qzXY1[22]<>qzXY2[20])and(qzXY1[22]<>qzXY2[22]) then Exit; // 士2
if (qzXY1[21]<>qzXY2[21])and(qzXY1[21]<>qzXY2[21]) then Exit; // 将
if (qzXY1[26]<>qzXY2[26])and(qzXY1[26]<>qzXY2[27]) then Exit; // 炮1
if (qzXY1[27]<>qzXY2[26])and(qzXY1[27]<>qzXY2[27]) then Exit; // 炮2
if (qzXY1[28]<>qzXY2[28])and(qzXY1[28]<>qzXY2[29]) and // 卒1
(qzXY1[28]<>qzXY2[30])and(qzXY1[28]<>qzXY2[31]) and
(qzXY1[28]<>qzXY2[32])then Exit;
if (qzXY1[29]<>qzXY2[28])and(qzXY1[29]<>qzXY2[29]) and // 卒2
(qzXY1[29]<>qzXY2[30])and(qzXY1[29]<>qzXY2[31]) and
(qzXY1[29]<>qzXY2[32])then Exit;
if (qzXY1[30]<>qzXY2[28])and(qzXY1[30]<>qzXY2[29]) and // 卒3
(qzXY1[30]<>qzXY2[30])and(qzXY1[30]<>qzXY2[31]) and
(qzXY1[30]<>qzXY2[32])then Exit;
if (qzXY1[31]<>qzXY2[28])and(qzXY1[31]<>qzXY2[29]) and // 卒4
(qzXY1[31]<>qzXY2[30])and(qzXY1[31]<>qzXY2[31]) and
(qzXY1[31]<>qzXY2[32])then Exit;
if (qzXY1[32]<>qzXY2[28])and(qzXY1[32]<>qzXY2[29]) and // 卒5
(qzXY1[32]<>qzXY2[30])and(qzXY1[32]<>qzXY2[31]) and
(qzXY1[32]<>qzXY2[32])then Exit;
// 统计死子的个数
AQzNum1 := 0; for i:=1 to 32 do if (qzXY1[i] = $FF) then Inc(AQzNum1);
AQzNum2 := 0; for i:=1 to 32 do if (qzXY2[i] = $FF) then Inc(AQzNum2);
if (AQzNum1 <> AQzNum2) then Exit;
Result := True;
end;
function isClipBoardTextQipu: Boolean;
begin
Result := False;
if (not Clipboard.HasFormat(CF_TEXT)) then Exit;
try
if (Length(ClipBoard.AsText) < 128) then Exit;
if (Length(ClipBoard.AsText) > 20480) then Exit;
except
Exit;
end;
Result := True;
end;
function sGetCmdLineXqfName: String;
var
s : string;
sCmdLine: String;
iPos : Integer;
begin
Result := '';
s := ParamStr(1);
if (s<>'') then
begin
if FileExists(s) then
begin
Result := s;
Exit;
end
else
begin
sCmdLine := UpperCase(CmdLine);
iPos := Pos('.EXE', sCmdLine);
if (iPos > 0) then
begin
s := Trim(Copy(sCmdLine, iPos + 4, 512));
s := StringReplace(s, '"', '', [rfReplaceAll]);
if FileExists(s) then
begin
Result := s;
Exit;
end;
end;
end;
Exit;
end
end;
end.
//-------------------------------------------------------------------------
//
// 17-18-19-20-21-22-23-24-25
// | | | | \|/ | | | |
// |--+--+--+--+--+--+--+--|
// | | | | /|\ | | | |
// |-26--+--+--+--+--+-27--|
// | | | | | | | | |
// 28--+-29--+-30--+-31--+-32
// | | | | | | | | |
// |-----------------------|
// | |
// |-----------------------|
// | | | | | | | | |
// 16--+-15--+-14--+-13--+-12
// | | | | | | | | |
// |-11--+--+--+--+--+-10--|
// | | | | \|/ | | | |
// |--+--+--+--+--+--+--+--|
// | | | | /|\ | | | |
// 09-08-07-06-05-04-03-02-01
//
//-------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -