周易是个很深的话题,用来和文艺女青年们调侃或是打发一些单调的时间都是不错的选择。64卦的各个卦相与编号并没有一种简单的换算关系,因此需要通过软件来实现快速查找。
软件界面如上图所示,点击设置每一个“艾”(音),可以立刻得到相应的卦号和卦名。
两个关键类:Bar 和 BarGroup
package
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
public class Bar
{
public var box:MovieClip;
public var val:Number;
public function Bar( box:MovieClip)
{
// constructor code
this.box = box;
this.box.gotoAndStop(1);
this.box.addEventListener( MouseEvent.CLICK, onChange);
val = 1;
}
function onChange(evt:MouseEvent)
{
//change apperence of bar
if ( val == 1 )
{
box.gotoAndStop( 2);
val = 0;
}
else
{
box.gotoAndStop( 1);
val = 1;
}
}
}
}
package
{
import flash.events.MouseEvent;
import flash.display.MovieClip;
import Bar;
import flash.text.TextField;
public class BarGroup
{
public var dataList:Array;
public var barArr:Array;
public var ansBox:TextField;
public var eight:Array;
public var ansArr:Array;
public function BarGroup(dArr:Array,bArr:Array,aTxt:TextField,eight:Array,ansArr:Array)
{
// constructor code
dataList = dArr;
barArr = bArr;
ansBox = aTxt;
this.eight = eight;
this.ansArr = ansArr;
var n:Number = barArr.length;
for (var i =0; i< n; i++)
{
barArr[i].box.addEventListener(MouseEvent.CLICK, onSearch);
}
onSearch(null);
}
public function onSearch(evt:MouseEvent)
{
var row = barArr[2].val * 4 + barArr[1].val * 2 + barArr[0].val;
var col = barArr[5].val * 4 + barArr[4].val * 2 + barArr[3].val;
var s:String = eight[col] + "下" + eight[row] + "上\n";
trace( col, row,dataList[row][col] );
s += ansArr[dataList[col][row] - 1];
ansBox.text = s;
trace( ansBox.text);
}
}
}
主场景上的代码
//按照二近制的顺序以行列排列,将各种组合下的卦相编号用二维数组来记录。
var dataArr:Array = [[2,23,8,20,16,35,45,12],
[15,52,39,53,62,56,31,33],
[7,4,29,59,40,64,47,6],
[46,18,48,57,32,50,28,44],
[24,27,3,42,51,21,17,25],
[36,22,63,37,55,30,49,13],
[19,41,60,61,54,38,58,10],
[11,26,5,9,34,14,43,1]];
// 坤 艮 坎 巽 震 离 兑 乾
//横向 000 001 010 011 100 101 110 111
//纵向 000 001 010 011 100 101 110 111
//二近制表示八个基础卦相,从上往下看,类似于个十百位(居上的数在二进制表示中处低位)。
var eightBar = ["坤","艮","坎","巽","震","离","兑","乾"];
//一维数据中记录卦相的内容,通过索引号来引用具体内容。
var ansData =["卦一 乾 乾为天 ",
"卦二 坤 坤为地 ",
"卦三 屯 水雷屯 ",
"卦四 蒙 山水蒙 ",
"卦五 需 水天需 ",
"卦六 讼 天水讼 ",
"卦七 师 地水师 ",
"卦八 比 水地比 ",
"卦九 小畜 风天小畜 ",
"卦十 履 天泽履 ",
"卦十一 泰 地天泰 ",
"卦十二 否 天地否 ",
"卦十三 同人 天火同人 ",
"卦十四 大有 火天大有 ",
"卦十五 谦 地山谦 ",
"卦十六 豫 雷地豫 ",
"卦十七 随 泽雷随 ",
"卦十八 蛊 山风蛊 ",
"卦十九 临 地泽临 ",
"卦二十 观 风地观 ",
"卦二十一 噬嗑 火雷噬嗑 ",
"卦二十二 贲 山火贲 ",
"卦二十三 剥 山地剥 ",
"卦二十四 复 地雷复 ",
"卦二十五 无妄 天雷无妄 ",
"卦二十六 大畜 山天大畜 ",
"卦二十七 颐 山雷颐 ",
"卦二十八 大过 泽风大过 ",
"卦二十九 坎 坎为水 ",
"卦三十 离 离为火 ",
"卦三十一 咸 泽山咸 ",
"卦三十二 恒 雷风恒 ",
"卦三十三 遯 天山遁 ",
"卦三十四 大壮 雷天大壮 ",
"卦三十五 晋 火地晋 ",
"卦三十六 明夷 地火明夷 ",
"卦三十七 家人 风火家人 ",
"卦三十八 睽 火泽睽 ",
"卦三十九 蹇 水山蹇 ",
"卦四十 解 雷水解 ",
"卦四十一 损 山泽损 ",
"卦四十二 益 风雷益 ",
"卦四十三 夬 泽天夬 ",
"卦四十四 姤 天风姤 ",
"卦四十五 萃 泽地萃 ",
"卦四十六 升 地风升 ",
"卦四十七 困 泽水困 ",
"卦四十八 井 水风井 ",
"卦四十九 革 泽火革 ",
"卦五十 鼎 火风鼎 ",
"卦五十一 震 震为雷 ",
"卦五十二 艮 艮为山 ",
"卦五十三 渐 风山渐 ",
"卦五十四 归妹 雷泽归妹 ",
"卦五十五 丰 雷火丰 ",
"卦五十六 旅 火山旅 ",
"卦五十七 巽 巽为风 ",
"卦五十八 兑 兑为泽 ",
"卦五十九 涣 风水涣 ",
"卦六十 节 水泽节 ",
"卦六十一 中孚 风泽中孚 ",
"卦六十二 小过 雷山小过 ",
"卦六十三 既济 水火既济 ",
"卦六十四 未济 火水未济 "];
var barArr = new Array();
for (var i=0; i<6; i++)
{
var bar = new Bar(this["mc"+ i]);
bar.box.gotoAndStop(1);
barArr.push( bar);
}
var barBroup = new BarGroup(dataArr,barArr,ansText,eightBar,ansData);