lihn 2020-01-07
一、摘要
目前支持Win10的控制台和Ubuntu的终端正常显示(其他平台没试过,不同的终端可能会造成排序混乱);
运行图:
代码地址:https://github.com/Silentdoer/RustTetris
二、实现原理
2.1根本原理其实就是一个二维的Vec,即Vec<Vec<CanvasPixel>>,每一个CanvasPixel代表一个展示的最小单元,比如图中的方块□;
2.2每个方块是一个CanvasPiece,即每个CanvasPiece由四个CanvasPixel组成,每个CanvasPiece有它自己的原点坐标,供后续的旋转之类的判定;
2.3每个方块下降其实就是判断它里面的Piece的下一个坐标在Canvas里(Map)是空白还是□,是□则说明不允许下降(当然这部分判定还有一些其他情况要考虑,比如还没显示的部分,或者下一个坐标的Piece其实是自己的一部分等);
2.4每个方块的旋转也是根据原点旋转后的坐标是否是□以及是否出界等判断来判断是否可以旋转;
2.5每次方块不能再下落时都要判断是否可以消除,消除则对Canvas进行下移;
2.6如果新的Piece不能下落,且存在Pixel的y轴是负数,说明游戏结束;
2.7 。。。上面是主要的一些判断内容,具体可以看代码里的canvas_piece里的can_rotate,rotate,can_dropdown,dropdown,in_self这些方法;