QClub 太原,2014年11月15日 Global Day of Coderetreat
活动时间: 2014年11月15日星期六,全天(9:00-18:00)
活动地点: 高新区体育路科技街口,大豪益达402(从KK这边的巷子进去,统一这面的4层)
活动主题: 编程道场,Global Day of Coderetreat 2014
报名地址: https://jinshuju.net/f/Jdh7pb
活动简介:
QClub 太原社区再次参与Coderetreat 全球活动。你希望锻炼自己的编程技巧吗?希望体验测试驱动开发和结对编程是什么样的吗?那就来参加这个免费的编程练习吧。在这里没有工作的压力和无奈,有的是你对编程技巧的追求以及和其他志同道合者的交流。这是软件工艺者(Software Craftsmanship)的聚会。请自带电脑并安装好开发环境和单元测试框架(保证两人一台即可)。
活动以40分钟为一个小节,中间会穿插各种限制条件来锻炼编程技巧。
什么是CodeRetreat? CodeRetreat是一个一天的集中练习的活动,专注于软件开发和设计的基础。通过给开发人员提供专注练习的机会并远离完成工作的压力,CodeRetreat这种形式已被证明是提升编程技能的有效方法。通过练习模块化和面向对象的基本原则,开发人员可以提高他们编写代码的能力并使变更成本最小化。
考虑到本地行情,笔者特地做一番剧透来吸引到在座各位。我们此次编程练习的内容是“生命游戏”(中文介绍,英文介绍),用程序代码来实现一个“细胞自动机”。当然,为了增加挑战性,每次完成任务时会添加限制条件,提高趣味性。
这个细胞的世界是由“二维数组”组成的世界,玩家扮演的是世界之外的“上帝”,数组每个元素都视为一个“细胞”,它有两个状态:生存和死亡。每个细胞与以自身为中心的周围八格细胞产生互动。对于任意细胞,规则如下:
- 当前细胞为存活状态时,当周围低于2个(不包含2个)存活细胞时, 该细胞变成死亡状态(模拟生命数量稀少);
- 当前细胞为存活状态时,当周围有2个或3个存活细胞时, 该细胞保持原样;
- 当前细胞为存活状态时,当周围有3个以上的存活细胞时,该细胞变成死亡状态(模拟生命数量过多);
- 当前细胞为死亡状态时,当周围有3个存活细胞时,该细胞变成存活状态(模拟繁殖);
可以把最初的细胞结构定义为种子,当所有在种子中的细胞同时被以上规则处理后, 可以得到第一代细胞图。按规则继续处理当前的细胞图,可以得到下一代的细胞图,周而复始。
需要注意的是“同时处理”,一次性对当前状态的数组进行处理,完毕生成另一个新的数组为下一组状态(单个细胞处理的结果不会重新参与下个细胞的运算)。
以附件的HTML版(演示例子)为例,用<td>
来表示一个个细胞,用单元格的样式名表示细胞的存活,当网页载入的时候创建好一个表格并随机的设置一些细胞的初始状态。 设表格为正方形,表格行的数量为length
,则计算一个细胞cell(i,j)
的状态可以用table.rows(i).cells(j).className
来判断。计算其周围8格的状态对(i,j)
做加减就可以,如果单元格处于边界上,则计算另一条边界上的细胞『cell(0,0)的左上角是,cell(length-1,length-1)』,这样每个细胞都有8个邻居了。
为了进行循环迭代,还要用到网页的setInterval
和clearInterval
函数。
<!-- lang: js -->
/**
* 周期性地调用一个函数(function)或者执行一段代码。
*
* @param {Function} func 要重复调用的函数
* @param {Number} delay 时间间隔,单位是毫秒
* @return {Number} 此重复操作的唯一辨识符,可以传递给clearInterval
*/
function setInterval(func,delay);
/**
* 取消掉用setInterval设置的重复执行动作.
*
* @param {Number} flag 重复操作的唯一辨识符
*/
function clearInterval(flag);
相信各位对这个游戏有了初步的印象,那么欢迎报名参加!
最后感谢活动赞助:北京博微志远信息技术有限公司。