奇门遁甲与太乙神数、大六壬合称为三式,以九宫八卦式盘推测万事万物,融合古代天文地理、兵法谋略等学说于一体,最早来源于古代的行军打仗、排兵布阵,姜子牙、刘伯温、诸葛亮等人都有研究,《三国演义》和《水浒传》中军师诸葛亮和吴用都有借助奇门遁甲之法排兵布阵的案例,这里不多啰嗦,感兴趣的同学可以自己去看看原著,也是十分精彩的。
因为排盘方法不像七政四余、紫微斗数、铁板神数这么复杂,所以相对来说,在民间的流传和发展要优于以上两者,经过历代长远的发展,逐步演变为可以预测万事万物,以下是部分排盘算法:
if (shizhuStr.equals("甲子")) { //六仪转换,甲子戊,甲戌己,甲申庚,甲午辛,甲辰壬,甲寅癸
shizhuYi = "戊";
} else if (shizhuStr.equals("甲戌")) {
shizhuYi = "己";
} else if (shizhuStr.equals("甲申")) {
shizhuYi = "庚";
} else if (shizhuStr.equals("甲午")) {
shizhuYi = "辛";
} else if (shizhuStr.equals("甲辰")) {
shizhuYi = "壬";
} else if (shizhuStr.equals("甲寅")) {
shizhuYi = "癸";
} else {
shizhuYi = shizhuStr.substring(0, 1);
}
//排地盘
for (int i = 0; i < 9; i++) {
if (yindun) {
qimenUnits[Gongweis[(juIndex[sanyuan] - i + 9) % 9]].setDipan(QiYis[i]);
} else {
qimenUnits[Gongweis[(juIndex[sanyuan] + i) % 9]].setDipan(QiYis[i]);
}
}
for (int i = 0; i < 9; i++) {
if (qimenUnits[i].getDipan().equals(qimenUtil.xunshou(shizhuStr).substring(2, 3))) {
primaryxunshouluogong = i;
break;
}
}
for (int i = 0; i < 9; i++) {
if (qimenUnits[i].getDipan().equals(shizhuYi)) {
dishiganIndex = i;
break;
}
}
//落在中五宫的话调整到坤二宫
xunshouLuogong = primaryxunshouluogong == 8 ? 5 : primaryxunshouluogong;
zhifuTv.setText(Zhifus[primaryxunshouluogong]);
zhishiTv.setText(Zhishis[primaryxunshouluogong]);
xunshouTv.setText(qimenUtil.xunshou(shizhuStr)); //旬首,以时干来求
String zhifu;
zhifu = Zhifus[primaryxunshouluogong];
zhifu = zhifu.equals("天禽") ? "天芮" : zhifu;
int luocha = qimenUtil.luocha(shizhuStr, qimenUtil.xunshou(shizhuStr).substring(0, 2));
if (yindun) {
primaryZhishiluogon = Gongweis[(gongweiList.indexOf(primaryxunshouluogong) - luocha + 9) % 9];
zhishiLuogong = primaryZhishiluogon == 8 ? 5 : primaryZhishiluogon;
} else {
primaryZhishiluogon = Gongweis[(gongweiList.indexOf(primaryxunshouluogong) + luocha) % 9];
zhishiLuogong = primaryZhishiluogon == 8 ? 5 : primaryZhishiluogon;
}
dishiganIndex = dishiganIndex == 8 ? 5 : dishiganIndex;
String xingUnit = "";
for (int i = 0; i < 8; i++) { //从值符开始排八神,值符跟着时干地盘开始排
if (yindun) {
qimenUnits[(dishiganIndex - i + 8) % 8].setShen(Shens[i]);
} else {
qimenUnits[(dishiganIndex + i) % 8].setShen(Shens[i]);
}
xingUnit = Xings[(xingList.indexOf(zhifu) + i) % 8];
if (xingUnit.equals("天芮")) {
qimenUnits[(dishiganIndex + i) % 8].setXing("禽芮");
qimenUnits[(dishiganIndex + i) % 8].setZhonggongdipan(qimenUnits[8].getDipan());
} else {
qimenUnits[(dishiganIndex + i) % 8].setXing(xingUnit);
qimenUnits[(dishiganIndex + i) % 8].setZhonggongdipan("");
}
qimenUnits[(dishiganIndex + i) % 8].setTianpan(qimenUnits[xingList.indexOf(Xings[(xingList.indexOf(zhifu) + i) % 8])].getDipan());
// qimenUnits[(dishiganIndex + i) % 8].setTianpan(QiYis[(Arrays.asList(QiYis).indexOf(qimenUtil.xunshou(shizhuStr).substring(2, 3)) + i) % 9]);
qimenUnits[(zhishiLuogong + i) % 8].setMen(Mens[(menList.indexOf(Zhishis[primaryxunshouluogong]) + i) % 8]);
}
paiAngan(showAngan.isChecked());
for (int i = 0; i < 8 ; i++) {
String state = qimenUtil.menState(qimenUnits[i].getGong(), qimenUnits[i].getMen());
state = state.substring(state.length() - 1); //取最后一个字
String stateString = "";
switch (state) {
case "制":
stateString = "宫制门";
break;
case "迫":
stateString = "门迫宫";
break;
case "和":
stateString = "门生宫";
break;
case "义":
stateString = "宫生门";
break;
case "比":
stateString = "门比合宫";
break;
}
keyings[i].setText(GongStrs[i] + "宫 " + stateString + "\n" + qimenUtil.geju(qimenUnits[i].getTianpan(), qimenUnits[i].getDipan()) + "\n"
+ qimenUtil.geju(qimenUnits[i].getAngan(), qimenUnits[i].getDipan()));
}
private void paiAngan(boolean show) { //排暗干
if (show) {
for (int i = 0; i < 8; i++) { //排左下角的八神:值符跟着地盘旬首,阳遁顺排,阴遁逆排
if (yindun) {
qimenUnits[(xunshouLuogong - i + 8) % 8].setXiaozhifu(Xiaoshens[i]);
} else {
qimenUnits[(xunshouLuogong + i) % 8].setXiaozhifu(Xiaoshens[i]);
}
}
//排暗干:1、时干随值使,阳顺阴逆。2、时干与值使门落宫的地盘奇仪相同则时干入中宫。
for (int i = 0; i < 9; i++) {
if (yindun) { //阴遁逆排
if (qimenUnits[zhishiLuogong].getDipan().equals(shizhuYi)) {
qimenUnits[Gongweis[(5 - i + 9) % 9]].setAngan(QiYis[(qiyiList.indexOf(shizhuYi) + i) % 9]);
} else {
qimenUnits[Gongweis[(gongweiList.indexOf(primaryZhishiluogon) - i + 9) % 9]].setAngan(QiYis[(qiyiList.indexOf(shizhuYi) + i) % 9]);
}
} else { //阳遁顺排
if (qimenUnits[zhishiLuogong].getDipan().equals(shizhuYi)) {
qimenUnits[Gongweis[(5 + i) % 9]].setAngan(QiYis[(qiyiList.indexOf(shizhuYi) + i) % 9]);
} else {
qimenUnits[Gongweis[(gongweiList.indexOf(primaryZhishiluogon) + i) % 9]].setAngan(QiYis[(qiyiList.indexOf(shizhuYi) + i) % 9]);
}
}
}
} else {
for (int i = 0; i < 8; i++) {
qimenUnits[i].setXiaozhifu("");
}
for (int i = 0; i < 9; i++) {
qimenUnits[i].setAngan("");
}
}
}