在易语言中写一个那种数字雨的屏保,谁能给点思路

在易语言中写一个那种数字雨的屏保,谁能给点思路,第1张

准备:一个窗口(_启动窗口),一个画板(画板1),一个时钟(时钟1)

_启动窗口 和 画板1 的 可视 都为 假,时钟1 的 时间周期 为 0,_启动窗口 的 总在最前 为 真。

到 _启动窗口 对应的 窗口程序集,把下面的代码拷贝过去即可。

.版本 2

.支持库 OPenGL

.支持库 EThread

.支持库 spec

.支持库 iext

.支持库 eAPI .程序集 窗口程序集1, , , 高仿黑客帝国

.程序集变量 t, 整数

.程序集变量 x, 整数型

.程序集变量 y, 整数型

.程序集变量 z, 整数型

.程序集变量 屏幕高度, 整数型, , , 屏幕高度

.程序集变量 屏幕宽度, 整数型, , , 屏幕宽度 .子程序 __启动窗口_创建完毕 屏幕高度 = 取屏幕高度 ()

屏幕宽度 = 取屏幕宽度 ()

画板1.画板背景色 = #黑色

_启动窗口.移动 (0, 0, 屏幕宽度, 屏幕高度)

画板1.移动 (0, 0, 屏幕宽度, 屏幕高度)

t = 0

z = 屏幕高度 ÷ 20

显示光标 (假)

_启动窗口.可视 = 真

画板1.可视 = 真

_启动窗口.调整层次 (1)

定义 ()

画板1.获取焦点 ()

时钟1.时钟周期 = 400  ' 每列产生间隔(ms)

启动线程 (&数字雨输出, , )

延迟 (400)

启动线程 (&数字雨输出, , )

延迟 (300)

启动线程 (&数字雨输出, , )

延迟 (200)

启动线程 (&数字雨输出, , )

延迟 (200)

启动线程 (&数字雨输出, , )

延迟 (200)

启动线程 (&数字雨输出, , )

延迟 (200)

时钟2.时钟周期 = 1000

_时钟2_周期事件 ()

.子程序 _画板1_鼠标位置被移动, 逻辑型

.参数 横向位置, 整数型

.参数 纵向位置, 整数型

.参数 功能键状态, 整数型 .如果真 (取绝对值 (横向位置 - x) > 50 或 取绝对值 (纵向位置 - y) > 50)

    定义 ()

    t = t + 1

    .如果真 (t > 3)  ' 事不过三

        结束 ()

    .如果真结束 .如果真结束

.子程序 _画板1_按下某键, 逻辑型

.参数 键代码, 整数型

.参数 功能键状态, 整数型 结束 ()

.子程序 定义 x = 取鼠标水平位置 ()

y = 取鼠标垂直位置 ()

.子程序 数字雨输出, , , 数字雨输出

.局部变量 E, 整数型, , , 垂直位置

.局部变量 F, 整数型, , , 水平位置,起点

.局部变量 G, 整数型, , , 显示长度,单位=位

.局部变量 H, 整数型, , , 下降速度

.局部变量 I, 整数型, , , 移动次数

.局部变量 J, 整数型, , , 绿与白

.局部变量 CHR, 文本型, , "1000" 置随机数种子 ()

J = 取随机数 (1, 5)

.如果 (J = 1 或 J = 3 或 J = 5)

    置随机数种子 ()

    E = 取随机数 (0, 屏幕宽度)

    置随机数种子 ()

    F = 取随机数 (0, 到整数 (屏幕高度 × 0.75))

    置随机数种子 ()

    G = 取随机数 (z × 0.2, z × 0.65)

    置随机数种子 ()

    H = 取随机数 (10, 600)

    .判断循环首 (真)

        ' 画板1.字体.字体名称 = “黑体”

        ' 画板1.字体.字体大小 = 16

        CHR [I + 1] = 获取字符 ()

        画板1.文本颜色 = #绿色

        画板1.定位写出 (E, F + I × 20, CHR [I + 1])

        .如果真 (I ≠ 0)

            画板1.文本颜色 = #墨绿

            画板1.定位写出 (E, F + (I - 1) × 20, CHR [I])

        .如果真结束

        .如果真 (I > G + 1)

            画板1.文本颜色 = 取颜色值 (0, 40, 0)

            画板1.定位写出 (E, F + (I - G - 1) × 20, CHR [I - G])

            画板1.文本颜色 = #黑色

            画板1.定位写出 (E, F + (I - G - 2) × 20, CHR [I - G - 1])

        .如果真结束

        I = I + 1

        .如果真 (F + I × 20 > 屏幕高度)

            跳出循环 ()

        .如果真结束

        延迟 (H)  ' 避免CPU过高

        .如果真 (I > 1000)

            结束 ()

        .如果真结束     .判断循环尾 ()

    .判断循环首 (真)

        .如果真 (I > G + 1)

            画板1.文本颜色 = 取颜色值 (0, 40, 0)

            画板1.定位写出 (E, F + (I - G - 1) × 20, CHR [I - G])

            画板1.文本颜色 = #黑色

            画板1.定位写出 (E, F + (I - G - 2) × 20, CHR [I - G - 1])

        .如果真结束

        I = I + 1

        .如果真 (F + I × 20 - (G + 2) × 20 > 屏幕高度)

            跳出循环 ()

        .如果真结束

        延迟 (H)  ' 避免CPU过高

        .如果真 (I > 1000)

            结束 ()

        .如果真结束     .判断循环尾 ()

