Пример #1
0
        /// <summary>
        /// 合法・散法 文字の配列を取得します。
        /// </summary>
        /// <param name="unKansi1">年運、大運干支</param>
        /// <param name="unKansi2">対象干支</param>
        /// <param name="taiunKansi">大運干支</param>
        /// <param name="nenunKansi">年運干支</param>
        /// <returns></returns>
        public GouhouSannpouResult[] GetGouhouSanpouEx(Kansi unKansi1, Kansi unKansi2, Kansi taiunKansi, Kansi nenunKansi)
        {
            List <GouhouSannpouResult> lstGouhouSanpouResult = new List <GouhouSannpouResult>();

            string nentin  = GetNentin(unKansi1, unKansi2);             //納音、準納音
            string rittin  = GetNittin(unKansi1, unKansi2);             //律音、準律音
            string tensatu = GetTensatuTichuString(unKansi1, unKansi2); //天殺地冲
            //string kangou = GetKangoStr(nenunTaiunKansi, kansi); //干合

            bool bExistNentin       = (nentin == "" ? false : true);
            bool bExistTensatuTichu = tensatu == "" ? false : true;

            string[] items = tblMng.gouhouSanpouTbl.GetGouhouSanpouEx(unKansi1.si, unKansi2.si, bExistTensatuTichu, bExistNentin);
            if (items != null)
            {
                for (int i = 0; i < items.Length; i++)
                {
                    GouhouSannpouResult result = new GouhouSannpouResult(items[i]);
                    if (items[i] == "半会")
                    {
                        //大半会判定
                        int no1 = tblMng.kansiTbl.GetKansiNo(unKansi1);
                        int no2 = tblMng.kansiTbl.GetKansiNo(unKansi2);

                        //no1に+20、または-20した地点のどちらかがno2と同じなら大半会
                        //1~60のリング状態をベースに前後方向の20差をチェックする必要がある。
                        //前方検索
                        int no = no1 + 20;
                        if (no > 60)
                        {
                            no = no % 60;
                            if (no == 0)
                            {
                                no = 60;
                            }
                        }
                        if (no == no2)
                        {
                            result.displayName = "大半会";
                        }
                        else
                        {
                            //後方検索
                            no = no1 - 20;
                            if (no < 0)
                            {
                                no += 60;
                            }
                            if (no == no2)
                            {
                                result.displayName = "大半会";
                            }
                        }
                        //if (Math.Abs( no1 - no2)== 20)
                        //{
                        //    items[i] = "大半会";
                        //}
                        //else
                        //{
                        //    if( no1 < no2)
                        //    {
                        //        if( no2 + 20 == no1 + 60)
                        //        {
                        //            items[i] = "大半会";
                        //        }
                        //    }
                        //    else
                        //    {
                        //        if (no1 + 20 == no2 + 60)
                        //        {
                        //            items[i] = "大半会";
                        //        }
                        //    }
                        //}
                    }

                    lstGouhouSanpouResult.Add(result);
                }
            }

            //例外表示のためのbEnableフラグ設定
            SetExceptionValueEnable(unKansi1, unKansi2, taiunKansi, nenunKansi, ref lstGouhouSanpouResult);

            List <GouhouSannpouResult> lstResult = new List <GouhouSannpouResult>();

            if (!string.IsNullOrEmpty(nentin))
            {
                lstResult.Add(new GouhouSannpouResult(nentin));
            }
            if (!string.IsNullOrEmpty(rittin))
            {
                lstResult.Add(new GouhouSannpouResult(rittin));
            }
            if (!string.IsNullOrEmpty(tensatu))
            {
                lstResult.Add(new GouhouSannpouResult(tensatu));
            }
//            if (!string.IsNullOrEmpty(kangou)) lstResult.Add(new GouhouSannpouResult(kangou));

            lstResult.AddRange(lstGouhouSanpouResult);

            return(lstResult.ToArray());
        }
Пример #2
0
        //合法・散法
        /// <summary>
        /// 合法・散法 文字の配列を取得します。
        /// ・天殺地冲または、納音がある場合は、"冲動"は除外されます。
        /// ・半会の場合、2つの干支番号に20の差異があれば"大半会"に置き換えます。
        /// </summary>
        /// <param name="nenunTaiunKansi">年運、大運 干支</param>
        /// <param name="kansi">宿命干支(日、月、年)</param>
        /// <param name="bExistTensatuTichu">true...天殺地冲あり</param>
        /// <param name="bExistNentin">true...納音あり</param>
        /// <returns></returns>
        public GouhouSannpouResult[] GetGouhouSanpou(Kansi nenunTaiunKansi, Kansi kansi, bool bExistTensatuTichu, bool bExistNentin)
        {
            List <GouhouSannpouResult> lstResult = new List <GouhouSannpouResult>();

            string[] items = tblMng.gouhouSanpouTbl.GetGouhouSanpouEx(nenunTaiunKansi.si, kansi.si, bExistTensatuTichu, bExistNentin);
            if (items != null)
            {
                for (int i = 0; i < items.Length; i++)
                {
                    GouhouSannpouResult result = new GouhouSannpouResult(items[i]);
                    if (items[i] == "半会")
                    {
                        //大半会判定
                        int no1 = tblMng.kansiTbl.GetKansiNo(nenunTaiunKansi);
                        int no2 = tblMng.kansiTbl.GetKansiNo(kansi);

                        //no1に+20、または-20した地点のどちらかがno2と同じなら大半会
                        //1~60のリング状態をベースに前後方向の20差をチェックする必要がある。
                        //前方検索
                        int no = no1 + 20;
                        if (no > 60)
                        {
                            no = no % 60;
                            if (no == 0)
                            {
                                no = 60;
                            }
                        }
                        if (no == no2)
                        {
                            result.displayName = "大半会";
                        }
                        else
                        {
                            //後方検索
                            no = no1 - 20;
                            if (no < 0)
                            {
                                no += 60;
                            }
                            if (no == no2)
                            {
                                result.displayName = "大半会";
                            }
                        }
                        //if (Math.Abs( no1 - no2)== 20)
                        //{
                        //    items[i] = "大半会";
                        //}
                        //else
                        //{
                        //    if( no1 < no2)
                        //    {
                        //        if( no2 + 20 == no1 + 60)
                        //        {
                        //            items[i] = "大半会";
                        //        }
                        //    }
                        //    else
                        //    {
                        //        if (no1 + 20 == no2 + 60)
                        //        {
                        //            items[i] = "大半会";
                        //        }
                        //    }
                        //}
                    }

                    lstResult.Add(result);
                }
            }
            return(lstResult.ToArray());
        }