做一个奇门遁甲的排盘程序
时间: 2024-02-14 16:33:07 浏览: 364
奇门遁甲是一种中国古代的占卜术,可以用来卜算吉凶祸福、预测未来、指导决策等。在奇门遁甲中,排盘是一项非常重要的工作,它可以根据出生年月日时等信息,计算出一个人的八字、命宫、宫位、吉凶等信息。
下面是一个简单的奇门遁甲排盘程序示例,基于JavaScript实现:
```javascript
// 八字表
const eightWordsTable = [
['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'],
['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']
];
// 天干地支表
const tianganTable = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'];
const dizhiTable = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥'];
// 天干地支对应表
const tianganDizhiTable = [
['甲子', '乙丑', '丙寅', '丁卯', '戊辰', '己巳', '庚午', '辛未', '壬申', '癸酉', '甲戌', '乙亥'],
['丙子', '丁丑', '戊寅', '己卯', '庚辰', '辛巳', '壬午', '癸未', '甲申', '乙酉', '丙戌', '丁亥'],
['戊子', '己丑', '庚寅', '辛卯', '壬辰', '癸巳', '甲午', '乙未', '丙申', '丁酉', '戊戌', '己亥'],
['庚子', '辛丑', '壬寅', '癸卯', '甲辰', '乙巳', '丙午', '丁未', '戊申', '己酉', '庚戌', '辛亥'],
['壬子', '癸丑', '甲寅', '乙卯', '丙辰', '丁巳', '戊午', '己未', '庚申', '辛酉', '壬戌', '癸亥']
];
// 生肖表
const shengxiaoTable = ['鼠', '牛', '虎', '兔', '龙', '蛇', '马', '羊', '猴', '鸡', '狗', '猪'];
// 五行表
const wuxingTable = ['金', '木', '水', '火', '土'];
// 获取天干地支
function getTianganDizhi(year) {
const tianganIndex = (year - 4) % 10;
const dizhiIndex = (year - 4) % 12;
return tianganTable[tianganIndex] + dizhiTable[dizhiIndex];
}
// 获取生肖
function getShengxiao(year) {
const shengxiaoIndex = (year - 4) % 12;
return shengxiaoTable[shengxiaoIndex];
}
// 获取八字
function getEightWords(year, month, day, hour) {
const tianganDizhiYear = getTianganDizhi(year);
const tianganDizhiMonth = tianganDizhiTable[Math.floor((month - 1) / 2)][hour === 23 ? 0 : Math.floor(hour / 2)];
const tianganDizhiDay = tianganDizhiTable[Math.floor((day - 1) / 10)][hour === 23 ? 0 : Math.floor(hour / 2)];
const tianganDizhiHour = tianganDizhiTable[hour === 23 ? 0 : Math.floor(hour / 2)][0];
const eightWords = [
tianganDizhiYear[0],
tianganDizhiYear[1],
tianganDizhiMonth[0],
tianganDizhiMonth[1],
tianganDizhiDay[0],
tianganDizhiDay[1],
tianganDizhiHour[0],
tianganDizhiHour[1]
];
return eightWords;
}
// 获取命宫
function getMinggong(eightWords) {
const minggongIndex = (eightWords[0].charCodeAt() - 65 + 1) % 12;
return dizhiTable[minggongIndex];
}
// 获取宫位
function getGongwei(eightWords) {
const tianganIndex = (eightWords[0].charCodeAt() - 65) % 5;
const dizhiIndex = (eightWords[5].charCodeAt() - 49) % 3;
const gongweiIndex = (tianganIndex * 3 + dizhiIndex) % 12;
return dizhiTable[gongweiIndex];
}
// 获取吉凶
function getJixiong(eightWords) {
const tianganIndex = (eightWords[0].charCodeAt() - 65) % 5;
const dizhiIndex = (eightWords[5].charCodeAt() - 49) % 3;
const wuxingIndex = (tianganIndex + dizhiIndex) % 5;
return wuxingTable[wuxingIndex];
}
// 测试
const year = 1990;
const month = 1;
const day = 1;
const hour = 0;
const eightWords = getEightWords(year, month, day, hour);
console.log('八字:', eightWords.join(''));
console.log('命宫:', getMinggong(eightWords));
console.log('宫位:', getGongwei(eightWords));
console.log('吉凶:', getJixiong(eightWords));
console.log('生肖:', getShengxiao(year));
```
上述程序通过输入年月日时等信息,计算出一个人的八字、命宫、宫位、吉凶、生肖等信息,并输出到控制台中。你也可以根据需要扩展程序,实现更多的功能。
阅读全文