C++ 实现俄罗斯方块

说明:文章内容均截选自用户“Gamerchen”发布在实验楼上的教程【C++ 实现俄罗斯方块】,未经允许,禁止转载;

俄罗斯方块是很多人的入门游戏啊,小时候常常拿着游戏机玩,现在学了编程,你是否有想过自己开发一款俄罗斯方块呢,比如像下面这样子的:

看起来很有程序员风格啊,上图是实验楼教程【C++ 实现俄罗斯方块】最后的效果图,如果你也想开发一个这样的俄罗斯方块,可以点击教程进行学习哦~

下面是开发这样子俄罗斯方块的原理及关键函数设计,如果你不想直接看详细的开发步骤和代码,也可以先看看下面的内容哦~

开发原理

1 设计前的分析

在开始程序编写之前,我们要先分析程序设计需要实现哪些功能,划分为哪些模块,在俄罗斯方块中我们首先想到的应该是显示方块,其次是方块的下落,左右移动,旋转,最后的层满消行,另外一个基本的俄罗斯方块游戏还应该有下一个方块形状的提示功能。

所以我们编程中需要解决的问题有:

  • 显示方块
  • 实现方块的移动
  • 方块旋转
  • 对层满的方块消行
  • 提示下一个方块形状

2 基本图形

每个方块由四个 box 组成,从游戏框的中心位置掉落,在框内不碰撞边界和其他方块的情况下可以进行旋转。

3 NCURSES库的使用

简单地说,NCURSES 是一个从 System V Release 4.0 (SVr4) 中 CURSES 的克隆,这是一个可自由配置的库,完全兼容旧版本的 CURSES,是一个可以使应用程序直接控制终端屏幕显示的库。

NCURSES封装了底层的终端功能,包含了一些创建窗口的函数,并且有Menu、Panel 和 Form对CURSES基础库的扩展,我们可以建立一个同时包含多窗口(multiple windows)、菜单(menus)、面板(panels)和表单(forms)的应用程序。

窗口可以被独立管理,例如让它卷动(scrollability)或者隐藏。 菜单(Menus)可以让用户建立命令选项,从而方便执行命令。而窗体(Forms)允许用户建立一些简单的数据输入和显示的窗口。面板(Panels)是 NCURSES 窗口管理功能的扩展,可以用它覆盖或堆积窗口。

关键函数设计

头文件: 首先包含头文件以及定义一个交换函数和随机数函数,后面用到(交换函数用来做方块的旋转,随机数用来设置方块的形状)

定义类:

设置方块形状: 通过 case 语句定义了7种方块的形状,在每次下一个方块掉落之前都要调用以设置好它的形状以及初始位置

旋转函数: 用了一个比较简单的算法对方块进行旋转,类似于矩阵的旋转,先将 shape 数组进行斜对角线对称化,再进行左右对称,便完成了旋转,需要注意的是要判断旋转后方块是否出界或重合,如果是,则取消本次旋转。

移动函数:如果玩家没有按下任何按键,方块需要慢速下落;

重复函数:每次移动或旋转之后要进行判断的函数;

层满函数:对方块已满的行进行消除,每当一个方块向下移动停止后都需要进行判断。

代码实现

上面对开发这样一个俄罗斯方块进行了原理分析,也介绍了关键函数的设计,不知道你看完之后是否已经会开发了呢?

如果还不会开发,那么不用着急,点击【C++ 实现俄罗斯方块】即可免费学习如何开发啦~

相关推荐