C语言生成六十四卦

教育   2024-08-19 22:32   宁夏  

背景

古人展现了非凡的智慧,孕育了《易经》这一博大精深的经典之作。然而,多数人对《易经》的认知往往局限于其占卜的层面,误以为它仅仅是预测未来的工具。实则,《易经》蕴含了深刻的哲学思想、宇宙观以及道德伦理,是探讨自然法则、人生智慧与社会和谐的宝库。由于缺乏对其全面而系统的学习,我们往往难以窥见其全貌,错过了深入领略这一文化瑰宝精髓的机会。

见解

在我看来,《易经》不仅仅是一部运用简单符号的作品,它更深刻地阐述了做人做事的至高境界与态度。书中精髓如“天行健,君子以自强不息;地势坤,君子以厚德载物”,所传达的是对人生哲学的深邃思考。它教导我们,做人应效仿天地的精神:天以其刚健不息之态,激励君子不断自我超越,勇往直前;地以其深厚广袤之德,启示君子应胸怀宽广,包容万物。
古人的这种豪迈与远见,并非仅仅局限于向某个人或某类事物学习,而是将视野扩展至无垠的天地之间,从中汲取智慧与力量。这种超越个人的格局,体现了古人对宇宙、自然与人类社会的深刻理解与敬畏,也为我们的人生道路指明了方向。

六十四卦

六十四卦的精髓远超越其符号本身,核心在于人们如何深入解读这些卦象背后所蕴含的丰富哲学思想与智慧。每个卦象,由六个爻(阳爻与阴爻交织)精妙组合而成,更像是一部宇宙的微缩目录,其神奇之处在于能够跨越时空,将深邃的哲理以直观而富有象征意义的方式呈现。
与《答案之书》的随机性不同,六十四卦更像是一位智者的启示录,它邀请我们带着内心的疑问去探索,每一次解读都是一次心灵的对话与自我发现的旅程。我们或许在求解之前已有所预感,但卦象的指引往往能揭示出更深层次的理解与洞见,让我们的思考更加全面而深刻。
六十四卦不仅仅是一本答案之书,它是智慧的源泉,是引导我们洞察世间万物、领悟生命真谛的明灯。在每一次的解读中,我们都能感受到先贤的智慧之光,照亮前行的道路,让心灵在纷繁复杂的世界中找到宁静与方向。

就比如乾卦潜龙勿用,阳在下也。见龙在田,德施普也。终日乾乾,反复道也。或跃在渊,进无咎也。飞龙在天,大人造也。亢龙有悔,盈不可久也。可能看不懂具体说了个啥事情,我大致说一下我的见解。

