背景

你是第几级 AI 编程?史蒂夫·耶格(Steve Yegge)是一个著名的美国程序员。这个月,他又发表了一篇最新文章,谈他对 AI 编程的看法。他说 AI 编程有8级,他已经到了第8级,也就是最高级。

  1. 第1级,还没有接触到 AI 编程,你的 IDE 还是正常的样子。
  2. 第2级,你在 IDE 装了 AI 插件,开启了侧边栏,AI 时不时提出代码建议,问你是否接受(Yes or No)。
  3. 第3级,你开始信任 AI 编程,进入了 YOLO 模式("你只活一次"模式,You Only Live Once)。为了节省时间精力,你不再逐条确认 AI 的建议,只要是 AI 生成出来的东西,你就一路按 Yes,统统接受。
  4. 第4级,AI 占据的屏幕宽度越来越大,手工编辑的代码区仅用于比对代码差异。
  5. 第5级,你索性不要代码区了,改用命令行(比如 Claude Code),所有的屏幕宽度都留给了 AI。你现在不看 AI的生成结果了,只看它的完成进度。
  6. 第6级,你觉得只用一个 AI 太慢,于是打开3到5个窗口,同时进行 AI 编程,加快速度。
  7. 第7级,同时打开的 AI 编程窗口到了10个以上,已经是你手工管理的极限了。
  8. 第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>

输入提示命令

这个简易程序只能输出三个三位数对应的上卦、下卦、变爻,我希望完善如下功能:

  1. 输出每个卦的卦辞。
  2. 输出每个爻的爻辞。
  3. 画出每个卦的每一爻。
  4. 画出变卦的每一爻。

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, 校对中文是否有错别字 

在这里插入图片描述
完成校对后保存文件,就可以发布了!哎呀,我的个神,我要失业了!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