环境,WinXP/Win7  Perl 5.16

默认循环1000次,按ESC提前退出

 use strict;
use Term::ReadKey;
use Win32::Console;
use Time::HiRes 'sleep';
use IO::Handle;
STDOUT->autoflush();
system("mode con lines=40 cols=100"); our $OUT=Win32::Console->new(STD_OUTPUT_HANDLE);
$OUT->Cursor(, , , ); #hide cursor my ($i, $j);
our ($rows, $cols) = (, );
our ($mxrow, $mxcol) = ($rows-, $cols-); # init
our @coord;
my (@h, @n);
my $y = ; foreach (<DATA>) {
s/\r?\n$//;
tr/\*\.//;
@{$h[$y++]} = ( split("", $_) );
} foreach $i ( .. $mxrow) {
foreach $j ( .. $mxcol) {
$coord[$i][$j]{'x'} = $j*;
$coord[$i][$j]{'y'} = $i;
$h[$i][$j] = unless (defined $h[$i][$j]);
$n[$i][$j] = ;
}
} &Draw(\@n, \@h);
foreach (..) {
sleep 0.05;
@n = ();
&NextBuffer(\@h, \@n);
&Draw(\@h, \@n);
@h = (@n); &KeyFunc();
} sub NextBuffer {
my ($ra, $rb) = (shift, shift);
my ($i, $j, $sum);
my ($L, $R, $U, $D);
foreach $i ( .. $mxrow) {
$U = ($i-) < ? $mxrow : ($i-);
$D = ($i+) > $mxrow ? : ($i+);
foreach $j ( .. $mxcol) {
$L = ($j-) < ? $mxcol : ($j-);
$R = ($j+) > $mxcol ? : ($j+);
$sum = $ra->[$U][$L] + $ra->[$U][$j] + $ra->[$U][$R] +
$ra->[$i][$L] + + $ra->[$i][$R] +
$ra->[$D][$L] + $ra->[$D][$j] + $ra->[$D][$R]; if ($sum == ) {
$rb->[$i][$j] = ;
} elsif ($sum == ) {
$rb->[$i][$j] = $ra->[$i][$j];
} else {
$rb->[$i][$j] = ;
}
}
}
} sub Draw {
my ($ra, $rb) = (shift, shift);
foreach $i ( .. $mxrow) {
foreach $j ( .. $mxcol) {
if ($rb->[$i][$j] != $ra->[$i][$j]) {
&Point(
$coord[$i][$j]{'x'},
$coord[$i][$j]{'y'},
$rb->[$i][$j],
);
}
}
}
} sub Point {
my ($mx, $my, $light) = (shift, shift, shift);
my $color;
if ($light == ) {
$color = $FG_WHITE|$BG_GRAY;
} else {
$color = $FG_WHITE|$BG_BLACK;
}
$OUT->Cursor($mx, $my);
$OUT->FillAttr($color, , $mx, $my);
} sub KeyFunc {
my $key;
$key = ReadKey(-);
return if (not defined $key);
if ( ord($key) == ) {
exit;
}
} __DATA__
......................**...............
......................**...............
.......................................
.......................................
.......................................
.......................................
.......................................
.......................................
.......................................
.......................................
.......................................
.......................................
.........*..........**...**............
.......*.*............***..............
......*.*............*...*.............
**...*..*.............*.*..............
**....*.*..............*...............
.......*.*......*.*....................
.........*......**.....................
.................*...*.................
.....................**......*.........
....................*.*......*.*.......
...............*..............*.*....**
..............*.*.............*..*...**
.............*...*............*.*......
..............***............*.*.......
............**...**..........*.........
.......................................
.......................................
.......................................
.......................................
.......................................
.......................................
.......................................
.......................................
.......................................
.......................................
...............**......................
...............**......................

