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

📄 xqdatat.pas

📁 象棋演播室1.6的dephi源码 作者 董世伟
💻 PAS
📖 第 1 页 / 共 4 页
字号:
  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 + -