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

📄 liuren.pas

📁 大六壬
💻 PAS
📖 第 1 页 / 共 2 页
字号:
         SAK[I].Zhun:=True;
         Inc(P);
        end
        else
          SAK[I].Zhun:=False;
      end;

      if P=1 then //只有一个仲神,察微课
      begin
        for I:=1 to 4 do//找出来定三传
        begin
          if SAK[I].Zhun then
          begin//定三传
            vSanChuan.ChuChuan.DiZhi:=SAK[I].Shen;
            ZhongMoChuan;//经典中、末传
            Exit;
          end;
        end;
      end
      else
      begin
        GanZhiFaYong;//干支发用,复等课
        ZhongMoChuan;//经典中、末传
        Exit;
      end;

    end;//if P=1 then  还好,只有一个老大
  end;//procedure

  procedure YaoKeDiSi;//遥克第四
  var
    GW:TWuXingShunXu;
    I:Integer;
    xk,xz:integer;//斜克、斜贼
  begin
    GW:=TianGanWuXing(vSiKe.RiKe1.XiaShen);
    xk:=0; xz:=0;
    for I:=2 to 4 do//整理关系
    begin
      SAK[I].GuanXi:=WuXingGuanXi(DiZhiWuXing(SAK[I].Shen),GW);
      if SAK[I].GuanXi=Ke then Inc(xk);
      if SAK[I].GuanXi=Zei then Inc(xz);
    end;

    if (xk=0) and (xz=0) then//没有遥克、贼
    begin
      Processed:=False;//昂星第五
      Exit;
    end;

    if xk>0 then
      KL:=Ke//有斜克,蒿矢课
    else
      KL:=Zei;//有斜贼,弹射课

    P:=0;
    for I:=2 to 4 do//准备发用
    begin
      SAK[I].Zhun:=(SAK[I].GuanXi=KL);
      if SAK[I].Zhun then Inc(P);
    end;

    for I:=2 to 4 do//确实发用
    begin
      if SAK[I].Zhun then
        if (TianGanYinYang(vSiKe.RiKe1.XiaShen)=DiZhiYinYang(SAK[I].Shen)) or (P=1) then
        begin
          vSanChuan.ChuChuan.DiZhi:=SAK[I].Shen;
          ZhongMoChuan;//经典中、末传
          Exit;
        end;
    end;//for
  end;//procedure

  procedure AngXingDiWu;//昂星第五
  var
    dzI:TDiZhiShunXu;
  begin
    if TianGanYinYang(SiKe.RiKe1.XiaShen)=yyYang then //阳日,虎视课
    begin
      vSanChuan.ChuChuan.DiZhi:=vTianPan.Items[dzYou];
      vSanChuan.ZhongChuan.DiZhi:=SAK[3].Shen;//辰上神
      vSanChuan.MoChuan.DiZhi:=SAK[1].Shen;//日上神
    end
    else//阴日,冬蛇掩目
    begin
      for dzI:=dzZi to dzHai do//天盘酉在哪里?
        if vTianPan.Items[dzI]=dzYou then Break;
      vSanChuan.ChuChuan.DiZhi:=vDiPan.Items[dzI];
      vSanChuan.ZhongChuan.DiZhi:=SAK[1].Shen;//日上神
      vSanChuan.MoChuan.DiZhi:=SAK[3].Shen;//辰上神
    end;
  end;//procedure

  procedure FuYinDiLiu;//伏吟第六
  var
    I:Integer;
  begin
    if (K>0) or (Z>0) then//有贼、克
    begin
      for I:=1 to 4 do if (SAK[I].GuanXi=Ke) or (SAK[I].GuanXi=Zei) then Break;//发用课
      vSanChuan.ChuChuan.DiZhi:=SAK[I].Shen;

      if ZhiXing[vSanChuan.ChuChuan.DiZhi]=vSanChuan.ChuChuan.DiZhi then//初传自刑
        vSanChuan.ZhongChuan.DiZhi:=SAK[3].Shen//支上神为中传
      else
        vSanChuan.ZhongChuan.DiZhi:=ZhiXing[vSanChuan.ChuChuan.DiZhi];//初传所型为中传
    end
    else//没有贼、克
    begin
      if TianGanYinYang(vSiKe.RiKe1.XiaShen)=yyYang then//阳日取干上神为初传
        vSanChuan.ChuChuan.DiZhi:=SAK[1].Shen
      else//阴日取支上神为初传
        vSanChuan.ChuChuan.DiZhi:=SAK[3].Shen;
      if ZhiXing[vSanChuan.ChuChuan.DiZhi]=vSanChuan.ChuChuan.DiZhi then//初传自刑
      begin
        if TianGanYinYang(SiKe.RiKe1.XiaShen)=yyYang then//阳日取支上神为中传
          vSanChuan.ZhongChuan.DiZhi:=SAK[3].Shen
        else//阴日取干上神为中传
          vSanChuan.ZhongChuan.DiZhi:=SAK[1].Shen;
      end
      else//初传所刑为中传
        vSanChuan.ZhongChuan.DiZhi:=ZhiXing[vSanChuan.ChuChuan.DiZhi];
    end;

    //取末传
    if ZhiXing[vSanChuan.ZhongChuan.DiZhi]=vSanChuan.ZhongChuan.DiZhi then//中传自刑,中传所冲为末传
    begin
      vDiPan.Finger:=vSanChuan.ZhongChuan.DiZhi;
      vDiPan.Step(6);
      vSanChuan.MoChuan.DiZhi:=vDiPan.Finger;
    end
    else
      vSanChuan.MoChuan.DiZhi:=ZhiXing[vSanChuan.ZhongChuan.DiZhi];//中传所型为末传
  end;//procedure

  procedure FanYinDiQi;//反吟第七
  begin
    vSanChuan.ChuChuan.DiZhi:=ZhiMa[SAK[3].Shen];//日支驿马为初传  无依格
    GanShangShenLiangChuan;//干上神两传
  end;

  procedure BieZeDiBa;//别责第八
  begin
    _TGL.Finger:=vSiKe.RiKe1.XiaShen;
    if TianGanYinYang(_TGL.CurrItem.Order)=yyYang then//日干为阳
    begin
      _TGL.Step(5);//与日干相合
      vSanChuan.ChuChuan.DiZhi:=vTianPan.Items[_TGL.CurrItem.DiGong];//所寄地盘的上神为初传
    end
    else
    begin
      vDiPan.Finger:=vSiKe.ChenKe1.XiaShen;
      vDiPan.Step(4);//顺时取三合的下一元素
    end;
    GanShangShenLiangChuan;//干上神两传

  end;//procedure

  procedure BaZhuanDiJiu;//八专第九
  begin
    if TianGanYinYang(vSiKe.RiKe1.XiaShen)=yyYang then
    begin//阳日,第一课上神进两宫发用
      vDiPan.Finger:=SAK[1].Shen;
      vDiPan.Step(2);
    end
    else
    begin//阴日,第四课上神退两宫发用
      vDiPan.Finger:=SAK[4].Shen;
      vDiPan.Step(-2);
    end;
    vSanChuan.ChuChuan.DiZhi:=vDiPan.Finger;
    GanShangShenLiangChuan;//干上神两传
  end;//procedure

