你是第几级 AI 编程?看小白如何生成一个周易应用
背景
你是第几级 AI 编程?史蒂夫·耶格(Steve Yegge)是一个著名的美国程序员。这个月,他又发表了一篇最新文章,谈他对 AI 编程的看法。他说 AI 编程有8级,他已经到了第8级,也就是最高级。
- 第1级,还没有接触到 AI 编程,你的 IDE 还是正常的样子。
- 第2级,你在 IDE 装了 AI 插件,开启了侧边栏,AI 时不时提出代码建议,问你是否接受(Yes or No)。
- 第3级,你开始信任 AI 编程,进入了 YOLO 模式("你只活一次"模式,You Only Live Once)。为了节省时间精力,你不再逐条确认 AI 的建议,只要是 AI 生成出来的东西,你就一路按 Yes,统统接受。
- 第4级,AI 占据的屏幕宽度越来越大,手工编辑的代码区仅用于比对代码差异。
- 第5级,你索性不要代码区了,改用命令行(比如 Claude Code),所有的屏幕宽度都留给了 AI。你现在不看 AI的生成结果了,只看它的完成进度。
- 第6级,你觉得只用一个 AI 太慢,于是打开3到5个窗口,同时进行 AI 编程,加快速度。
- 第7级,同时打开的 AI 编程窗口到了10个以上,已经是你手工管理的极限了。
- 第8级,你开始使用 AI任务编排器,让计算机管理并行的多个 AI 编程。
以上就是 AI 编程的8个级别,你是第几级?扪心自问,我还没摸到 AI 编程的大门啊!为了不落伍,我决定玩一下最近很火的 Claude Code。
安装 Claude Code
安装命令很简单:
npm install -g @anthropic-ai/claude-code
获取 API Key
最初想的是去 Xian Fish 上买个 API Key,看了下感觉不是很靠谱,后来找到了 moacode 这个中转站,付费12$+ 订阅了一个的,然后生成了 API Key ,安装 moacode 后自动完成 Claude Code 的中转配置后,可以正常启动 Claude 了:
准备初始版本
之前一直想做一个周易卜卦小程序,最简单的 html 网页版的,然后开始用 Claude Code 进行程序完善。原始建议代码如下:
<div class="container">
<div class="input-section">
<h1 class="title">易经卜卦小工具</h1>
<div class="input-group">
<label for="num1">请输入第一个3位数:</label>
<input type="number" id="num1" placeholder="例如:123" min="100" max="999">
</div>
<div class="input-group">
<label for="num2">请输入第二个3位数:</label>
<input type="number" id="num2" placeholder="例如:456" min="100" max="999">
</div>
<div class="input-group">
<label for="num3">请输入第三个3位数:</label>
<input type="number" id="num3" placeholder="例如:789" min="100" max="999">
</div>
<button class="button" onclick="calculate()">开始计算</button>
</div>
<div class="output-section">
<h2>计算结果</h2>
<div class="result" id="result">请在左侧输入数字后点击计算</div>
</div>
</div>
<script src="gua.js"></script>
<script>
// 计算模运算
function calculate() {
const num1 = parseInt(document.getElementById('num1').value);
const num2 = parseInt(document.getElementById('num2').value);
const num3 = parseInt(document.getElementById('num3').value);
// 验证输入是否为三位数
if (isNaN(num1) || isNaN(num2) || isNaN(num3) ||
num1 < 100 || num1 > 999 ||
num2 < 100 || num2 > 999 ||
num3 < 100 || num3 > 999) {
alert('请输入有效的3位数!');
return;
}
// 第一个数模8
let result1 = num1 % 8;
// 第二个数模8
let result2 = num2 % 8;
// 第三个数模6,模为0则设置为6
let result3 = num3 % 6;
if (result1 == 0) result1 = 7;
if (result2 == 0) result2 = 7;
if (result3 === 0) result3 = 6;
// 卦序号
const configMap = ['乾', '兑', '离', '震', '巽', '坎', '艮', '坤']
const up = configMap[result1];
const down = configMap[result2];
// 显示结果
const target = findTarget(up, down);
const output = `卜卦结果:<br>
上卦:${up}<br>
下卦:${down}<br>
变爻:${result3}<br>
主卦:${target.name}<br>
变卦:${result3}<br>`;
// 这里可以根据余数添加易经卦象解释
const interpretation = getInterpretation(result1, result2, result3);
document.getElementById('result').innerHTML = output + '<br>' + interpretation;
}
// 示例解释函数(可自行扩展)
function getInterpretation(r1, r2, r3, target) {
// 这里仅提供一个简单的占位示例
return `卦象解释(示例):<br>
余数 ${r1} 表示...<br>
余数 ${r2} 表示...<br>
余数 ${r3} 表示...<br>`;
}
</script>
</body>
</html>
输入提示命令
这个简易程序只能输出三个三位数对应的上卦、下卦、变爻,我希望完善如下功能:
- 输出每个卦的卦辞。
- 输出每个爻的爻辞。
- 画出每个卦的每一爻。
- 画出变卦的每一爻。
Step 1,开始输入任务命令:
read /Applications/2026NewYear/AICode/yijing.html and continue code:

