[Win32::Console]Perl终端版生命游戏
环境,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终端版生命游戏的更多相关文章
- Python实现生命游戏
1. 生命游戏是什么 生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机.它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个 ...
- python实现简单动画——生命游戏
生命游戏 生命游戏的宇宙是一个无限的,其中细胞的二维正交网格,每个细胞处于两种可能的状态之一,即*活着*或*死亡*(分别是*人口稠密*和*无人居住*).每个细胞与它的八个邻居相互作用,这八个邻居是水平 ...
- Cocos2d-x 3.x版2048游戏开发
Cocos2d-x 3.x版2048游戏开发 本篇博客给大家介绍怎样高速开发2048这样一款休闲游戏,理解整个2048游戏的开发流程.从本篇博客你将能够学习到下面内容: 这里注明一下,本教程来自极客学 ...
- [LeetCode] Game of Life 生命游戏
According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellul ...
- React项目(二):生命游戏
引子 这是16年最后的一个练手项目,一贯的感觉就是,做项目容易,写说明文档难.更何况是一个唤起抑郁感觉的项目,码下的每个字,心就如加了一个千斤的砝码. 2016年,有些事我都已忘记,但我现在还记得.2 ...
- 生命游戏/Game of Life的Java实现(转)
首先简单介绍一下<生命游戏> 生命游戏其实是一个零玩家游戏.它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死 ...
- Swift版iOS游戏框架Sprite Kit基础教程下册
Swift版iOS游戏框架Sprite Kit基础教程下册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C 介绍:本教程是国内唯一的Swift版的Spritekit教程. ...
- android版猜拳游戏源码分享
android版猜拳游戏源码分享安卓版猜拳游戏源码,该文件中带有安装测试包的,这个游戏源码比较简单的,现在有两个代码,一个自定义VIEW的,一个就是普通的imageView图片,游戏非常适合一些新手的 ...
- 《Genesis-3D开源游戏引擎--横版格斗游戏制作教程:简介及目录》(附上完整工程文件)
介绍:讲述如何使用Genesis-3D来制作一个横版格斗游戏,涉及如何制作连招系统,如何使用包围盒实现碰撞检测,软键盘的制作,场景切换,技能读表,简单怪物AI等等,并为您提供这个框架的全套资源,源码以 ...
随机推荐
- select,poll,epoll,selectors
一 了解select,poll,epoll IO复用:为了解释这个名词,首先来理解下复用这个概念,复用也就是共用的意思,这样理解还是有些抽象, 为此,咱们来理解下复用在通信领域的使用,在通信领域中为了 ...
- 进程之 Process join方法其他属性与进程Queue
Process join方法 以及其他属性 在主进程运行过程中如果想并发地执行其他的任务,我们可以开启子进程,此时主进程的任务与子进程的任务分两种情况 情况一:在主进程的任务与子进程的任务彼此独立的情 ...
- python web指纹获取加目录扫描加端口扫描加判断robots.txt
前言: 总结上几次的信息收集构造出来的. 0x01: 首先今行web指纹识别,然后在进行robots是否存在.后面是目录扫描 然后到使用nmap命令扫描端口.(nmap模块在windows下使用会报停 ...
- FB联网无人机取得重大进展 实现首次成功着陆
科技讯6月30日消息,据Engadget报道,在过去的几年里,世界最大社交网络Facebook始终在测试其太阳能无人飞机Aquila.2016年6月份,这种联网无人机在美国亚利桑那州的尤马进行了首次全 ...
- scikit-learn和tensorflow的区别
1.功能不同 Scikit-learn(sklearn)的定位是通用机器学习库,而TensorFlow(tf)的定位主要是深度学习库.一个显而易见的不同:tf并未提供sklearn那种强大的特征工程, ...
- QR 码的位置检测符
QR码的位置检测符由三个同心正方形叠加而成.分别为: 7*7 modules的黑色正方形: 5*5 modules的白色正方形 : 3*3modules的黑色正方形. 三个用于定位检测的“回”形符号应 ...
- 【原】Coursera—Andrew Ng机器学习—Week 3 习题—Logistic Regression 逻辑回归
课上习题 [1]线性回归 Answer: D A 特征缩放不起作用,B for all 不对,C zero error不对 [2]概率 Answer:A [3]预测图形 Answer:A 5 - x1 ...
- xcode添加build phase
[xcode添加build phase] xcode版本:5.0.2,找了半天,终于找到add build phase的方法,如下图.
- laravel中间键组
` php artisan make:middleware Lend这边我定义一个登陆的中间件这边要注意的就是,当条件成立的时候一定要 return $next($request);不写这个larav ...
- validate 不校验的解决办法
最近使用validate.js用于项目的表单校验,调了半天,怎么都不校验,仔细对照例子发现 例子中要校验的文本框除了ID外还有name属性,而我在做的时候没有name属性,到这里终于 看到了希望,把所 ...