[Win32::Console]Perl终端版生命游戏的更多相关文章

  1. Python实现生命游戏

    1. 生命游戏是什么 生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机.它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个 ...

  2. python实现简单动画——生命游戏

    生命游戏 生命游戏的宇宙是一个无限的,其中细胞的二维正交网格,每个细胞处于两种可能的状态之一,即*活着*或*死亡*(分别是*人口稠密*和*无人居住*).每个细胞与它的八个邻居相互作用,这八个邻居是水平 ...

  3. Cocos2d-x 3.x版2048游戏开发

    Cocos2d-x 3.x版2048游戏开发 本篇博客给大家介绍怎样高速开发2048这样一款休闲游戏,理解整个2048游戏的开发流程.从本篇博客你将能够学习到下面内容: 这里注明一下,本教程来自极客学 ...

  4. [LeetCode] Game of Life 生命游戏

    According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellul ...

  5. React项目(二):生命游戏

    引子 这是16年最后的一个练手项目,一贯的感觉就是,做项目容易,写说明文档难.更何况是一个唤起抑郁感觉的项目,码下的每个字,心就如加了一个千斤的砝码. 2016年,有些事我都已忘记,但我现在还记得.2 ...

  6. 生命游戏/Game of Life的Java实现(转)

    首先简单介绍一下<生命游戏> 生命游戏其实是一个零玩家游戏.它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死 ...

  7. Swift版iOS游戏框架Sprite Kit基础教程下册

    Swift版iOS游戏框架Sprite Kit基础教程下册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C 介绍:本教程是国内唯一的Swift版的Spritekit教程. ...

  8. android版猜拳游戏源码分享

    android版猜拳游戏源码分享安卓版猜拳游戏源码,该文件中带有安装测试包的,这个游戏源码比较简单的,现在有两个代码,一个自定义VIEW的,一个就是普通的imageView图片,游戏非常适合一些新手的 ...

  9. 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程:简介及目录》(附上完整工程文件)

    介绍:讲述如何使用Genesis-3D来制作一个横版格斗游戏,涉及如何制作连招系统,如何使用包围盒实现碰撞检测,软键盘的制作,场景切换,技能读表,简单怪物AI等等,并为您提供这个框架的全套资源,源码以 ...

随机推荐

  1. js判断是否是用微信浏览器打开

    有时候微信开发,需要根据使用的浏览器不同,来进行不同的处理. 下面的代码,可以判断是否使用的是微信浏览器. <!DOCTYPE HTML> <html lang="en&q ...

  2. 转载:细说oracle 11g rac 的ip地址

    本文转载自:细说oracle 11g rac 的ip地址 http://blog.sina.com.cn/s/blog_4fe6d4250102v5fa.html 以前搭建oracle rac的时候( ...

  3. 「小程序JAVA实战」小程序视图之细说数据绑定(13)

    转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-13/ 在前面的小节里面其实对数据绑定都有所了解了,在这次给老铁在好好说下数据绑定,看下它的方方面面 ...

  4. MYSQL中str_to_date函数的用法

    str_to_date(str,format) 函数的用法 str_to_date函数将str转化为日期型的数据,format表示转化后的格式. format参数格式: 常用: %Y  年 %m  月 ...

  5. 动态绑定事件-on

    动态绑定事件 $(document).on("各种事件(如click.mousemove...)","事件对象(比如我点击class为.close的div,那么这里就是. ...

  6. printf 的格式

    1) 类型类型字符用以表示输出数据的类型,其格式符和意义如下表所示: %c  输出单个字符 %s  输出字符串 %u  以十进制形式输出无符号整数 %d  以十进制形式输出带符号整数(正数不输出符号) ...

  7. Oracle 中 over() 函数

    :first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { border: 0; m ...

  8. 使用laravel实现用户的登陆

    首先在 php artisan 里面 make:auth 生产一个门脸类 修改配置文件里面要哪个模型登陆 模型得继承一下才能 先写一下注册 密码必须要使用laravel的加密方法,使用MD5都没用 l ...

  9. jquery on事件在IE8下失效的一种情况,及解决方法/bootstrap空间绑定控件事件不好用

    同事在复制bootstrap中的select控件之后,发现用$('.selectpicker').selectpicker();刷新下拉框控件不好使,后来发现是用原生js克隆的方法obj.cloneN ...

  10. solidity错误处理

    官方文档: https://solidity.readthedocs.io/en/develop/control-structures.html#error-handling-assert-requi ...