环境,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. 杂项:WiKi

    ylbtech-杂项:WiKi Wiki是一种在网络上开放且可供多人协同创作的超文本系统,由沃德·坎宁安于1995年首先开发,这种超文本系统支持面向社群的协作式写作,同时也包括一组支持这种写作.沃德· ...

  2. 1122 Hamiltonian Cycle

    题意:包含图中所有结点的简单环称为汉密尔顿环.给出无向图,然后给出k个查询,问每个查询是否是汉密尔顿环. 思路:根据题目可知,我们需要判断一下几个条件:(1).首先保证给定的环相邻两结点是连通的:(2 ...

  3. SQL SERVER常用的统计用法

    --查询各个状态下总数SET statistics time on Go SELECT END ) AS Q1, END ) AS Q2, END ) AS Q3, END ) AS Q4, END ...

  4. VS2017自动添加头部注释

    让VS自动生成类的头部注释,只需修改两个文集即可,一下两个路径下个有一个 Class.cs文件 D:\Program Files (x86)\Microsoft Visual Studio\2017\ ...

  5. pycharm的自定义python模板

    #!/usr/bin/env python # encoding: utf-8 #set( $SITE = "http://blog.csdn.net/morgana" ) &qu ...

  6. quarz入门案例

    介绍 Quartz框架是一个全功能.开源的任务调度服务,可以集成几乎任何的java应用程序—从小的单片机系统到大型的电子商务系统.Quartz可以执行上千上万的任务调度.   核心概念  Quartz ...

  7. Maven整合SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

    使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合 ...

  8. Python基础学习三 list-增删改查、切片、循环、排序

    一.list 增删改查 1.增加 方式一: stus = ['xiaohei','xiaobai','xiaohuang','cxdser'] stus.append('test001')#从最后面开 ...

  9. laravel使用ORM操作数据库

    laravel使用ORM操作数据库 public function mode(){ //查询所有 $isok=Student::get(); 新增. (1) $isok=Student::create ...

  10. 5.WHERE 子句

    WHERE 子句用于规定选择的标准. WHERE 子句 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句. 语法 SELECT 列名称 FROM 表名称 WHERE 列 运 ...