begin//san chuan main

  for I:=1 to 4 do
  begin
    SAK[I]:=TAnKe.Create;
  end;

  //判定四课的上下关系
  SAK[1].GuanXi:=WuXingGuanXi(DiZhiWuXing(vSiKe.RiKe1.ShangShen), TianGanWuXing(vSiKe.RiKe1.XiaShen));
  SAK[2].GuanXi:=WuXingGuanXi(DiZhiWuXing(vSiKe.RiKe2.ShangShen), DiZhiWuXing(vSiKe.RiKe2.XiaShen));
  SAK[3].GuanXi:=WuXingGuanXi(DiZhiWuXing(vSiKe.ChenKe1.ShangShen), DiZhiWuXing(vSiKe.ChenKe1.XiaShen));
  SAK[4].GuanXi:=WuXingGuanXi(DiZhiWuXing(vSiKe.ChenKe2.ShangShen), DiZhiWuXing(vSiKe.ChenKe2.XiaShen));
  //上神
  SAK[1].Shen:=vSiKe.RiKe1.ShangShen;
  SAK[2].Shen:=vSiKe.RiKe2.ShangShen;
  SAK[3].Shen:=vSiKe.ChenKe1.ShangShen;
  SAK[4].Shen:=vSiKe.ChenKe2.ShangShen;

  K:=0; Z:=0;//初始化贼、克的变量

  for I:=1 to 4 do//贼克关系数量
  begin
    if SAK[1].GuanXi=Zei then Inc(Z);//贼
    if SAK[1].GuanXi=Ke then Inc(K);//克
  end;

  Processed:=false;//还末定三传

  if vTianPan.Items[dzZi]=dzZi then
  begin
    FuYinDiLiu;//伏吟第六
    goto ZhaoDunGan;
  end;

  if (K=1) or (Z=1) then
  begin
    KeZeiDiYi;//克贼第一
    goto ZhaoDunGan;
  end;

  if ((K>1) and (Z=0){比用课}) or (Z>1{知一课}) then
  begin
    BiYongDiEr;//比用第二
    if Not(Processed) then SheHaiDiSan;//涉害第三
    goto ZhaoDunGan;
  end;

  if (K=0) and (Z=0) then
  begin
    if vTianPan.Items[dzZi]=dzWu then
    begin
      FanYinDiQi;//天地对冲,反吟第七
      goto ZhaoDunGan;
    end;

    if (SAK[1].Shen=SAK[3].Shen) or (SAK[1].Shen=SAK[4].Shen) or (SAK[2].Shen=SAK[3].Shen) or (SAK[2].Shen=SAK[4].Shen) then//实有三课
    begin
      BieZeDiBa;//实有三课,别责第八
      goto ZhaoDunGan;
    end;

    if _TGL.Items[vSiKe.RiKe1.XiaShen].DiGong=vSiKe.ChenKe1.XiaShen then//
    begin
      BaZhuanDiJiu;//干支同位,八专第九
      goto ZhaoDunGan;
    end;

    YaoKeDiSi;//遥克第四
    if Not(Processed) then AngXingDiWu;//昂星第五
    goto ZhaoDunGan;
  end;

