电子板,易语言飞扬源码

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值