环境,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. python学习(十七) 扩展python

    c, c++, java比python快几个数量级. 17.1 考虑哪个更重要 开发速度还是运行速度更重要. 17.2 非常简单的途径:Jython和IronPython Jython可以直接访问JA ...

  2. Nginx反向代理图片总结

    配置需求: 内网192.168.80.205的机器上部署了一个Web项目,下文称web,   url为http://192.168.80.205:8082.   并且使用nginx访问图片,url格式 ...

  3. python's twenty-first day for me 抽象类和接口类以及多态

    归一化设计: 不管是哪一个类的对象,都调用同一个函数去完成相似的功能. class Alipay: def pay(self,money): print('使用支付宝支付了%s' % money) c ...

  4. 第二章 MySQL的安装与配置(待续)

    ·······

  5. Listview使用安卓自带布局实现单选

    安卓提供了一些自带的布局,使用非常简单.直接看代码吧. package com.example.linfeng.myapplication; import android.app.Activity; ...

  6. log4j配置文件的手动加载与配置初始化

    一. 本地项目: 初始化log4j的日志配置,指定到src目录下(建议用2)         //1. 本地项目-属性文件配置         PropertyConfigurator.configu ...

  7. linux内核中task_struct与thread_info及stack三者的关系

    在linux内核中进程以及线程(多线程也是通过一组轻量级进程实现的)都是通过task_struct结构体来描述的,我们称它为进程描述符.而thread_info则是一个与进程描述符相关的小数据结构,它 ...

  8. java游戏制作之水果忍者

    水果忍者的原理很简单,主要就是采用随机的方式是画面上面出现水果. package Fruitninja; import java.awt.Dimension; import java.awt.Grap ...

  9. Mac notes

    1. Mac应用数据存放位置 ~/Library/Application Support/ 比如sublime text的应用数据~/Library/Application Support/Subli ...

  10. html页面的局部刷新

    有时候我们在做一个动态/静态网页,网页中的某部分需要从服务器获取值但是不能把整个页面都提交到服务器,也就是要对页面做局部刷新,也就是对整个网页无刷新更新值.在这种情况下就需要用JS和XMLHttpRe ...