private bool 辅拱文星格(PaiPan pan) { // 文昌、文曲在命宫,有辅弼两星在三方四正拱照或左右邻宫相夹。 if (pan.MingGong.Stars.Exists(s => s.Name == "文昌") && pan.MingGong.Stars.Exists(s => s.Name == "文曲")) { BasicGong sfsz = SanFangSiZheng(pan, GongIndex.命宫); Gong[] arr = new Gong[] { sfsz.SelfGong, sfsz.DuiZhaoGong, sfsz.HuiGongs[0], sfsz.HuiGongs[1] }; Gong g1 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "左辅")); Gong g2 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "右弼")); if (g1 != null && g2 != null) { return(true); } if (pan.MingGong.Previous.Stars.Exists(s => s.Name == "左辅") && pan.MingGong.Next.Stars.Exists(s => s.Name == "右弼")) { return(true); } if (pan.MingGong.Previous.Stars.Exists(s => s.Name == "右弼") && pan.MingGong.Next.Stars.Exists(s => s.Name == "左辅")) { return(true); } } return(false); }
private bool 日月并明格(PaiPan pan) { // 日月位于三方四正中,且太阳在巳,太阴在酉或太阳在辰,太阴在戌,为本格。 BasicGong sfsz = SanFangSiZheng(pan, GongIndex.命宫); Gong[] arr = new Gong[] { sfsz.SelfGong, sfsz.DuiZhaoGong, sfsz.HuiGongs[0], sfsz.HuiGongs[1] }; Gong taiyang = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "太阳")); Gong taiyin = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "太阴")); // 日月位于三方四正中 if (taiyang != null && taiyin != null) { // 太阳在巳,太阴在酉 if (taiyang.ZhiString == "巳" && taiyin.ZhiString == "酉") { return(true); } // 太阳在辰,太阴在戌 if (taiyang.ZhiString == "辰" && taiyin.ZhiString == "戌") { return(true); } } return(false); }
private bool 君臣庆会格(PaiPan pan) { // 命宫有紫微星,且于三方四正中有至少有左辅、右弼任何一星加会或同宫,或两星于两临宫相夹。 if (pan.MingGong.Stars.Exists(s => s.Name == "紫薇")) { BasicGong sfsz = SanFangSiZheng(pan, GongIndex.命宫); Gong[] arr = new Gong[] { sfsz.SelfGong, sfsz.DuiZhaoGong, sfsz.HuiGongs[0], sfsz.HuiGongs[1] }; Gong g1 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "左辅")); Gong g2 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "右弼")); // 左辅、右弼任何一星加会或同宫 if (g1 != null || g2 != null) { return(true); } // 两星于两临宫相夹 if (pan.MingGong.Previous.Stars.Exists(s => s.Name == "左辅") && pan.MingGong.Next.Stars.Exists(s => s.Name == "右弼")) { return(true); } if (pan.MingGong.Previous.Stars.Exists(s => s.Name == "右弼") && pan.MingGong.Next.Stars.Exists(s => s.Name == "左辅")) { return(true); } } return(false); }
private bool 紫府朝垣格(PaiPan pan) { // 紫薇、天府于三方四正照命。 BasicGong sfsz = SanFangSiZheng(pan, GongIndex.命宫); if (sfsz.DuiZhaoGong.Stars.Exists(s => s.Name == "紫薇") && sfsz.DuiZhaoGong.Stars.Exists(s => s.Name == "天府")) { return(true); } return(false); }
private bool 天乙拱命格(PaiPan pan) { // 天魁,天钺俱在三方四正中。 BasicGong sfsz = SanFangSiZheng(pan, GongIndex.命宫); Gong[] arr = new Gong[] { sfsz.SelfGong, sfsz.DuiZhaoGong, sfsz.HuiGongs[0], sfsz.HuiGongs[1] }; Gong g1 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "天魁")); Gong g2 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "天钺")); if (g1 != null && g2 != null) { return(true); } return(false); }
private bool 权禄巡逢格(PaiPan pan) { // 化禄、化权俱在三方四正中。 BasicGong sfsz = SanFangSiZheng(pan, GongIndex.命宫); Gong[] arr = new Gong[] { sfsz.SelfGong, sfsz.DuiZhaoGong, sfsz.HuiGongs[0], sfsz.HuiGongs[1] }; Gong g1 = arr.FirstOrDefault(g => g.Stars.Exists(s => "禄" == s.Hua)); Gong g2 = arr.FirstOrDefault(g => g.Stars.Exists(s => "权" == s.Hua)); if (g1 != null && g2 != null) { return(true); } return(false); }
public static BasicGong SanFangSiZheng(PaiPan pan, string name) { //三方四正 var model = new BasicGong(); model.SelfGong = pan.Gongs.First(g => g.Name == name); int dui = (model.SelfGong.Zhi + 6) % 12; if (dui == 0) { dui = 12; } else if (dui < 0) { dui += 12; } int hui1 = (model.SelfGong.Zhi + 4) % 12; if (hui1 == 0) { hui1 = 12; } else if (hui1 < 0) { hui1 += 12; } int hui2 = (model.SelfGong.Zhi - 4) % 12; if (hui2 == 0) { hui2 = 12; } else if (hui2 < 0) { hui2 += 12; } model.DuiZhaoGong = pan.Gongs[dui - 1]; model.HuiGongs.Add(pan.Gongs[hui1 - 1]); model.HuiGongs.Add(pan.Gongs[hui2 - 1]); return(model); }
private bool 铃陀格(PaiPan pan) { // 在三方四正中,四煞只有铃星及陀罗,才入格。 BasicGong sfsz = SanFangSiZheng(pan, GongIndex.命宫); Gong[] arr = new Gong[] { sfsz.SelfGong, sfsz.DuiZhaoGong, sfsz.HuiGongs[0], sfsz.HuiGongs[1] }; Gong g1 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "火星")); Gong g2 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "擎羊")); Gong g3 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "陀罗")); Gong g4 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "铃星")); if (g1 == null && g2 == null && g3 != null && g4 != null) { return(true); } return(false); }
private bool 合火铃贪格(PaiPan pan) { // 贪狼守命,遇火星、铃星俱在命或三方会照。 if (pan.MingGong.Stars.Exists(s => s.Name == "贪狼")) { BasicGong sfsz = SanFangSiZheng(pan, GongIndex.命宫); Gong[] arr = new Gong[] { sfsz.SelfGong, sfsz.HuiGongs[0], sfsz.HuiGongs[1] }; Gong g1 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "火星")); Gong g2 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "铃星")); if (g1 != null && g2 != null) { return(true); } } return(false); }
private bool 科名会禄格(PaiPan pan) { // 化科在命宫,化禄在三方四正会照。 if (pan.MingGong.Stars.Exists(s => "科" == s.Hua)) { BasicGong sfsz = SanFangSiZheng(pan, GongIndex.命宫); Gong[] arr = new Gong[] { sfsz.SelfGong, sfsz.DuiZhaoGong, sfsz.HuiGongs[0], sfsz.HuiGongs[1] }; Gong g1 = arr.FirstOrDefault(g => g.Stars.Exists(s => "禄" == s.Hua)); if (g1 != null) { return(true); } } return(false); }
private bool 马落空亡格(PaiPan pan) { // 天马遇地劫、地空同宫或三方冲照。 if (pan.MingGong.Stars.Exists(s => s.Name == "天马")) { BasicGong sfsz = SanFangSiZheng(pan, GongIndex.命宫); Gong[] arr = new Gong[] { sfsz.SelfGong, sfsz.HuiGongs[0], sfsz.HuiGongs[1] }; Gong g1 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "地劫")); Gong g2 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "地空")); if (g1 != null && g2 != null) { return(true); } } return(false); }
private bool 阳梁昌禄格(PaiPan pan) { // 三方四正会齐了太阳、天梁、文昌、禄存四星。 BasicGong sfsz = SanFangSiZheng(pan, GongIndex.命宫); Gong[] arr = new Gong[] { sfsz.SelfGong, sfsz.DuiZhaoGong, sfsz.HuiGongs[0], sfsz.HuiGongs[1] }; Gong g1 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "太阳")); Gong g2 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "天梁")); Gong g3 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "文昌")); Gong g4 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "禄存")); if (g1 != null && g2 != null && g3 != null && g4 != null) { return(true); } return(false); }
private bool 机月同梁格(PaiPan pan) { // 于三方四正中有天机、太阴、天同、天梁四星交会。 BasicGong sfsz = SanFangSiZheng(pan, GongIndex.命宫); Gong[] arr = new Gong[] { sfsz.SelfGong, sfsz.DuiZhaoGong, sfsz.HuiGongs[0], sfsz.HuiGongs[1] }; Gong g1 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "天机")); Gong g2 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "太阴")); Gong g3 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "天同")); Gong g4 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "天梁")); if (g1 != null && g2 != null && g3 != null && g4 != null) { return(true); } return(false); }
private bool 巨逢四煞格(PaiPan pan) { // 巨门守命,且在三方四正中,与羊陀火铃四煞同时有会照或同宫关系。 if (pan.MingGong.Stars.Exists(s => s.Name == "巨门")) { BasicGong sfsz = SanFangSiZheng(pan, GongIndex.命宫); Gong[] arr = new Gong[] { sfsz.SelfGong, sfsz.DuiZhaoGong, sfsz.HuiGongs[0], sfsz.HuiGongs[1] }; Gong g1 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "火星")); Gong g2 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "擎羊")); Gong g3 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "陀罗")); Gong g4 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "铃星")); if (g1 != null && g2 != null && g3 != null && g4 != null) { return(true); } } return(false); }
private bool 禄逢冲破格(PaiPan pan) { // 禄存或化禄坐命,在三方四正中,有被地劫、地空冲破。 if (pan.MingGong.Stars.Exists(s => s.Name == "禄存") || pan.MingGong.Stars.Exists(s => "禄" == s.Hua)) { BasicGong sfsz = SanFangSiZheng(pan, GongIndex.命宫); Gong[] arr = new Gong[] { sfsz.SelfGong, sfsz.DuiZhaoGong, sfsz.HuiGongs[0], sfsz.HuiGongs[1] }; Gong g1 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "地劫")); Gong g2 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "地空")); if (g1 != null && g2 != null) { return(true); } } return(false); }
private bool 禄马交驰格(PaiPan pan) { // 命宫或三方有禄存、天马或化禄、天马。 BasicGong sfsz = SanFangSiZheng(pan, GongIndex.命宫); Gong[] arr = new Gong[] { sfsz.SelfGong, sfsz.HuiGongs[0], sfsz.HuiGongs[1] }; Gong g1 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "禄存")); Gong g2 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "天马")); Gong g3 = arr.FirstOrDefault(g => g.Stars.Exists(s => "禄" == s.Hua)); if (g1 != null && g2 != null) { return(true); } if (g3 != null && g2 != null) { return(true); } return(false); }
public static DaShi GetDaShi(BasicGong gong, DAL dal) { DaShi result = new DaShi(); if (gong.Name == GongIndex.命宫) { string id = gong.ZhuXing[0].Id.ToString(); result.MingZhongTeDian = dal.s24.Find(s => s.id == gong.ZhuXing[0].Id.ToString()).items[gong.SelfGong.Zhi - 1].text; if (gong.ZhuXing.Count == 2) { result.MingZhongTeDian += "\n"; result.MingZhongTeDian += dal.s24.Find(s => s.id == gong.ZhuXing[1].Id.ToString()).items[gong.SelfGong.Zhi - 1].text; id += ("#" + gong.ZhuXing[1].Id.ToString()); } result.JianYi = dal.s25.Find(s => s.id == id).text; } else { var data = GetData(gong.Name, dal); if (gong.JiXiongZhiShu > 50) { result.MingZhongTeDian = data.Find(d => d.id == gong.ZhuXing[0].Id.ToString()).dizhis[gong.SelfGong.Zhi - 1].contents[0].text; } else { result.MingZhongTeDian = data.Find(d => d.id == gong.ZhuXing[0].Id.ToString()).dizhis[gong.SelfGong.Zhi - 1].contents[1].text; } result.JianYi = GetJianYi(gong.Name); } return(result); }
private bool 坐贵向贵格(PaiPan pan) { // 如坐命天魁且逢天钺来加会,或坐命天钺,且逢天魁来加会。 BasicGong sfsz = SanFangSiZheng(pan, GongIndex.命宫); if (pan.MingGong.Stars.Exists(s => s.Name == "天魁")) { if (sfsz.HuiGongs.Exists(g => g.Stars.Exists(s => s.Name == "天钺"))) { return(true); } } if (pan.MingGong.Stars.Exists(s => s.Name == "天钺")) { if (sfsz.HuiGongs.Exists(g => g.Stars.Exists(s => s.Name == "天魁"))) { return(true); } } return(false); }
private bool 廉贞文武格(PaiPan pan) { // 廉贞坐命,官禄宫为武曲来会,三方四正再会文昌或文曲。 if (pan.MingGong.Stars.Exists(s => s.Name == "廉贞")) { var gong = pan.Gongs.First(g => g.Name == "事业宫"); if (gong.Stars.Exists(s => s.Name == "武曲")) { BasicGong sfsz = SanFangSiZheng(pan, GongIndex.命宫); Gong[] arr = new Gong[] { sfsz.SelfGong, sfsz.DuiZhaoGong, sfsz.HuiGongs[0], sfsz.HuiGongs[1] }; Gong g1 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "文昌")); Gong g2 = arr.FirstOrDefault(g => g.Stars.Exists(s => s.Name == "文曲")); if (g1 != null || g2 != null) { return(true); } } } return(false); }
public int GetScore(BasicGong gong, GongIndex index) { float score = 0; #region 主星 if (gong.ZhuXing.Count == 1) { var xing = gong.ZhuXing[0]; var xingScore = zhuXingScore[xing.Star.Name]; var liandu = xing.Star.LiangDu.HasValue ? (int)xing.Star.LiangDu : 1; if (gong.isJieXing) { liandu -= 2; if (liandu < -3) { liandu = -3; } } score += xingScore[(int)index] * LiangDuWieght[liandu]; } else { var xing1 = gong.ZhuXing[0]; var xing2 = gong.ZhuXing[1]; var xingScore = zhuXingScore.ContainsKey(xing1.Star.Name + xing2.Star.Name) ? zhuXingScore[xing1.Star.Name + xing2.Star.Name] : zhuXingScore[xing2.Star.Name + xing1.Star.Name]; var liandu1 = xing1.Star.LiangDu.HasValue ? (int)xing1.Star.LiangDu : 1; if (gong.isJieXing) { liandu1 -= 2; if (liandu1 < -3) { liandu1 = -3; } } var liandu2 = xing2.Star.LiangDu.HasValue ? (int)xing2.Star.LiangDu : 1; if (gong.isJieXing) { liandu2 -= 2; if (liandu2 < -3) { liandu2 = -3; } } score += xingScore[(int)index] * (LiangDuWieght[liandu1] + LiangDuWieght[liandu2]) / 2; } #endregion #region 星 var zhuJixing = new List <Xing>(); var otherJixing = new List <Xing>(); foreach (var xing in gong.JiXing) { if (gong.SelfGong.Stars.Exists(s => s.Name == xing.Star.Name)) { zhuJixing.Add(xing); } else { otherJixing.Add(xing); } } if (zhuJixing.Exists(x => x.Star.Name == "文昌") && zhuJixing.Exists(x => x.Star.Name == "文曲")) { zhuJixing.RemoveAll(x => x.Star.Name == "文昌" || x.Star.Name == "文曲"); score += jiXingScore["文昌文曲"][0]; } if (zhuJixing.Exists(x => x.Star.Name == "左辅") && zhuJixing.Exists(x => x.Star.Name == "右弼")) { zhuJixing.RemoveAll(x => x.Star.Name == "左辅" || x.Star.Name == "右弼"); score += jiXingScore["左辅右弼"][0]; } if (zhuJixing.Exists(x => x.Star.Name == "天魁") && zhuJixing.Exists(x => x.Star.Name == "天钺")) { zhuJixing.RemoveAll(x => x.Star.Name == "天魁" || x.Star.Name == "天钺"); score += jiXingScore["天魁天钺"][0]; } if (otherJixing.Exists(x => x.Star.Name == "文昌") && otherJixing.Exists(x => x.Star.Name == "文曲")) { otherJixing.RemoveAll(x => x.Star.Name == "文昌" || x.Star.Name == "文曲"); score += jiXingScore["文昌文曲"][1]; } if (otherJixing.Exists(x => x.Star.Name == "左辅") && otherJixing.Exists(x => x.Star.Name == "右弼")) { otherJixing.RemoveAll(x => x.Star.Name == "左辅" || x.Star.Name == "右弼"); score += jiXingScore["左辅右弼"][1]; } if (otherJixing.Exists(x => x.Star.Name == "天魁") && otherJixing.Exists(x => x.Star.Name == "天钺")) { otherJixing.RemoveAll(x => x.Star.Name == "天魁" || x.Star.Name == "天钺"); score += jiXingScore["天魁天钺"][1]; } foreach (var xing in zhuJixing) { score += jiXingScore[xing.Star.Name][0]; } foreach (var xing in otherJixing) { score += jiXingScore[xing.Star.Name][1]; } #endregion #region 凶星 var zhuXiongxing = new List <Xing>(); var otherXiongxing = new List <Xing>(); foreach (var xing in gong.XiongXing) { if (gong.SelfGong.Stars.Exists(s => s.Name == xing.Star.Name)) { zhuXiongxing.Add(xing); } else { otherXiongxing.Add(xing); } } if (zhuXiongxing.Exists(x => x.Star.Name == "火星") && zhuXiongxing.Exists(x => x.Star.Name == "铃星")) { zhuXiongxing.RemoveAll(x => x.Star.Name == "火星" || x.Star.Name == "铃星"); score += xiongXingScore["火星铃星"][0]; } if (zhuXiongxing.Exists(x => x.Star.Name == "擎羊") && zhuXiongxing.Exists(x => x.Star.Name == "陀罗")) { zhuXiongxing.RemoveAll(x => x.Star.Name == "擎羊" || x.Star.Name == "陀罗"); score += xiongXingScore["擎羊陀罗"][0]; } if (zhuXiongxing.Exists(x => x.Star.Name == "地空") && zhuXiongxing.Exists(x => x.Star.Name == "地劫")) { zhuXiongxing.RemoveAll(x => x.Star.Name == "地空" || x.Star.Name == "地劫"); score += xiongXingScore["地空地劫"][0]; } if (otherXiongxing.Exists(x => x.Star.Name == "火星") && otherXiongxing.Exists(x => x.Star.Name == "铃星")) { otherXiongxing.RemoveAll(x => x.Star.Name == "火星" || x.Star.Name == "铃星"); score += xiongXingScore["火星铃星"][1]; } if (otherXiongxing.Exists(x => x.Star.Name == "擎羊") && otherXiongxing.Exists(x => x.Star.Name == "陀罗")) { otherXiongxing.RemoveAll(x => x.Star.Name == "擎羊" || x.Star.Name == "陀罗"); score += xiongXingScore["擎羊陀罗"][1]; } if (otherXiongxing.Exists(x => x.Star.Name == "地空") && otherXiongxing.Exists(x => x.Star.Name == "地劫")) { otherXiongxing.RemoveAll(x => x.Star.Name == "地空" || x.Star.Name == "地劫"); score += xiongXingScore["地空地劫"][1]; } foreach (var xing in zhuXiongxing) { score += xiongXingScore[xing.Star.Name][0]; } foreach (var xing in otherXiongxing) { score += xiongXingScore[xing.Star.Name][1]; } #endregion #region 特殊情况 if (gong.XiongXing.Exists(x => x.Star.Name == "火星")) { if (gong.ZhuXing.Exists(x => x.Star.Name == "七杀")) { score += 40; } if (gong.ZhuXing.Exists(x => x.Star.Name == "贪狼")) { score += 80; } if (gong.JiXing.Exists(x => x.Star.Name == "武曲")) { score += 60; } } if (gong.XiongXing.Exists(x => x.Star.Name == "擎羊") && index == GongIndex.疾厄宫) { score += 80; } #endregion if (score < 40) { score = 40 + score % 4; } else if (score >= 200) { score = 100; } else { score = (score - 40) * 60 / 160 + 40; } return((int)score); }