/// <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()); }
//合法・散法 /// <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()); }