Step 2,输入优化需求:
the code output should divide two parts,first part is text ,second is
image. The target variable 's content, up and down attribute to draw, if
'阴' draw -- , if '阳' draw '——'

真的一分钟不到,画出了每一卦的每一爻,继续阴爻用红色,阳爻用黑色:
modify drawHexagram funciton if '阳' draw line with balck color, else
draw with red color

Step3,绘制出的变爻样式挤压了左侧的样式,继续调整:
modify drawHexagram funciton if (isChanging) style '← 变爻' float right
to make the left align to upper element.

Step4,输出卦辞:
modify textOutput added the description of the target 卦


Step5,继续打印每个爻的爻辞:
modify drawHexagram add the description of every 爻辞

Step6,变卦绘制出的爻的顺序反了,继续修正:
modify 变爻 position , from down to up, for example 6, should draw it in
the top first

Step7,修复有问题,回到上一个版本:
It's wrong.Please restore the last second version.
最终差不多可用的源码为:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>易经卜卦小工具</title>
<style>
body {
font-family: 'Microsoft YaHei', Arial, sans-serif;
margin: 0;
padding: 20px;
background: #f5f5f5;
}
.container {
max-width: 1200px;
margin: 0 auto;
background: #fff;
padding: 30px;
border-radius: 12px;
box-shadow: 0 4px 30px rgba(0,0,0,0.1);
display: flex;
gap: 30px;
flex-wrap: wrap;
}
.input-section, .output-section {
flex: 1;
min-width: 300px;
}
.title {
text-align: center;
color: #333;
margin-bottom: 30px;
width: 100%;
}
.input-group {
margin-bottom: 20px;
}
.input-group label {
display: block;
margin-bottom: 8px;
color: #555;
}
.input-group input {
width: 80%;
padding: 12px;
font-size: 16px;
border: 2px solid #ddd;
border-radius: 6px;
transition: border-color 0.3s;
}
.input-group input:focus {
border-color: #4a90e2;
outline: none;
}
.button {
width: 80%;
padding: 12px;
background: #4a90e2;
color: #fff;
border: none;
border-radius: 6px;
font-size: 18px;
cursor: pointer;
transition: background 0.3s;
}
.button:hover {
background: #357ab8;
}
.result {
margin-top: 10px;
padding: 20px;
background: #e8f4ff;
border-radius: 6px;
line-height: 1.6;
min-height: 300px;
}
.output-section {
display: flex;
flex-direction: column;
}
</style>
</head>
<body>
<div class="container">
<div class="input-section">
<h1 class="title">易经卜卦小工具</h1>
<p>请先默念你的问题,例如:最近我的时运如何?</p>
<p>接着,准备此刻出现在身边的三个随机的三位数,随机出现的此刻的时间、马路上飞去的车牌号、刚刚来电……</p>
<div class="input-group">
<label for="num1">请输入第一个3位数:</label>
<input type="number" id="num1" placeholder="" min="100" max="999">
</div>
<div class="input-group">
<label for="num2">请输入第二个3位数:</label>
<input type="number" id="num2" placeholder="" min="100" max="999">
</div>
<div class="input-group">
<label for="num3">请输入第三个3位数:</label>
<input type="number" id="num3" placeholder="" min="100" max="999">
</div>
<button class="button" onclick="calculate()">计算</button>
</div>
<div class="output-section">
<h2>计算结果</h2>
<div class="result" id="result">请在左侧输入数字后点击计算</div>
</div>
</div>
<script>
// 八卦基础数据:每个卦由三爻组成
const trigramData = {
'' : [],
'乾': ['阳', '阳', '阳'],
'兑': ['阴', '阳', '阳'],
'离': ['阳', '阴', '阳'],
'震': ['阴', '阴', '阳'],
'巽': ['阳', '阳', '阴'],
'坎': ['阴', '阳', '阴'],
'艮': ['阳', '阴', '阴'],
'坤': ['阴', '阴', '阴']
};
// 六十四卦数据:上卦+下卦组合
const hexagramData = {
'': {},
'乾乾': { name: '乾为天', number: 1, desc: '元亨利贞。刚健中正,自强不息。大吉大利。' },
'乾兑': { name: '天泽履', number: 10, desc: '履虎尾,不咥人,亨。谨慎行事,以礼待人。' },
'乾离': { name: '天火同人', number: 13, desc: '同人于野,亨。与人和同,公正无私。' },
'乾震': { name: '天雷无妄', number: 25, desc: '无妄,元亨利贞。顺应天道,不可妄为。' },
'乾巽': { name: '天风姤', number: 44, desc: '姤,女壮,勿用取女。阴气始生,防微杜渐。' },
'乾坎': { name: '天水讼', number: 6, desc: '讼,有孚窒惕,中吉,终凶。争讼之象,宜和不宜争。' },
'乾艮': { name: '天山遁', number: 33, desc: '遁,亨,小利贞。退守为宜,远离小人。' },
'乾坤': { name: '天地否', number: 12, desc: '否之匪人,不利君子贞。天地不交,闭塞不通。' },
'兑乾': { name: '泽天夬', number: 43, desc: '夬,扬于王庭。决断果敢,刚决柔邪。' },
'兑兑': { name: '兑为泽', number: 58, desc: '兑,亨,利贞。喜悦和悦,内刚外柔。' },
'兑离': { name: '泽火革', number: 49, desc: '革,已日乃孚,元亨利贞。变革除旧,顺应时势。' },
'兑震': { name: '泽雷随', number: 17, desc: '随,元亨利贞,无咎。随时而动,顺势而为。' },
'兑巽': { name: '泽风大过', number: 28, desc: '大过,栋桡,利有攸往。大有过度,刚柔失衡。' },
'兑坎': { name: '泽水困', number: 47, desc: '困,亨,贞,大人吉,无咎。困境之中,坚守正道。' },
'兑艮': { name: '泽山咸', number: 31, desc: '咸,亨,利贞,取女吉。感应相通,和合美满。' },
'兑坤': { name: '泽地萃', number: 45, desc: '萃,亨,王假有庙。聚集团结,共同进取。' },
'离乾': { name: '火天大有', number: 14, desc: '大有,元亨。丰收富有,光明正大。' },
'离兑': { name: '火泽睽', number: 38, desc: '睽,小事吉。乖离分别,求同存异。' },
'离离': { name: '离为火', number: 30, desc: '离,利贞,亨。附丽光明,柔顺中正。' },
'离震': { name: '火雷噬嗑', number: 21, desc: '噬嗑,亨,利用狱。刚柔相济,断狱得当。' },
'离巽': { name: '火风鼎', number: 50, desc: '鼎,元吉,亨。革故鼎新,巩固成果。' },
'离坎': { name: '火水未济', number: 64, desc: '未济,亨,小狐汔济。事未成功,谨慎前行。' },
'离艮': { name: '火山旅', number: 56, desc: '旅,小亨,旅贞吉。漂泊在外,谨慎行事。' },
'离坤': { name: '火地晋', number: 35, desc: '晋,康侯用锡马蕃庶。光明上进,前途光明。' },
'震乾': { name: '雷天大壮', number: 34, desc: '大壮,利贞。阳气强盛,正大光明。' },
'震兑': { name: '雷泽归妹', number: 54, desc: '归妹,征凶,无攸利。少女出嫁,慎始慎终。' },
'震离': { name: '雷火丰', number: 55, desc: '丰,亨,王假之。丰盛隆盛,盛极而衰当防。' },
'震震': { name: '震为雷', number: 51, desc: '震,亨。震惊百里,惊恐之后得安宁。' },
'震巽': { name: '雷风恒', number: 32, desc: '恒,亨,无咎,利贞。持之以恒,长久不变。' },
'震坎': { name: '雷水解', number: 40, desc: '解,利西南。解除困难,化险为夷。' },
'震艮': { name: '雷山小过', number: 62, desc: '小过,亨,利贞。小有过越,宜守不宜进。' },
'震坤': { name: '雷地豫', number: 16, desc: '豫,利建侯行师。和乐安豫,顺势而为。' },
'巽乾': { name: '风天小畜', number: 9, desc: '小畜,亨。密云不雨,蓄积待时。' },
'巽兑': { name: '风泽中孚', number: 61, desc: '中孚,豚鱼吉。诚信立身,感化于人。' },
'巽离': { name: '风火家人', number: 37, desc: '家人,利女贞。治家有道,各正其位。' },
'巽震': { name: '风雷益', number: 42, desc: '益,利有攸往。增益获利,损上益下。' },
'巽巽': { name: '巽为风', number: 57, desc: '巽,小亨,利有攸往。柔顺谦逊,随风而行。' },
'巽坎': { name: '风水涣', number: 59, desc: '涣,亨,王假有庙。离散消解,重整旗鼓。' },
'巽艮': { name: '风山渐', number: 53, desc: '渐,女归吉,利贞。循序渐进,稳步发展。' },
'巽坤': { name: '风地观', number: 20, desc: '观,盥而不荐。观察思考,以身作则。' },
'坎乾': { name: '水天需', number: 5, desc: '需,有孚,光亨,贞吉。等待时机,诚信守正。' },
'坎兑': { name: '水泽节', number: 60, desc: '节,亨,苦节不可贞。节制有度,过犹不及。' },
'坎离': { name: '水火既济', number: 63, desc: '既济,亨小,利贞。功成之时,防患未然。' },
'坎震': { name: '水雷屯', number: 3, desc: '屯,元亨利贞。万物始生,艰难开创。' },
'坎巽': { name: '水风井', number: 48, desc: '井,改邑不改井。供养不穷,生生不息。' },
'坎坎': { name: '坎为水', number: 29, desc: '习坎,有孚,维心亨。险中求通,坚守信念。' },
'坎艮': { name: '水山蹇', number: 39, desc: '蹇,利西南,不利东北。艰难险阻,进退维谷。' },
'坎坤': { name: '水地比', number: 8, desc: '比,吉。亲密和睦,辅助相依。' },
'艮乾': { name: '山天大畜', number: 26, desc: '大畜,利贞,不家食吉。积蓄养德,厚积薄发。' },
'艮兑': { name: '山泽损', number: 41, desc: '损,有孚,元吉,无咎。减损盈余,损上益下。' },
'艮离': { name: '山火贲', number: 22, desc: '贲,亨,小利有攸往。文饰华美,形式与内容并重。' },
'艮震': { name: '山雷颐', number: 27, desc: '颐,贞吉。颐养生息,慎言节食。' },
'艮巽': { name: '山风蛊', number: 18, desc: '蛊,元亨,利涉大川。治理弊端,革故鼎新。' },
'艮坎': { name: '山水蒙', number: 4, desc: '蒙,亨。启蒙教育,去蒙开智。' },
'艮艮': { name: '艮为山', number: 52, desc: '艮,艮其背,不获其身。止于所当止,适可而止。' },
'艮坤': { name: '山地剥', number: 23, desc: '剥,不利有攸往。剥落消减,阴盛阳衰。' },
'坤乾': { name: '地天泰', number: 11, desc: '泰,小往大来,吉亨。天地交泰,通达顺畅。' },
'坤兑': { name: '地泽临', number: 19, desc: '临,元亨利贞。君临天下,刚柔相济。' },
'坤离': { name: '地火明夷', number: 36, desc: '明夷,利艰贞。光明受损,韬光养晦。' },
'坤震': { name: '地雷复', number: 24, desc: '复,亨。阳气复归,反本还原。' },
'坤巽': { name: '地风升', number: 46, desc: '升,元亨,用见大人。上升发展,循序渐进。' },
'坤坎': { name: '地水师', number: 7, desc: '师,贞,丈人吉,无咎。统帅军众,以正治乱。' },
'坤艮': { name: '地山谦', number: 15, desc: '谦,亨,君子有终。谦逊有礼,美德无疆。' },
'坤坤': { name: '坤为地', number: 2, desc: '元亨,利牝马之贞。柔顺承载,厚德载物。' }
};
// 爻辞数据:每个卦的六爻描述(从下到上:初爻、二爻、三爻、四爻、五爻、上爻)
const yaoDescriptions = {
'乾为天': ['初九:潜龙勿用', '九二:见龙在田,利见大人', '九三:君子终日乾乾,夕惕若厉,无咎', '九四:或跃在渊,无咎', '九五:飞龙在天,利见大人', '上九:亢龙有悔'],
'坤为地': ['初六:履霜,坚冰至', '六二:直方大,不习无不利', '六三:含章可贞,或从王事,无成有终', '六四:括囊,无咎无誉', '六五:黄裳,元吉', '上六:龙战于野,其血玄黄'],
'水雷屯': ['初九:磐桓,利居贞', '六二:屯如邅如,乘马班如', '六三:即鹿无虞,惟入于林中', '六四:乘马班如,求婚媾', '九五:屯其膏,小贞吉,大贞凶', '上六:乘马班如,泣血涟如'],
'山水蒙': ['初六:发蒙,利用刑人', '九二:包蒙,吉', '六三:勿用取女,见金夫', '六四:困蒙,吝', '六五:童蒙,吉', '上九:击蒙,不利为寇'],
'水天需': ['初九:需于郊,利用恒,无咎', '九二:需于沙,小有言,终吉', '九三:需于泥,致寇至', '六四:需于血,出自穴', '九五:需于酒食,贞吉', '上六:入于穴,有不速之客三人来'],
'天水讼': ['初六:不永所事,小有言,终吉', '九二:不克讼,归而逋', '六三:食旧德,贞厉,终吉', '九四:不克讼,复即命渝', '九五:讼,元吉', '上九:或锡之鞶带,终朝三褫之'],
'地水师': ['初六:师出以律,否臧凶', '九二:在师中,吉,无咎', '六三:师或舆尸,凶', '六四:师左次,无咎', '六五:田有禽,利执言,无咎', '上六:大君有命,开国承家'],
'水地比': ['初六:有孚比之,无咎', '六二:比之自内,贞吉', '六三:比之匪人', '六四:外比之,贞吉', '九五:显比,王用三驱', '上六:比之无首,凶'],
'风天小畜': ['初九:复自道,何其咎,吉', '九二:牵复,吉', '九三:舆说辐,夫妻反目', '六四:有孚,血去惕出,无咎', '九五:有孚挛如,富以其邻', '上九:既雨既处,尚德载'],
'天泽履': ['初九:素履,往无咎', '九二:履道坦坦,幽人贞吉', '六三:眇能视,跛能履', '九四:履虎尾,愬愬终吉', '九五:夬履,贞厉', '上九:视履考祥,其旋元吉'],
'地天泰': ['初九:拔茅茹,以其汇,征吉', '九二:包荒,用冯河', '九三:无平不陂,无往不复', '六四:翩翩,不富以其邻', '六五:帝乙归妹,以祉元吉', '上六:城复于隍,勿用师'],
'天地否': ['初六:拔茅茹,以其汇,贞吉亨', '六二:包承,小人吉,大人否亨', '六三:包羞', '九四:有命无咎,畴离祉', '九五:休否,大人吉', '上九:倾否,先否后喜'],
'天火同人': ['初九:同人于门,无咎', '六二:同人于宗,吝', '九三:伏戎于莽,升其高陵', '九四:乘其墉,弗克攻,吉', '九五:同人先号啕而后笑', '上九:同人于郊,无悔'],
'火天大有': ['初九:无交害,匪咎', '九二:大车以载,有攸往,无咎', '九三:公用亨于天子,小人弗克', '九四:匪其彭,无咎', '六五:厥孚交如,威如,吉', '上九:自天祐之,吉无不利'],
'地山谦': ['初六:谦谦君子,用涉大川,吉', '六二:鸣谦,贞吉', '九三:劳谦,君子有终,吉', '六四:无不利,撝谦', '六五:不富以其邻,利用侵伐', '上六:鸣谦,利用行师'],
'雷地豫': ['初六:鸣豫,凶', '六二:介于石,不终日,贞吉', '六三:盱豫,悔', '九四:由豫,大有得', '六五:贞疾,恒不死', '上六:冥豫,成有渝无咎'],
'泽雷随': ['初九:官有渝,贞吉', '六二:系小子,失丈夫', '六三:系丈夫,失小子', '九四:随有获,贞凶', '九五:孚于嘉,吉', '上六:拘系之,乃从维之'],
'山风蛊': ['初六:干父之蛊,有子考无咎', '九二:干母之蛊,不可贞', '九三:干父之蛊,小有悔,无大咎', '六四:裕父之蛊,往见吝', '六五:干父之蛊,用誉', '上九:不事王侯,高尚其事'],
'地泽临': ['初九:咸临,贞吉', '九二:咸临,吉,无不利', '六三:甘临,无攸利', '六四:至临,无咎', '六五:知临,大君之宜,吉', '上六:敦临,吉,无咎'],
'风地观': ['初六:童观,小人无咎', '六二:窥观,利女贞', '六三:观我生,进退', '六四:观国之光,利用宾于王', '九五:观我生,君子无咎', '上九:观其生,君子无咎'],
'火雷噬嗑': ['初九:屦校灭趾,无咎', '六二:噬肤灭鼻,无咎', '六三:噬腊肉,遇毒', '九四:噬干胏,得金矢', '六五:噬干肉,得黄金', '上九:何校灭耳,凶'],
'山火贲': ['初九:贲其趾,舍车而徒', '六二:贲其须', '九三:贲如濡如,永贞吉', '六四:贲如皤如,白马翰如', '六五:贲于丘园,束帛戋戋', '上九:白贲,无咎'],
'山地剥': ['初六:剥床以足,蔑贞凶', '六二:剥床以辨,蔑贞凶', '六三:剥之,无咎', '六四:剥床以肤,凶', '六五:贯鱼,以宫人宠', '上九:硕果不食,君子得舆'],
'地雷复': ['初九:不远复,无祗悔,元吉', '六二:休复,吉', '六三:频复,厉无咎', '六四:中行独复', '六五:敦复,无悔', '上六:迷复,凶,有灾眚'],
'天雷无妄': ['初九:无妄,往吉', '六二:不耕获,不菑畬', '六三:无妄之灾,或系之牛', '九四:可贞,无咎', '九五:无妄之疾,不药有喜', '上九:无妄,行有眚,无攸利'],
'山天大畜': ['初九:有厉利已', '九二:舆说輹', '九三:良马逐,利艰贞', '六四:童牛之牿,元吉', '六五:豮豕之牙,吉', '上九:何天之衢,亨'],
'山雷颐': ['初九:舍尔灵龟,观我朵颐,凶', '六二:颠颐,拂经,于丘颐', '六三:拂颐,贞凶', '六四:颠颐,吉', '六五:拂经,居贞吉', '上九:由颐,厉吉'],
'泽风大过': ['初六:藉用白茅,无咎', '九二:枯杨生稊,老夫得其女妻', '九三:栋桡,凶', '九四:栋隆,吉', '九五:枯杨生华,老妇得其士夫', '上六:过涉灭顶,凶,无咎'],
'坎为水': ['初六:习坎,入于坎窞,凶', '九二:坎有险,求小得', '六三:来之坎坎,险且枕', '六四:樽酒簋贰,用缶', '九五:坎不盈,祗既平,无咎', '上六:系用徽纆,寘于丛棘'],
'离为火': ['初九:履错然,敬之无咎', '六二:黄离,元吉', '九三:日昃之离,不鼓缶而歌', '九四:突如其来如,焚如,死如', '六五:出涕沱若,戚嗟若,吉', '上九:王用出征,有嘉折首'],
'泽山咸': ['初六:咸其拇', '六二:咸其腓,凶,居吉', '九三:咸其股,执其随,往吝', '九四:贞吉,悔亡', '九五:咸其脢,无悔', '上六:咸其辅颊舌'],
'雷风恒': ['初六:浚恒,贞凶,无攸利', '九二:悔亡', '九三:不恒其德,或承之羞', '九四:田无禽', '六五:恒其德,贞', '上六:振恒,凶'],
'天山遁': ['初六:遁尾,厉,勿用有攸往', '六二:执之用黄牛之革', '九三:系遁,有疾厉', '九四:好遁,君子吉,小人否', '九五:嘉遁,贞吉', '上九:肥遁,无不利'],
'雷天大壮': ['初九:壮于趾,征凶,有孚', '九二:贞吉', '九三:小人用壮,君子用罔', '九四:贞吉,悔亡', '六五:丧羊于易,无悔', '上六:羝羊触藩,不能退'],
'火地晋': ['初六:晋如摧如,贞吉', '六二:晋如愁如,贞吉', '六三:众允,悔亡', '九四:晋如鼫鼠,贞厉', '六五:悔亡,失得勿恤', '上九:晋其角,维用伐邑'],
'地火明夷': ['初九:明夷于飞,垂其翼', '六二:明夷,夷于左股', '九三:明夷于南狩,得其大首', '六四:入于左腹,获明夷之心', '六五:箕子之明夷,利贞', '上六:不明晦,初登于天'],
'风火家人': ['初九:闲有家,悔亡', '六二:无攸遂,在中馈,贞吉', '九三:家人嗃嗃,悔厉吉', '六四:富家,大吉', '九五:王假有家,勿恤吉', '上九:有孚威如,终吉'],
'火泽睽': ['初九:悔亡,丧马勿逐,自复', '九二:遇主于巷,无咎', '六三:见舆曳,其牛掣', '九四:睽孤,遇元夫', '六五:悔亡,厥宗噬肤', '上九:睽孤,见豕负涂'],
'水山蹇': ['初六:往蹇来誉', '六二:王臣蹇蹇,匪躬之故', '九三:往蹇来反', '六四:往蹇来连', '九五:大蹇朋来', '上六:往蹇来硕,吉'],
'雷水解': ['初六:无咎', '九二:田获三狐,得黄矢', '六三:负且乘,致寇至', '九四:解而拇,朋至斯孚', '六五:君子维有解,吉', '上六:公用射隼于高墉之上'],
'山泽损': ['初九:已事遄往,无咎', '九二:利贞,征凶', '六三:三人行则损一人', '六四:损其疾,使遄有喜', '六五:或益之十朋之龟', '上九:弗损益之,无咎'],
'风雷益': ['初九:利用为大作,元吉,无咎', '六二:或益之十朋之龟', '六三:益之用凶事,无咎', '六四:中行,告公从', '九五:有孚惠心,勿问元吉', '上九:莫益之,或击之'],
'泽天夬': ['初九:壮于前趾,往不胜为咎', '九二:惕号,莫夜有戎,勿恤', '九三:壮于頄,有凶', '九四:臀无肤,其行次且', '九五:苋陆夬夬,中行无咎', '上六:无号,终有凶'],
'天风姤': ['初六:系于金柅,贞吉', '九二:包有鱼,无咎,不利宾', '九三:臀无肤,其行次且', '九四:包无鱼,起凶', '九五:以杞包瓜,含章', '上九:姤其角,吝,无咎'],
'泽地萃': ['初六:有孚不终,乃乱乃萃', '六二:引吉,无咎', '六三:萃如嗟如,无攸利', '九四:大吉,无咎', '九五:萃有位,无咎', '上六:赍咨涕洟,无咎'],
'地风升': ['初六:允升,大吉', '九二:孚乃利用禴,无咎', '九三:升虚邑', '六四:王用亨于岐山,吉无咎', '六五:贞吉,升阶', '上六:冥升,利于不息之贞'],
'泽水困': ['初六:臀困于株木,入于幽谷', '九二:困于酒食,朱绂方来', '六三:困于石,据于蒺藜', '九四:来徐徐,困于金车', '九五:劓刖,困于赤绂', '上六:困于葛藟,于臲卼'],
'水风井': ['初六:井泥不食,旧井无禽', '九二:井谷射鲋,瓮敝漏', '九三:井渫不食,为我心恻', '六四:井甃,无咎', '九五:井冽,寒泉食', '上六:井收勿幕,有孚元吉'],
'泽火革': ['初九:巩用黄牛之革', '六二:己日乃革之,征吉,无咎', '九三:征凶,贞厉', '九四:悔亡,有孚改命,吉', '九五:大人虎变,未占有孚', '上六:君子豹变,小人革面'],
'火风鼎': ['初六:鼎颠趾,利出否', '九二:鼎有实,我仇有疾', '九三:鼎耳革,其行塞', '九四:鼎折足,覆公餗', '六五:鼎黄耳金铉,利贞', '上九:鼎玉铉,大吉,无不利'],
'震为雷': ['初九:震来虩虩,后笑言哑哑', '六二:震来厉,亿丧贝', '六三:震苏苏,震行无眚', '九四:震遂泥', '六五:震往来厉,亿无丧', '上六:震索索,视矍矍'],
'艮为山': ['初六:艮其趾,无咎,利永贞', '六二:艮其腓,不拯其随', '九三:艮其限,列其夤', '六四:艮其身,无咎', '六五:艮其辅,言有序', '上九:敦艮,吉'],
'风山渐': ['初六:鸿渐于干,小子厉', '六二:鸿渐于磐,饮食衎衎', '九三:鸿渐于陆,夫征不复', '六四:鸿渐于木,或得其桷', '九五:鸿渐于陵,妇三岁不孕', '上九:鸿渐于陆,其羽可用为仪'],
'雷泽归妹': ['初九:归妹以娣,跛能履', '九二:眇能视,利幽人之贞', '六三:归妹以须,反归以娣', '九四:归妹愆期,迟归有时', '六五:帝乙归妹,其君之袂', '上六:女承筐无实,士刲羊无血'],
'雷火丰': ['初九:遇其配主,虽旬无咎', '六二:丰其蔀,日中见斗', '九三:丰其沛,日中见沫', '九四:丰其蔀,日中见斗', '六五:来章,有庆誉,吉', '上六:丰其屋,蔀其家'],
'火山旅': ['初六:旅琐琐,斯其所取灾', '六二:旅即次,怀其资', '九三:旅焚其次,丧其童仆', '九四:旅于处,得其资斧', '六五:射雉一矢亡,终以誉命', '上九:鸟焚其巢,旅人先笑后号啕'],
'巽为风': ['初六:进退,利武人之贞', '九二:巽在床下,用史巫纷若', '九三:频巽,吝', '六四:悔亡,田获三品', '九五:贞吉,悔亡,无不利', '上九:巽在床下,丧其资斧'],
'兑为泽': ['初九:和兑,吉', '九二:孚兑,吉,悔亡', '六三:来兑,凶', '九四:商兑未宁,介疾有喜', '九五:孚于剥,有厉', '上六:引兑'],
'风水涣': ['初六:用拯马壮,吉', '九二:涣奔其机,悔亡', '六三:涣其躬,无悔', '六四:涣其群,元吉', '九五:涣汗其大号,涣王居', '上九:涣其血,去逖出,无咎'],
'水泽节': ['初九:不出户庭,无咎', '九二:不出门庭,凶', '六三:不节若,则嗟若', '六四:安节,亨', '九五:甘节,吉', '上六:苦节,贞凶,悔亡'],
'风泽中孚': ['初九:虞吉,有它不燕', '九二:鸣鹤在阴,其子和之', '六三:得敌,或鼓或罢', '六四:月几望,马匹亡,无咎', '九五:有孚挛如,无咎', '上九:翰音登于天,贞凶'],
'雷山小过': ['初六:飞鸟以凶', '六二:过其祖,遇其妣', '九三:弗过防之,从或戕之', '九四:无咎,弗过遇之', '六五:密云不雨,自我西郊', '上六:弗遇过之,飞鸟离之'],
'水火既济': ['初九:曳其轮,濡其尾,无咎', '六二:妇丧其茀,勿逐,七日得', '九三:高宗伐鬼方,三年克之', '六四:繻有衣袽,终日戒', '九五:东邻杀牛,不如西邻之禴祭', '上六:濡其首,厉'],
'火水未济': ['初六:濡其尾,吝', '九二:曳其轮,贞吉', '六三:未济,征凶', '九四:贞吉,悔亡', '九五:贞吉,无悔', '上九:有孚于饮酒,无咎']
};
// 查找卦象
function findTarget(up, down) {
const key = up + down;
const hexagram = hexagramData[key];
if (hexagram) {
return {
name: hexagram.name,
number: hexagram.number,
desc: hexagram.desc,
up: trigramData[up],
down: trigramData[down]
};
}
return null;
}
// 绘制卦象
function drawHexagram(target, changePosition) {
let html = '<div style="text-align: center; margin-top: 20px;">';
// 组合六爻(下卦在前,上卦在后)
// 数组顺序:[position1, position2, position3, position4, position5, position6]
const lines = [...target.down, ...target.up];
// 获取爻辞
const yaoTexts = yaoDescriptions[target.name] || [];
// 从上到下绘制(第6爻到第1爻)
for (let i = lines.length - 1; i >= 0; i--) {
const line = lines[i];
const position = i + 1; // 位置从下往上:1(初爻)在底,6(上爻)在顶
const isChanging = (position === changePosition);
const yaoText = yaoTexts[i] || '';
html += '<div style="margin: 12px 0; display: flex; flex-direction: column; align-items: center;">';
// 爻的图形和标记
html += '<div style="display: flex; align-items: center; justify-content: center; gap: 10px;">';
html += '<div style="width: 200px; text-align: center;">';
if (line === '阳') {
html += '<span style="display: inline-block; width: 200px; height: 8px; background: #333; border-radius: 2px;"></span>';
} else {
html += '<span style="display: inline-block; width: 90px; height: 8px; background: #e74c3c; border-radius: 2px; margin-right: 20px;"></span>';
html += '<span style="display: inline-block; width: 90px; height: 8px; background: #e74c3c; border-radius: 2px;"></span>';
}
html += '</div>';
// 固定宽度的标记区域,确保对齐
html += '<div style="width: 80px; text-align: left;">';
if (isChanging) {
html += '<span style="color: red; font-size: 18px;">← 变爻</span>';
}
html += '</div>';
html += '</div>';
// 爻辞
if (yaoText) {
html += '<div style="font-size: 14px; color: #666; margin-top: 5px; font-weight: normal;">' + yaoText + '</div>';
}
html += '</div>';
}
html += '</div>';
return html;
}
// 计算变卦
function getChangedHexagram(target, changePosition) {
const lines = [...target.down, ...target.up];
// 变爻:阳变阴,阴变阳
const changedLines = lines.map((line, index) => {
const position = index + 1;
if (position === changePosition) {
return line === '阳' ? '阴' : '阳';
}
return line;
});
// 新的上下卦
const newDown = changedLines.slice(0, 3);
const newUp = changedLines.slice(3, 6);
// 查找对应的卦名
for (let upName in trigramData) {
const upPattern = trigramData[upName].slice().reverse(); // 反转以匹配从下到上的顺序
if (JSON.stringify(upPattern) === JSON.stringify(newUp)) {
for (let downName in trigramData) {
const downPattern = trigramData[downName].slice().reverse(); // 反转以匹配从下到上的顺序
if (JSON.stringify(downPattern) === JSON.stringify(newDown)) {
const key = upName + downName; // 上卦+下卦
return {
name: hexagramData[key]?.name || '未知卦',
desc: hexagramData[key]?.desc || '',
up: newUp,
down: newDown
};
}
}
}
}
return null;
}
// 计算模运算
function calculate() {
const num1 = parseInt(document.getElementById('num1').value);
const num2 = parseInt(document.getElementById('num2').value);
const num3 = parseInt(document.getElementById('num3').value);
// 验证输入是否为三位数
if (isNaN(num1) || isNaN(num2) || isNaN(num3) ||
num1 < 100 || num1 > 999 ||
num2 < 100 || num2 > 999 ||
num3 < 100 || num3 > 999) {
alert('请输入有效的3位数!');
return;
}
// 第一个数模8
let result1 = num1 % 8;
// 第二个数模8
let result2 = num2 % 8;
// 第三个数模6,模为0则设置为6
let result3 = num3 % 6;
if (result1 == 0) result1 = 8;
if (result2 == 0) result2 = 8;
if (result3 === 0) result3 = 6;
// 卦序号(索引从1开始,0 为空)
const configMap = ['', '乾', '兑', '离', '震', '巽', '坎', '艮', '坤'];
const up = configMap[result1];
const down = configMap[result2];
// 显示结果
const target = findTarget(up, down);
if (!target) {
alert('卦象计算错误!');
return;
}
// 计算变卦
const changedHexagram = getChangedHexagram(target, result3);
// 第一部分:文字信息
const textOutput = `
<div style="background: #fff; padding: 15px; border-radius: 8px; margin-bottom: 20px;">
<p><strong>输入数字:</strong>${num1}, ${num2}, ${num3}</p>
<p><strong>上卦:</strong>${up}(${result1})</p>
<p><strong>下卦:</strong>${down}(${result2})</p>
<p><strong>变爻:</strong>第 ${result3} 爻</p>
<hr style="border: none; border-top: 1px solid #ddd; margin: 15px 0;">
<p><strong>本卦:</strong>${target.name} (第${target.number}卦)</p>
<p style="color: #555; line-height: 1.8; margin-left: 20px;">${target.desc}</p>
<hr style="border: none; border-top: 1px solid #ddd; margin: 15px 0;">
<p><strong>变卦:</strong>${changedHexagram.name}</p>
<p style="color: #555; line-height: 1.8; margin-left: 20px;">${changedHexagram.desc}</p>
</div>
`;
// 第二部分:卦象图形
const imageOutput = `
<div style="background: #f9f9f9; padding: 20px; border-radius: 8px;">
<h3 style="color: #4a90e2; text-align: center; margin-top: 0;">本卦:${target.name}</h3>
${drawHexagram(target, result3)}
<h3 style="color: #4a90e2; text-align: center; margin-top: 30px;">变卦:${changedHexagram.name}</h3>
${drawHexagram(changedHexagram, 0)}
</div>
`;
document.getElementById('result').innerHTML = textOutput + imageOutput;
}
</script>
</body>
</html>
有兴趣的同学可以拷贝这个文件看看运行效果,对我来说,除了爻画的不太准,计算和内容输出都完全正确。
Step8,发布成一个 uTools 插件:
use /Applications/2026NewYear/AICode/Change file to create a Vue+Vite
Project plugin with /Applications/2026NewYear/AICode/yijing.html as
index.html



Step8,下载的八卦 logo 图片不是正方形,修正:
Please use /Applications/20240726Wang/utools-plugin-template/data/dist/yi
jing-plugin/logo.png to create 正方形的 logo file.

Step9 ,尺寸不符合 uTools 发布要求:
logo 图片尺寸建议不超过 256x256 像素, please change the logo.png to fit
the target size.

结果
以我这蹩脚的英文+中文,完成了一个 uTools 小工具,而且可以申请发布:
启示录
最终在花费了8$后,完成了一个初步版本:
其实程序还是有缺陷的,画的爻跟卦对不上,有时候对,有时候错:
这个山泽损卦,上卦的山,画成了震「仰盂」卦,等我自己有空了再细看吧。让我震惊的是,它竟然能把易经的64卦和384爻的所有信息汇总且正确,之前我还想着逐个输入每个爻的爻辞的呢!
写完本文后,导出 MD 文档,再继续提问:
Please check /Users/woodwang/Downloads/你是第几级 AI 编程?AI
编程小白学习笔记:生成一个周易应用.md file, 校对中文是否有错别字

完成校对后保存文件,就可以发布了!哎呀,我的个神,我要失业了!
更多推荐


所有评论(0)