Silentdoer

导航

用Rust写一个控制台的俄罗斯方块

一、摘要

目前支持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这些方法;

posted on 2020-01-07 12:45  Silentdoer  阅读(780)  评论(0编辑  收藏  举报