Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
        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);
        }
Esempio n. 13
0
        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);
        }
Esempio n. 14
0
        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);
        }
Esempio n. 15
0
        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);
        }
Esempio n. 16
0
        public float CaiboScore(PaiPan pan, Gong caibo)
        {
            var sfsz = SanFangSiZheng(pan, caibo.Name);
            // 主星
            List <Star> zhuxing = caibo.Stars.Where(s => s.Type == Star.StarType.主星).ToList();

            if (zhuxing == null || zhuxing.Count == 0)
            {
                zhuxing = new List <Star>();
                var duiStars = sfsz.DuiZhaoGong.Stars.Where(s => s.Type == Star.StarType.主星);
                foreach (var star in duiStars)
                {
                    var s = new Star(star.Name, star.Type);
                    if (star.LiangDu != null)
                    {
                        int ld = (int)star.LiangDu;
                        ld -= 2;
                        if (ld < -3)
                        {
                            ld = -3;
                        }
                        s.LiangDu = ld;
                    }
                    zhuxing.Add(s);
                }
            }

            // 辅星
            var fuxing0 = caibo.Stars.Where(s => dal.Dic_JiXing.ContainsKey(s.Name) || dal.Dic_XiongXing.ContainsKey(s.Name)).ToList();
            var fuxing  = new List <Star>(fuxing0);

            foreach (var star in zhuxing)
            {
                if (!string.IsNullOrEmpty(star.Hua))
                {
                    fuxing.Add(new Star("化" + star.Hua, Star.StarType.其它));
                }
            }

            // 会照辅星
            List <Star> huizhaoFuxing = new List <Star>();

            foreach (var s in sfsz.DuiZhaoGong.Stars)
            {
                if (dal.Dic_JiXing.ContainsKey(s.Name) || dal.Dic_XiongXing.ContainsKey(s.Name))
                {
                    huizhaoFuxing.Add(s);
                }

                if (!string.IsNullOrEmpty(s.Hua))
                {
                    fuxing.Add(new Star("化" + s.Hua, Star.StarType.其它));
                }
            }
            foreach (var s in sfsz.HuiGongs[0].Stars)
            {
                if (dal.Dic_JiXing.ContainsKey(s.Name) || dal.Dic_XiongXing.ContainsKey(s.Name) || s.Name == "化禄")
                {
                    huizhaoFuxing.Add(s);
                }
                if (!string.IsNullOrEmpty(s.Hua))
                {
                    fuxing.Add(new Star("化" + s.Hua, Star.StarType.其它));
                }
            }
            foreach (var s in sfsz.HuiGongs[1].Stars)
            {
                if (dal.Dic_JiXing.ContainsKey(s.Name) || dal.Dic_XiongXing.ContainsKey(s.Name) || s.Name == "化禄")
                {
                    huizhaoFuxing.Add(s);
                }
                if (!string.IsNullOrEmpty(s.Hua))
                {
                    fuxing.Add(new Star("化" + s.Hua, Star.StarType.其它));
                }
            }

            // 三方四正是否有武曲
            bool hasWuqu = false;

            if (sfsz.SelfGong.Stars.Exists(s => s.Name == "武曲") ||
                sfsz.DuiZhaoGong.Stars.Exists(s => s.Name == "武曲") ||
                sfsz.HuiGongs[0].Stars.Exists(s => s.Name == "武曲") ||
                sfsz.HuiGongs[1].Stars.Exists(s => s.Name == "武曲"))
            {
                hasWuqu = true;
            }

            return(CaiboScore(zhuxing, fuxing, huizhaoFuxing, hasWuqu));
        }