昨天参加Code Retreat的活动,“Code Retreat是一个一天的集中练习的活动,专注于软件开发和设计的基础”。
要了解更多信息可前往 CodeRetreat官网
通过这次活动,发现自身存在很少不足的地方。


活动主要内容是基于 生命游戏 进行不同阶段的编码,每个阶段完需要把代码删除,每上阶段的难度递增,
比如到后面不用使用 if else for 等语言特性。其实我到最后都没能写出完整的例子 囧 。
今天重新使用javascript实现了下,但还有很多不足的地方。

游戏规则

生命游戏是以基于细胞进行模拟,每个细胞周围最多有8个细胞,每个细胞有只有两种状态(活、死),游戏规则如下:
更多信息可前往 这里

  • 每个活着的细胞当其周围活着的细胞数量少于2时,变为死亡状态,相当于人口稀少。
  • 每个活着的细胞当其周围活着的细胞数量大于3时, 变为死亡状态,相当于过度拥挤。
  • 每个活着的细胞当其周围活着的细胞数量为2或者3时,继续存活。
  • 每个状态为死的细胞当其周围有3个活着的细胞时,变为活着的状态,其它时候不变。

从网上能找到一些效果很炫的例子。
下面是我的其中一个截图: 查看示例

设计思路

  • 使用二维数组存储一个20*20的表格
  • 数组中用1代表活着状态,0代表死亡状态
  • 每个细胞在页面中用 span 表示,以颜色区别不同状态
  • 当需要绘制下一个图形时,深度拷贝当前数组,计算每一个细胞周围存活数量,再计算下一代当前细胞的状态。
  • 给 span 的父元素绑定 click 事件,用到拖动改变细胞的状态, 对span自定义属性 data-cellx 和 data-celly 存放当前坐标。

后记

当做这些例子方觉得平时写的代码太少了,工作中也大部分时间都使用框架,导致基础知识严重不足。当时连如何初始化多维数组都不会了,我汗
下面记录一收获:

  1. 对于一维数组可以使用 slice 或 concat 来深拷贝,但对于多维数组则无法直接深拷贝。
  2. javascript无法直接定义多维数组, 比如这样: var arr = [][];
  3. 将span的样式设为inline-block时,即使margin padding都为0,仍然存在行间距,解决方法是使其父元素 font-size:0;

参考文档

多维数组深拷贝: http://www.cnblogs.com/matthew-2013/p/3524297.html
去除span间距: http://www.v2ex.com/t/77730

javascript小游戏--生命游戏的更多相关文章

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

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

  2. 制作一个 JavaScript 小游戏

    简评: 作者学习了编程两个月,边学边做了一个 JavaScript 小游戏,在文中总结了自己在这个过程中的一些体会,希望能给其他初学者一些帮助. 对于很多想学编程但一直没下定决心的同学来说,最大的问题 ...

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

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

  4. 用原生javascript模拟经典FC游戏公路争霸

    #用原生javascript模拟经典FC游戏公路争霸 前几天看了园子里面的随笔 [原生javascript开发仿微信打飞机小游戏](http://www.cnblogs.com/Mr-Nobody/p ...

  5. Python,OpenGL生命游戏

    初学Python和OpenGL,练手的第一个小程序life.py,这个小程序在日后会不断调整,增加类.优化判断及操作 执行效果: 按正规生命游戏的规则: 1.周围生命等于3时产生生命 2.周围生命等于 ...

  6. 应用zip压缩的javascript以及Egret H5游戏实战

    代码地址如下:http://www.demodashi.com/demo/11039.html 主要起因是策划对最快进入登录界面有硬性要求(3秒),那么最开始加载的文件越小越好.对H5的游戏程序进行压 ...

  7. HTML5与Javascript 实现网页弹球游戏

    终于效果图: 1. 使用html 5 的canvas 技术和javascript实现弹球游戏 总体流程图: 1.1 html5 canvas技术的使用 首先在html页面中定义画布. <canv ...

  8. Java实现 蓝桥杯 生命游戏

    标题:生命游戏 康威生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 这个游戏在一个无限大的2D网格上进行. 初始时,每个小方格中居住着一个活着或死了的细胞. 下一时刻每个细胞的状态 ...

  9. java实现第八届蓝桥杯生命游戏

    生命游戏 题目描述 康威生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 这个游戏在一个无限大的2D网格上进行. 初始时,每个小方格中居住着一个活着或死了的细胞. 下一时刻每个细胞的 ...

随机推荐

  1. JAVA的StringBuffer类(转载整理)____非常重要的一个类,线程安全,不用每次创建一个对象,以及和String的区别

    核心部分转载自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616330.html StringBuffer类和String一样,也用来代 ...

  2. croppic 图片裁剪

    #region 3.1.3 保存裁剪后的图片方法 +ContentResult TemplateCropImg() /// <summary> /// 保存裁剪后的图片方法 /// < ...

  3. IO流详解(半教材类型)

    这两天学习了IO流,整理了一些理论知识点,仅供参考. java流概述 一 流 从操作系统层面和文件系统,数据保存相关的是所有语言都具备的一个基本功能,java专门开发了一个包:java.io.*;ja ...

  4. 【转载】C/C++之回调函数

    [转载地址]:http://www.cnblogs.com/chenyuming507950417/archive/2012/01/02/2310114.html 在理解“回调函数”之前,首先讨论下函 ...

  5. HDU 4422 The Little Girl who Picks Mushrooms(简单题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4422 题目大意:小姑娘背着5个包去山上采蘑菇,每座山上只能用一个背包采集.三个小精灵会要她3个背包,其 ...

  6. C语言 宏/macor/#define/

    C语言 宏/macor/#define 高级技巧 1.在进行调试的时候,需要进行打印/PRINT,可以通过define进行自定义.例如,自己最常用的DEBUG_PRINT() #define DEBU ...

  7. 用Python进行语音信号处理

    1.语音信号处理之时域分析-音高追踪及其Python实现 2.语音信号处理之时域分析-音高及其Python实现 参考: 1.NumPy

  8. windows phone 生产含logo的二维码

    这几天了解二维码了解的比较多,不过就是没深入了解.google了一下生产含logo二维码的思路,就是把logo给画到生成的二维码上,还是因为二维码的纠错能力足够好啊,用Graphics对图片进行操作? ...

  9. linux 定时执行 cron指令

    linux 中的 cron 定时执行命令,先上例子:每间隙两分钟把 "Hello world"写到 /tmp/hello.txt crontab -e */2 * * * * ec ...

  10. win7下 mysql主从配置实现

    win7下学习 mysql主从复制 一.环境: 主服务器(master):192.168.1.23 mysql版本:5.5 从服务器(slave):192.168.1.24 mysql版本:5.5   ...