.否则     置随机数种子 ()

    E = 取随机数 (0, 屏幕宽度)

    置随机数种子 ()

    F = 取随机数 (0, 到整数 (屏幕高度 × 0.75))

    置随机数种子 ()

    G = 取随机数 (z × 0.2, z × 0.65)

    置随机数种子 ()

    H = 取随机数 (10, 600)

    .判断循环首 (真)

        ' 画板1.字体.字体名称 = “黑体”

        ' 画板1.字体.字体大小 = 16

        CHR [I + 1] = 获取字符 ()

        画板1.文本颜色 = #白色

        画板1.定位写出 (E, F + I × 20, CHR [I + 1])

        .如果真 (I ≠ 0)

            画板1.文本颜色 = #浅灰

            画板1.定位写出 (E, F + (I - 1) × 20, CHR [I])

        .如果真结束

        .如果真 (I > G + 1)

            画板1.文本颜色 = #灰色

            画板1.定位写出 (E, F + (I - G - 1) × 20, CHR [I - G])

            画板1.文本颜色 = #黑色

            画板1.定位写出 (E, F + (I - G - 2) × 20, CHR [I - G - 1])

        .如果真结束

        I = I + 1

        .如果真 (F + I × 20 > 屏幕高度)

            跳出循环 ()

        .如果真结束

        延迟 (H)  ' 避免CPU过高

        .如果真 (I > 1000)

            结束 ()

        .如果真结束     .判断循环尾 ()

    .判断循环首 (真)

        .如果真 (I > G + 1)

            画板1.文本颜色 = #灰色

            画板1.定位写出 (E, F + (I - G - 1) × 20, CHR [I - G])

            画板1.文本颜色 = #黑色

            画板1.定位写出 (E, F + (I - G - 2) × 20, CHR [I - G - 1])

        .如果真结束

        I = I + 1

        .如果真 (F + I × 20 - (G + 2) × 20 > 屏幕高度)

            跳出循环 ()

        .如果真结束

        延迟 (H)  ' 避免CPU过高

        .如果真 (I > 1000)

            结束 ()

        .如果真结束     .判断循环尾 () .如果结束  

.子程序 获取字符, 文本型

.局部变量 A, 文本型 置随机数种子 ()

A = 字符 (取随机数 (27, 127))

.判断循环首 (A = “” 或 A = “ ” 或 A = “ ”)

    置随机数种子 ()

    A = 字符 (取随机数 (27, 127))

.判断循环尾 ()

A = 到全角 (A)

返回 (A)

.子程序 _时钟1_周期事件 启动线程 (&数字雨输出, , )

在C:\WINDOWS\system32文件夹里,后缀名为scr的文件就是屏幕保护程序,选择你需要拷贝的屏幕保护程序,然后复制到你电脑的C:\WINDOWS\system32下即可。

或者在各大黑客论坛下载 以前我下载过 还用过 还是不错的 现在换WIN7系统了 没怎么搞

哦。就是黑客帝国的那个。很有意思。我知道有人写过,而且还是3D的。可以旋转的。

python的3D编程应该有不少的界面。我个人觉着可以先从2D开始容易些。

准备一系列字的图片。可以在程序起动时,绘制在一个PNG图上。再准备这些字的发光的图。同样缓制好放在内存里。

设置,好一些充填的路径。就是那种下雨感觉的路径。先事先计算好。别临时去排版去计算。

建立一系列的类似微线程的任务。游戏开发里似乎有专门的名称,我忘记叫什么名子了。意思就是在一次时钟频率里,一次性刷新所有的动画。

将各个任务(也就是刷新路线的任务),对应的图取出来,分别依次对应原图闪光以及不闪光的三个图。

刷新频率可以按每少5-10帧计算。

每次刷新都是绘制在后台d-buffer里,然后再绘制到前面。

这是一个复杂的算法。

当然也有更简单的算法。

找一个下雨的屏保,然后你再找一个抓屏软件,每0.2秒抓一次屏幕,连续抓10秒。然后把抓的结果图片,用python顺序显示出来。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12160362.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存