“易语言.飞扬”做的电子板
下载地址(含源代码):
http://bbs.dywt.com.cn/dispbbs.asp?boardID=148&ID=146448&page=1
此“易语言.飞扬”程序的完整源代码请到论坛下载,以下是部分核心代码:
公开 类 电子板
{
公开 窗口场景 场景;
公开 整数[] 板数组;
位图 位图1,位图2;
公开 初始化(用户界面.面板 面板)
{
场景=创建 窗口场景(面板);
板数组=创建 整数[设置.电子板宽][设置.电子板高];//初始状态=0
位图1=创建 位图();
位图1.加载("pic暗.bmp",位图类型.BMP);
位图2=创建 位图();
位图2.加载("pic亮.bmp",位图类型.BMP);
文本 ccc=辅助类.取当前目录();
}
刷新电子板()
{
整数 a,b,x,y;
计次循环(设置.电子板宽,a)
{
计次循环(设置.电子板高,b)
{
x=10+a*设置.灯宽;y=10+b*设置.灯高;
如果(板数组[a][b]==0) 场景.画位图(位图1,x,y,真);
否则 场景.画位图(位图2,x,y,真);
}
}
}
公开 重置电子板()//重置电子板为白灯状态
{
板数组.清零();
刷新电子板();
}
公开 显示(文本 显示文本)
{
整数 数字,汉字,x,行,列,a,b,c;
文本 字,文本;
计次循环(显示文本.长度(),x)
{
字=显示文本.中间(x,1);
假如(字)
{
为 "#","1","2","3","4","5","6","7","8","9","0",":":文本=取数字字模(字);数字++;
为其他:文本=取汉字字模(字);汉字++;
}
c=0;
如果(文本.长度()==16*16)
{
如果(汉字<=设置.电子板宽/16)
{
列=汉字-1;
行=0;//汉字部分从0行开始
计次循环(16,a)
{
计次循环(16,b)
{
板数组[列*16+b][行+a]=文本.中间(c,1).到整数();
c++;
}
}
}
}
c=0;
如果(文本.长度()==4*8)
{
如果(数字<=设置.电子板宽/5)
{
列=数字-1;
行=17;//数字部分从17行开始
计次循环(8,a)
{
计次循环(4,b)
{
板数组[列*5+b][行+a]=文本.中间(c,1).到整数();
c++;
}
}
}
}
}
刷新电子板();
}
文本 取数字字模(文本 数字)
{
文本 文本;
假如(数字)
{
为 "#":文本="00000000000000000000000000000000";
为 "0":文本="01101001100110011001100110010110";
为 "1":文本="00100110001000100010001000100111";
为 "2":文本="01101001000100100100100010001111";
为 "3":文本="01101001000101110001000110010110";
为 "4":文本="00110101100110011111000100010001";
为 "5":文本="11111000100011110001000100011110";
为 "6":文本="01101001100010001111100110010110";
为 "7":文本="11110001001000100010001000100010";
为 "8":文本="01101001100101101001100110010110";
为 "9":文本="01101001100110010111000110010110";
为 ":":文本="00000110011000000000011001100000";
}
返回(文本);
}
文本 取汉字字模(文本 汉字)
{
文本 字模文本;
//取汉字内码
字节集 内码字节集=编码转换.转换(汉字.到UTF8,编码.UTF_8,编码.GB2312);
//转换内码为区位码
整数 区码=内码字节集.中间(0,1).到整数()-160;
整数 位码=内码字节集.中间(1,1).到整数()-160;
// 打开字库
apr.内存池 内存池1=创建 内存池();
apr.文件操作 汉字库=创建 文件操作();
内存池1.申请内存(30000);//大小自己根据文件大小定义,最好比文件大点.
汉字库.打开("picHZK16",文件打开标志.只读,权限.系统默认,内存池1);
整数 位置=((区码-1)*94+位码-1)*32;
汉字库.定位(文件定位.文件头,位置.到文本());
/*打开文本文件这段一直出错,打开为假,原因不明
// 打开字库
文本文件 汉字库=创建 文本文件();
逻辑 a=汉字库.打开("picHZK16",2,文件编码类型.未知);
//计算汉字模位置
整数 位置=((区码-1)*94+位码-1)*32;
整数 b=汉字库.首定位(位置);
*/
//读取字模
字节集 字模=汉字库.读入(32);
汉字库.关闭();
整数 x;
计次循环(32,x)
{
字模文本+=十转二(字模.中间(x,1).到整数());
}
返回(字模文本);
}
公开 文本 十转二(整数 十)
{
整数 x,t;
文本 二;
计次循环(8,x)
{
如果(t+128/数学运算.求次方(2,x)>十) 二+="0";
否则
{
二+="1";
t+=128/数学运算.求次方(2,x);
}
}
返回(二);
}
公开 文本 取时间()
{
文本 时间文本=用户界面.辅助类.取当前日期和时间();//取系统当前的日期和时间
文本 时间=系统.文本类.中间(时间文本,11,8);//13:14:58//Mon Jan 14 13:15:47 2008
返回(时间);
}
}