ZhaoDunGan://找遁干
  vDiPan.Finger:=vSiKe.ChenKe1.XiaShen;
  vDiPan.Step(Integer(tgGui)-Integer(vSiKe.RiKe1.XiaShen)+1);//越过旬末,第一个空亡
  vKongWang1:=vDiPan.Finger;
  vDiPan.StepNext;//下一个空亡
  vKongWang2:=vDiPan.Finger;

  //初传
  if vSanChuan.ChuChuan.DiZhi in [KongWang1,KongWang2] then
    vSanChuan.ChuChuan.DunGan:=tgNull
  else
  begin
    vDiPan.Finger:=vSiKe.ChenKe1.XiaShen;
    _TGL.Finger:=vSiKe.RiKe1.XiaShen;
    _TGL.Step(Integer(vSanChuan.ChuChuan.DiZhi)-Integer(vSiKe.ChenKe1.XiaShen));
    vSanChuan.ChuChuan.DunGan:=_TGL.CurrItem.Order;
  end;

  //中传
  if vSanChuan.ZhongChuan.DiZhi in [KongWang1,KongWang2] then
    vSanChuan.ZhongChuan.DunGan:=tgNull
  else
  begin
    vDiPan.Finger:=vSiKe.ChenKe1.XiaShen;
    _TGL.Finger:=vSiKe.RiKe1.XiaShen;
    _TGL.Step(Integer(vSanChuan.ZhongChuan.DiZhi)-Integer(vSiKe.ChenKe1.XiaShen));
    vSanChuan.ZhongChuan.DunGan:=_TGL.CurrItem.Order;
  end;

  //末传
  if vSanChuan.MoChuan.DiZhi in [KongWang1,KongWang2] then
    vSanChuan.MoChuan.DunGan:=tgNull
  else
  begin
    vDiPan.Finger:=vSiKe.ChenKe1.XiaShen;
    _TGL.Finger:=vSiKe.RiKe1.XiaShen;
    _TGL.Step(Integer(vSanChuan.MoChuan.DiZhi)-Integer(vSiKe.ChenKe1.XiaShen));
    vSanChuan.MoChuan.DunGan:=_TGL.CurrItem.Order;
  end;

  //三传的天将
  for dzI:=dzZi to dzHai do
    if vTianPan.Items[dzI]=vSanChuan.ChuChuan.DiZhi then Break;
  vSanChuan.ChuChuan.Jiang:=vJiangPan.Items[dzI];

  for dzI:=dzZi to dzHai do
    if vTianPan.Items[dzI]=vSanChuan.ZhongChuan.DiZhi then Break;
  vSanChuan.ZhongChuan.Jiang:=vJiangPan.Items[dzI];

  for dzI:=dzZi to dzHai do
    if vTianPan.Items[dzI]=vSanChuan.MoChuan.DiZhi then Break;
  vSanChuan.MoChuan.Jiang:=vJiangPan.Items[dzI];

  //三传和日干的六亲关系
  RGWX:=TianGanWuXing(vSiKe.RiKe1.XiaShen);
  vSanChuan.ChuChuan.GuanXi:=WuXingGuanXi(DiZhiWuXing(vSanChuan.ChuChuan.DiZhi),RGWX);
  vSanChuan.ZhongChuan.GuanXi:=WuXingGuanXi(DiZhiWuXing(vSanChuan.ZhongChuan.DiZhi),RGWX);
  vSanChuan.MoChuan.GuanXi:=WuXingGuanXi(DiZhiWuXing(vSanChuan.MoChuan.DiZhi),RGWX);

  for I:=1 to 4 do
  begin
    SAK[I].Free;
  end;

end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -