chinkiko / tetris

轻松10步用es6写出俄罗斯方块:tada:

Home Page:https://timmylan.github.io/tetris/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

目的

  • 为熟悉es6增加趣味性
  • 提高开发动力
  • balabalabala....编不下去了

注意

俄罗斯方块用es6写,无经过babel转es5,示例请用支持es6的chrome
俄罗斯方块用es6写,无经过babel转es5,示例请用支持es6的chrome.
俄罗斯方块用es6写,无经过babel转es5,示例请用支持es6的chrome.

##实现

第零步:构思俄罗斯方块的形状&规则

  • 形状 俄罗斯方块 每个方块都可看作一个二维数组,需要填充的部分为1,留空为0.
  • 规则
    • 上方向键 ===> 方块顺时针形变
    • 左方向键 ===> 方块向左移动
    • 右方向键 ===> 方块向右移动
    • 空格键 ===> 方块加速下落
    • 方块掉落自动掉落
    • 方块集齐满一排消除
    • 方块到顶部视为失败

第一步:让方块出现&动起来

在`document.body`添加一个方块,并绑定`document.onkeydown`,让方块跟随键盘方向键动起来.

第二步:让方块在规定画布上动起来

在`document.body`添加一个画布,每次方块运动前判断对应方向能否移动

边界设定

第三步:根据数组矩阵画出俄罗斯方块

  • 根据数组矩阵判断值为1的下标,利用得到的下标对各个小方块进行定位,从而得出一整块俄罗斯方块.
  • 判断能否移动则根据绘制出的俄罗斯方块取最值,根据最值比对边界即可. 偏移量最值比较
  • 矩阵判断&最值与边界对比js
  • 本步骤示例

第四步:俄罗斯方块形变

第五步:俄罗斯方块自由下落

第六步:俄罗斯方块消除

  • 每次俄罗斯方块下落结束时,判断每一行小方块个数
  • 方块个数等于画布宽度/方块,则取出该行方块集合并从document.body消除
  • 消除后将高度高于该消除行的方块掉落一个方块高度 方块消除
  • 消除行js
  • 本步骤示例

第七步:加速下落

  • 方块在按空格键的时候,下落2个单位的BLOCK_SIZE,也就是40px
  • 需要在canMove函数中添加displacement(位移)参数标识方块下落的位移量
  • 判断方块是否到达最高位置,需要加上位移量的距离
  • 加速下落js
  • 本步骤示例

第八步:判断游戏GG

第九步:增加随机下落方块

第十步:增加游戏信息

传送门

About

轻松10步用es6写出俄罗斯方块:tada:

https://timmylan.github.io/tetris/

License:MIT License


Languages

Language:JavaScript 90.3%Language:CSS 5.6%Language:HTML 4.1%