潜龙勿用:此阶段犹如初生的幼龙,深潜于渊,力量尚未充盈,光芒亦未显露。它告诫我们,在个人能力、学识或事业基础尚未稳固之时,应保持谦逊与内敛,不宜过早张扬或急于求成。这是一种韬光养晦的智慧,通过不断积累与沉淀,为日后的腾飞蓄积力量。
见龙在田,德施普也:当龙逐渐成长,其才华与能力终于得以展现,如同被发现的千里马,在田野间自由驰骋。这不仅是个人的崭露头角,更是其德行与才能惠及周围,影响深远。此阶段强调了才华与品德并重的重要性,通过实际行动展现自我价值,赢得他人的认可与尊重。
终日乾乾,反复道也:当龙跃出水面,进入众人视线后,需保持高度的警觉与不懈的努力。终日勤勉,不断反省与修正自己的行为与道路,确保每一步都坚实有力。这不仅是对自我提升的追求,也是对周围环境的适应与融合,体现了持之以恒、精益求精的精神。
或跃在渊,进无咎也:在前进的道路上,难免会遇到挑战与考验,有时如跃入深渊般艰难。但只要保持正确的方向与坚定的信念,勇于尝试与突破,这些经历都将成为成长的助力,而非阻碍。此阶段教会我们勇敢面对困难,积极寻求解决之道,即使遭遇挫折也能从中汲取教训,继续前行。
飞龙在天,利见大人:经过不懈的努力与积累,龙终于翱翔于天际,成为万众瞩目的焦点。此时若能得遇德高望重的“大人”提携与指引,将如虎添翼,事业更上一层楼。这不仅是个人能力的极致展现,也是人际关系与智慧并重的体现。在此阶段,应珍惜机遇,以更加开阔的视野和更加高远的目标引领自己前行。
亢龙有悔,盈不可久也:然而,即使身处巅峰,也应时刻警惕“物极必反”的道理。过度的追求与膨胀往往会带来意想不到的灾难与悔恨。此阶段提醒我们要保持谦逊与自省之心,不骄不躁,适时调整自己的步伐与方向,以免因过度而失去平衡。在成功与荣耀面前保持清醒的头脑,方能长久地保持自己的优势与地位。
使用程序生成六十四卦
为了生成易经六十四卦,我的程序将执行以下步骤:
1. 使用随机数生成器生成一个0到63之间的整数,该整数代表了一个具体的卦象。
2. 将这个十进制数转换为一个六位的二进制字符串,每一位代表一个爻(0为阴爻,1为阳爻)。
3. 定义一个函数来遍历这个二进制字符串,并根据每一位的值绘制出对应的阴爻“--”或阳爻“—”,从而构建出完整的卦象。
4. 创建一个映射表,将六十四种二进制表示与易经的六十四卦名一一对应。通过查找这个映射表,根据步骤2中得到的二进制字符串获取对应的卦名。 
5. 最后,将生成的卦象和卦名输出或展示给用户。通过这种方式,我的程序能够简单高效地生成并展示易经的任意一个卦象及其卦名。
源码
///////////////////////////////////////////////////// 程序名称:卜卦人生// 编译环境:Mictosoft Visual Studio 2022, EasyX_20200315(beta)// 作  者:luoyh <2864292458@qq.com>// 最后修改:2024-8-19// 公 众 号:C语言研究//
#include <graphics.h>#include <conio.h>#include <stdio.h> #include <stdlib.h> #include <time.h>
void DrawYAO(int num, int x, int y); // 绘制爻void ISYD(int NUM); int Nums;void decimalToBinaryIntArray(int decimal, int binaryArray[6]);int generateRandomNumber(int min, int max);const char* yiJingGuaNames[64] ={ "坤为地","地雷复","地水师","地泽临", "地山谦","地火明夷","地风升","地天泰", "雷地豫","震为雷","雷水解","雷泽归妹", "雷山小过","雷火丰","雷风恒","雷天大壮", "水地比","水雷屯","坎为水","水泽节", "水山蹇","水火既济","水风井","水天需", "泽地萃","泽雷随","泽水困","兑为泽", "泽山咸","泽火革","泽风大过","泽天夬", "山地剥","山雷颐","山水蒙","山泽损", "艮为山","山火贲","山风蛊","山天大畜", "火地晋","火雷噬嗑","火水未济","火泽睽", "火山旅","离为火","火风鼎","火天大有", "风地观","风雷益","风水涣","风泽中孚", "风山渐","风火家人","巽为风","风天小畜", "天地否","天雷无妄","天水讼","天泽履", "天山遁","天火同人","天风姤","乾为天"};
int main(){ initgraph(640, 480); setbkcolor(WHITE); cleardevice(); srand(time(0)); ExMessage msg; // 定义一个鼠标消息 BeginBatchDraw(); flushmessage(); while (true) { peekmessage(&msg, EX_MOUSE); FlushBatchDraw(); cleardevice(); // 鼠标按下,开发摇动 if (msg.lbutton) { Nums = generateRandomNumber(0, 63); ISYD(Nums); } else { ISYD(Nums); } } return 0;}
void ISYD(int NUM){ settextcolor(BLACK); settextstyle(50, 0, _T("楷体")); setbkmode(TRANSPARENT); RECT r = { 0,0,640,120 }; drawtext(yiJingGuaNames[Nums], &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE); int binaryArray[6]; // 整数数组,但每个元素只存储一个二进制位 decimalToBinaryIntArray(NUM, binaryArray); for (int i = 5; i >= 0; i--) { DrawYAO(binaryArray[i], 220, 320 - i * 40); }}
int generateRandomNumber(int min, int max){ // 确保max大于等于min if (max < min) { int temp = min; min = max; max = temp; } // 使用rand()生成随机数,并通过取模确保结果在min到max之间 int random = rand() % (max - min + 1) + min; return random;}
void DrawYAO(int num, int x, int y){ setfillcolor(BLACK); if (num == 1) { solidrectangle(x, y, x + 200, y + 20); // 二进制为1时,绘制长实线 } if (num == 0) { solidrectangle(x, y, x + 100 - 10, y + 20); // 二进制为0时,绘制短实线 solidrectangle(x + 100 + 10, y, x + 200, y + 20); }}
// 将一个十进制数转换为二进制存储到数组中void decimalToBinaryIntArray(int decimal, int binaryArray[6]){ for (int i = 0; i < 6; i++) { // 从最低位开始填充 binaryArray[i] = decimal % 2; decimal /= 2; }}

效果

鼠标按下开始生成,鼠标抬起生成完成

C语言研究
写给自己的笔记,时常写写,时常看看,仅此而已。