环境,WinXP/Win7  Perl 5.16

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

  1. use strict;
  2. use Term::ReadKey;
  3. use Win32::Console;
  4. use Time::HiRes 'sleep';
  5. use IO::Handle;
  6. STDOUT->autoflush();
  7. system("mode con lines=40 cols=100");
  8.  
  9. our $OUT=Win32::Console->new(STD_OUTPUT_HANDLE);
  10. $OUT->Cursor(, , , ); #hide cursor
  11.  
  12. my ($i, $j);
  13. our ($rows, $cols) = (, );
  14. our ($mxrow, $mxcol) = ($rows-, $cols-);
  15.  
  16. # init
  17. our @coord;
  18. my (@h, @n);
  19. my $y = ;
  20.  
  21. foreach (<DATA>) {
  22. s/\r?\n$//;
  23. tr/\*\.//;
  24. @{$h[$y++]} = ( split("", $_) );
  25. }
  26.  
  27. foreach $i ( .. $mxrow) {
  28. foreach $j ( .. $mxcol) {
  29. $coord[$i][$j]{'x'} = $j*;
  30. $coord[$i][$j]{'y'} = $i;
  31. $h[$i][$j] = unless (defined $h[$i][$j]);
  32. $n[$i][$j] = ;
  33. }
  34. }
  35.  
  36. &Draw(\@n, \@h);
  37. foreach (..) {
  38. sleep 0.05;
  39. @n = ();
  40. &NextBuffer(\@h, \@n);
  41. &Draw(\@h, \@n);
  42. @h = (@n);
  43.  
  44. &KeyFunc();
  45. }
  46.  
  47. sub NextBuffer {
  48. my ($ra, $rb) = (shift, shift);
  49. my ($i, $j, $sum);
  50. my ($L, $R, $U, $D);
  51. foreach $i ( .. $mxrow) {
  52. $U = ($i-) < ? $mxrow : ($i-);
  53. $D = ($i+) > $mxrow ? : ($i+);
  54. foreach $j ( .. $mxcol) {
  55. $L = ($j-) < ? $mxcol : ($j-);
  56. $R = ($j+) > $mxcol ? : ($j+);
  57. $sum = $ra->[$U][$L] + $ra->[$U][$j] + $ra->[$U][$R] +
  58. $ra->[$i][$L] + + $ra->[$i][$R] +
  59. $ra->[$D][$L] + $ra->[$D][$j] + $ra->[$D][$R];
  60.  
  61. if ($sum == ) {
  62. $rb->[$i][$j] = ;
  63. } elsif ($sum == ) {
  64. $rb->[$i][$j] = $ra->[$i][$j];
  65. } else {
  66. $rb->[$i][$j] = ;
  67. }
  68. }
  69. }
  70. }
  71.  
  72. sub Draw {
  73. my ($ra, $rb) = (shift, shift);
  74. foreach $i ( .. $mxrow) {
  75. foreach $j ( .. $mxcol) {
  76. if ($rb->[$i][$j] != $ra->[$i][$j]) {
  77. &Point(
  78. $coord[$i][$j]{'x'},
  79. $coord[$i][$j]{'y'},
  80. $rb->[$i][$j],
  81. );
  82. }
  83. }
  84. }
  85. }
  86.  
  87. sub Point {
  88. my ($mx, $my, $light) = (shift, shift, shift);
  89. my $color;
  90. if ($light == ) {
  91. $color = $FG_WHITE|$BG_GRAY;
  92. } else {
  93. $color = $FG_WHITE|$BG_BLACK;
  94. }
  95. $OUT->Cursor($mx, $my);
  96. $OUT->FillAttr($color, , $mx, $my);
  97. }
  98.  
  99. sub KeyFunc {
  100. my $key;
  101. $key = ReadKey(-);
  102. return if (not defined $key);
  103. if ( ord($key) == ) {
  104. exit;
  105. }
  106. }
  107.  
  108. __DATA__
  109. ......................**...............
  110. ......................**...............
  111. .......................................
  112. .......................................
  113. .......................................
  114. .......................................
  115. .......................................
  116. .......................................
  117. .......................................
  118. .......................................
  119. .......................................
  120. .......................................
  121. .........*..........**...**............
  122. .......*.*............***..............
  123. ......*.*............*...*.............
  124. **...*..*.............*.*..............
  125. **....*.*..............*...............
  126. .......*.*......*.*....................
  127. .........*......**.....................
  128. .................*...*.................
  129. .....................**......*.........
  130. ....................*.*......*.*.......
  131. ...............*..............*.*....**
  132. ..............*.*.............*..*...**
  133. .............*...*............*.*......
  134. ..............***............*.*.......
  135. ............**...**..........*.........
  136. .......................................
  137. .......................................
  138. .......................................
  139. .......................................
  140. .......................................
  141. .......................................
  142. .......................................
  143. .......................................
  144. .......................................
  145. .......................................
  146. ...............**......................
  147. ...............**......................

[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. select,poll,epoll,selectors

    一 了解select,poll,epoll IO复用:为了解释这个名词,首先来理解下复用这个概念,复用也就是共用的意思,这样理解还是有些抽象, 为此,咱们来理解下复用在通信领域的使用,在通信领域中为了 ...

  2. 进程之 Process join方法其他属性与进程Queue

    Process join方法 以及其他属性 在主进程运行过程中如果想并发地执行其他的任务,我们可以开启子进程,此时主进程的任务与子进程的任务分两种情况 情况一:在主进程的任务与子进程的任务彼此独立的情 ...

  3. python web指纹获取加目录扫描加端口扫描加判断robots.txt

    前言: 总结上几次的信息收集构造出来的. 0x01: 首先今行web指纹识别,然后在进行robots是否存在.后面是目录扫描 然后到使用nmap命令扫描端口.(nmap模块在windows下使用会报停 ...

  4. FB联网无人机取得重大进展 实现首次成功着陆

    科技讯6月30日消息,据Engadget报道,在过去的几年里,世界最大社交网络Facebook始终在测试其太阳能无人飞机Aquila.2016年6月份,这种联网无人机在美国亚利桑那州的尤马进行了首次全 ...

  5. scikit-learn和tensorflow的区别

    1.功能不同 Scikit-learn(sklearn)的定位是通用机器学习库,而TensorFlow(tf)的定位主要是深度学习库.一个显而易见的不同:tf并未提供sklearn那种强大的特征工程, ...

  6. QR 码的位置检测符

    QR码的位置检测符由三个同心正方形叠加而成.分别为: 7*7 modules的黑色正方形: 5*5 modules的白色正方形 : 3*3modules的黑色正方形. 三个用于定位检测的“回”形符号应 ...

  7. 【原】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 ...

  8. xcode添加build phase

    [xcode添加build phase] xcode版本:5.0.2,找了半天,终于找到add build phase的方法,如下图.

  9. laravel中间键组

    ` php artisan make:middleware Lend这边我定义一个登陆的中间件这边要注意的就是,当条件成立的时候一定要 return $next($request);不写这个larav ...

  10. validate 不校验的解决办法

    最近使用validate.js用于项目的表单校验,调了半天,怎么都不校验,仔细对照例子发现 例子中要校验的文本框除了ID外还有name属性,而我在做的时候没有name属性,到这里终于 看到了希望,把所 ...