公开 类 电子板
{
公开 窗口场景 场景;
公开 整数[] 板数组;
位图 位图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
返回(时间);
}
}
————————————————