Super-Template-Tetris, Tetris作为 C++ 模板元编程

分享于 

2分钟阅读

GitHub

  繁體 雙語
Tetris as a C++ Template Metaprogram
  • 源代码名称:Super-Template-Tetris
  • 源代码网址:http://www.github.com/mattbierner/Super-Template-Tetris
  • Super-Template-Tetris源代码文档
  • Super-Template-Tetris源代码下载
  • Git URL:
    git://www.github.com/mattbierner/Super-Template-Tetris.git
    Git Clone代码到本地:
    git clone http://www.github.com/mattbierner/Super-Template-Tetris
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/mattbierner/Super-Template-Tetris
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    超级模板俄罗斯方块

    Tetris作为 C++ 模板元编程的实现。 所有游戏逻辑在编译时实现。 运行时程序只需要打印出游戏世界并将它的序列化以便下一次播放。

    帖子讨论实现问题。

    游戏

    每次重新编译游戏时都会播放游戏的一个步骤。

    开始新游戏:

     
    $./reset.sh
    
    
    
     

    使用编译器标志来控制输入:

    
    $ clang++ main.cpp -std=c++1z -Wno-gnu-string-literal-operator-template -D COMMAND -o tetris ;./tetris
    
    
    
    

    有效命令包括:

    • LEFT - 将块移动到左边。
    • RIGHT - 将块右移一个。
    • LROT - 旋转左侧的( 逆时针计数器)。
    • RROT - 旋转块右侧( 顺时针)。
    • HARD - 硬删除当前块。 这把下来然后放下来。
    • SOFT - 把它放下,但不要放下来。
    • DOWN - 将块向下移动 4.
    • NONE/其他任何事情-,one。

    所有命令都将继续下降。 移动在移动之前发生。 在自动放置( 也就是说,当一个块与一个块碰撞时,只要没有进一步的运动,它就会被放在下一步。) 之前,块有一个步骤延迟。

    编译

    • -std=c++1z 因为程序使用了几个C++17特性。
    • -Wgnu-string-literal-operator-template 用于生成编译时间字符串。

    示例

    屏幕截图:

    Initial game

    Clearing a row

    Clearing 3 rows

    Game over


    TEMP  template  META  Tetris  
    相关文章