足够无聊的一段 Script——PHP 命令行下的 Matrix 效果


作者:郑凯

PHP

最近更多的是拿 PHP 写 script,在 DOS 窗口下看回显(效率高些,主要是跑时间长点的东西不会受 http 连接的 timeout 限制),有次滚屏快了点,让人想起了《Matrix》,抽了几分钟,写了点这么个玩意,然后又花了十几分钟修正……效果如右图

代码如下:

$iWidth = 79; // 文本宽度
$iDensity = 4; // 密度

$aDown = array();
$sText = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
	."~`!@#$%^&*(){}[]_+-=\\\"'|<>?.,/";
$iText = strlen($sText) - 1;

$aArrow = array();
for ($i = 0; $i < $iWidth; $i++) {
	$aDown[$i] = 0;
}

while (1) {
	for ($i = 0; $i < $iWidth; $i++) {
		$aDown[$i]--;
		if ($aDown[$i] < 0) {
			$aArrow[$i] = mt_rand(0, $iDensity);
			$aDown[$i] = mt_rand(10, 25);
		}
		if ($aArrow[$i] == 1) {
			echo substr($sText, mt_rand(0, $iText), 1);
		} else {
			echo " ";
		}
	}
	echo "\n";
//	usleep(1000);
}

另存成 .php,在 DOS 窗口下执行,例如 E:\Server\PHP\php.exe E:\www\matrix.php

$sText 控制显示的内容,比方说可以让它只 = "01"

$aDown[$i] = mt_rand(10, 25); 这行控制绿条的长度,我原来是 3, 10,老乔说长点好看,我试了下,觉得 10, 25 还不错

更多的是要调整 DOS 窗口的属性,把显示文字调成绿色,最好把窗口宽度也加大,我选的是字体大小 8 * 12,宽度 150

显示效果还不够理想,一是我不知道普通 DOS 窗口能否控制显示颜色,应该绿色有不同的明暗(哪怕仅仅是标准 16 色中的那两种绿),这样就会产生立体感了,二是公司的 LCD 不可能有 2ms or 4ms 那种响应速度,一跑快就花了,三是毕竟这是简单字符高度级滚屏,而不是象素级的。

完整的桌面截图:

PHP Matrix