<commit_before>##项目背景
在折腾ES6，突然想起大学时用c语言写过俄罗斯方块，本项目中主要是利用ES6的Class特性进行面向对象编程。同一时间，我在看约翰.霍兰的《涌现》和KK的《失控》，产生了对人工智能的莫大兴趣，也对面向对象思想有了更深入的理解，终极目标是想写一个自动玩俄罗斯方块的小机器人。
##设计思路
- 全面应用面向对象的设计思想，让功能内聚性强。
- 把七种方块想成独立的“生物”对象，让它能“看”到周围的世界。
- 没有使用传统的大的二维数组来表示游戏场面状态，而是让tetris自己去“看”。
- 使用html5的canvas来完成，比较象cgi编程。
- 使用最少的canvas特性，只用了fillRect,strokeRect,getImageData,clearRect等几个函数。

##运行方法
项目采用node.js v6.2.0 + electron v1.1.0 进行桌面开发，因此请先安装相关系统：
```
npm install electron-prebuilt -g
```
注：本项目采用方案能跨所有平台运行，遇权限问题，请在命令行自行添加sudo 。

请下载源代码：
```
git clone https://git.oschina.net/zhoutk/Tetris.git
```
进入项目目录：
```
cd Tetris
```
运行程序：
```
electron .
```
##交流博客
我会把心得体会写在我的博客中，地址如下：
```
https://segmentfault.com/blog/zhoutk
```<commit_msg>更新完成状态，里程碑，简单自动机完成。<commit_after>##项目背景
在折腾ES6，突然想起大学时用c语言写过俄罗斯方块，本项目中主要是利用ES6的Class特性进行面向对象编程。同一时间，我在看约翰.霍兰的《涌现》和KK的《失控》，产生了对人工智能的莫大兴趣，也对面向对象思想有了更深入的理解，终极目标是想写一个自动玩俄罗斯方块的小机器人。
##设计思路
- 全面应用面向对象的设计思想，让功能内聚性强。
- 把七种方块想成独立的“生物”对象，让它能“看”到周围的世界。
- 没有使用传统的大的二维数组来表示游戏场面状态，而是让tetris自己去“看”。
- 使用html5的canvas来完成，比较象cgi编程。
- 使用最少的canvas特性，只用了fillRect,strokeRect,getImageData,clearRect等几个函数。

##运行方法
项目采用node.js v6.2.0 + electron v1.1.0 进行桌面开发，因此请先安装相关系统：
```
npm install electron-prebuilt -g
```
注：本项目采用方案能跨所有平台运行，遇权限问题，请在命令行自行添加sudo 。

请下载源代码：
```
git clone https://git.oschina.net/zhoutk/Tetris.git
```
进入项目目录：
```
cd Tetris
```
运行程序：
```
electron .
```
##交流博客
我会把心得体会写在我的博客中，地址如下：
```
https://segmentfault.com/blog/zhoutk
```
##最新进度
- 可以手动玩俄罗斯方块
- 提供自动模式，简单评估算法，平均大概能消500行左右，现最高记录消除1398行。
{'fraction_non_alphanumeric': 0.15719063545150502, 'fraction_numerical': 0.016722408026755852, 'mean_word_length': 8.35, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 4, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7497134', 'n_tokens_mistral': 1163, 'n_tokens_neox': 1294, 'n_words': 67}