在桌面新建一个文件夹,命名为黑客帝国代码雨。
在文件夹内新建一个文本文档。
将新建文本文档命名为代码雨。
将以下代码复制到文本中:
<canvas id="canvas" style="background:black" width="620" height="340"></canvas>
<audio style="display:none; height: 0" id="bg-music" preload="auto" src="music/黑客帝国.mp3"></audio>
<style type="text/css">
body{margin: 0; padding: 0; overflow: hidden;}
</style>
<script type="text/javascript">
window.onload = function(){
//获取图形对象
var canvas = document.getElementById("canvas");
//获取图形的上下文
var context = canvas.getContext("2d");
//获取浏览器屏幕的宽度和高度
var W = window.innerWidth;
var H = window.innerHeight;
//设置canvas的宽度和高度
canvas.width = W;
canvas.height = H;
//每个文字的字体大小
var fontSize = 15;
//计算列
var colunms = Math.floor(W /fontSize);
//记录每列文字的y轴坐标
var drops = [];
//给每一个文字初始化一个起始点的位置
for(var i=0;i<colunms;i++){
drops.push(0);
}
//运动的文字
var str ="01abcdefghijklmnopqurstuvwxyz";
//4:fillText(str,x,y);原理就是去更改y的坐标位置
//绘画的函数
function draw(){
//让背景逐渐由透明到不透明
context.fillStyle = "rgba(0,0,0,0.05)";
context.fillRect(0,0,W,H);
//给字体设置样式
//context.font = "700 "+fontSize+"px 微软雅黑";
context.font = fontSize + 'px arial';
//给字体添加颜色
context.fillStyle ="green";//随意更改字体颜色
//写入图形中
for(var i=0;i<colunms;i++){
var index = Math.floor(Math.random() * str.length);
var x = i*fontSize;
var y = drops[i] *fontSize;
context.fillText(str[index],x,y);
//如果要改变时间,肯定就是改变每次他的起点
if(y >= canvas.height && Math.random() > 0.92){
drops[i] = 0;
}
drops[i]++;
}
};
function randColor(){
var r = Math.floor(Math.random() * 256);
var g = Math.floor(Math.random() * 256);
var b = Math.floor(Math.random() * 256);
return "rgb("+r+","+g+","+b+")";
}
draw();
setInterval(draw,33);
};
</script>
直接复制代码,后缀名改为:.html ,直接运行就可以看到效果啦!
VBA如何制作黑客帝国代码效果,学会这个技巧,可以炫耀了
黑客帝国里的经典一幕,形象地把代码流展示到屏幕上,让你感觉到数据变化有多么神奇。
严格来说,任何编程语文都可以实现这个场景,本节介绍一下,通过VBA代码实现的基本思路。
实现效果如下图所示,没有展示动态图片,感觉还有点不尽人意。
由于,动画不是十分连贯,总是少了一些感动。
如果哪位实现了更加平滑的效果,欢迎留言。
本示例通过Application对象的一些方法来实现,动态效果。
显示内容为26个英文大写字母,当然也可以换成任意喜欢的字符,0或1也是可以的。
如:
下面参考一下具体代码:
Public zArr(25)'定义存放字母数组Public isTrue As BooleanPublic r As RangePublic Sub setValue()If isTrue Then Exit Sub Dim zi As Integer, ri As Integer, ci As Integer, xi As Integer, rxi As Integer zi = VBA.Int((25 - 0 1) * VBA.Rnd) 0 ci = VBA.Int((25 - 1 1) * VBA.Rnd) 1 xi = VBA.Int((20 - 1 1) * VBA.Rnd) 1 For ri = 1 To xi For rxi = 1 To xi - ri zi = VBA.Int((25 - 0 1) * VBA.Rnd) 0 ActiveSheet.Cells(ri, ci).Item(rxi).Value = zArr(zi) Next rxi If ri > 1 Then ActiveSheet.Cells(ri, ci).Offset(-1, 0).ClearContents Application.Wait (Now TimeValue("00:00:01")) DoEvents Next ri DoEvents Application.OnTime Now() TimeValue("00:00:01"), "setValue"End Sub
上述代码为实现动态效果的过程,存放在模块中。
这里需要做些的变量设置,本示例为26个大写字母,设置方法如下代码:
Dim zChr As Integer, zi As IntegerzColor = 9For zChr = 65 To 90 zArr(zChr - 65) = VBA.Chr(zChr)Next zChr
其中,zArr就是存放字母的数组变量。
按钮完整代码
Private Sub CommandButton1_Click()isTrue = False'设置终止程序条件变量Application.DisplayAlerts = FalseDim zColor As IntegerDim zChr As Integer, zi As IntegerzColor = 9For zChr = 65 To 90 zArr(zChr - 65) = VBA.Chr(zChr)Next zChrSet r = ActiveSheet.Range("A1").Resize(20, 26)With r .Interior.Color = 1 .Font.Color = RGB(12, 255, 12)End WithIf Not isTrue Then setValueApplication.DisplayAlerts = TrueEnd Sub
代码中还有一个关键变量isTrue,是跳出循环的一个布尔变量,没有这个变量,程序会变成一个无限循环,结果就是一直循环出不来。
isTrue定义成全局变量,存放位置在模块中,Public isTrue as Boolean
整合完成就可以调试效果了。
总的来说,并不如其它代码实现效果好,如果用JS就十分可观了。
但是,主要是对整个过程的思路进行一下探索,并没有太高尚的意义。
欢迎关注、收藏
---END---