基于c++的控制台有声俄罗斯方块(含源码)

俄罗斯方块(控制台版本)

Tetris_base_on_console
本俄罗斯方块基于C++ 150行代码实现俄罗斯方块而完成,在其基础上修改了屏幕刷新机制,增加了游戏失败判断,为其编写了开始界面、游戏指南、游戏设置、过场动画以及多种音乐音效、其中包括静音,正常版以及哲♂学版。
基于c++的控制台有声俄罗斯方块(含源码)_第1张图片基于c++的控制台有声俄罗斯方块(含源码)_第2张图片基于c++的控制台有声俄罗斯方块(含源码)_第3张图片基于c++的控制台有声俄罗斯方块(含源码)_第4张图片基于c++的控制台有声俄罗斯方块(含源码)_第5张图片基于c++的控制台有声俄罗斯方块(含源码)_第6张图片

要点

在压缩包内的ReadMe文档中亦有如下内容。

音频方面

PlaySound()函数能播放各种格式的音频,但是仅有wav格式的音频可以循环播放;可以选择播放完才返回函数或是开始播放就返回函数,但是不能混合播放,同一时刻仅能播放一个音频,因此背景音乐和游戏音效仅有一个可以使用之。由于其下一个音频会立刻覆盖上一个的特点,天生适合于按键音效。

mciSendString()仅能播放MP3格式的音频,但是可以混播,和PlaySound()也不冲突,命令写为“play xxx repeat”便可以循环播放。另外:不是把.mp3改成.wav就算修改格式成功了。艹。

音频据说也可以搞成资源文件,但是嫌麻烦没用。

界面方面

首先控制台只支持八种颜色,不过也可以调底色。初始颜色不在八种颜色当中,红蓝绿三色混合更白,三色皆无为灰色。设置后就回不去了。

调整光标位置需要获取一次缓冲区句柄。光标会随之后的输出移动。在已有输出的位置再输出会覆盖原输出。ascii只占一位,Unicode占两位,两位是一个方块的长宽。调整光标位置时间开销蛮大,能以直接输出达成目的尽量直接输出。

游戏方面

俄罗斯方块的失败判断条件上,构思应该可以用狄杰斯特拉算法给当前空间画一个生成树,如果能从第一层长到最后一层就算失败,不过嫌麻烦并且时间开销大没搞,换了个简单粗暴的:每层都有方块并且当前操纵的方块下面也有方块就算挂。

方块虽说只有七种,但是旋转后与原来不同完全可以算另一种,一共十九种,出于程序方便考虑可以算28种。初始时在x=4, y=1处开始生成,方块编码以此为原点依次生成四格,+10相当于在下一行生成。每次移动或旋转会判断是否碰壁。

整个游戏窗口250格,在代码中就是node[250],空处为0,已落下的为1,操纵着的方块就是在0中不断移动的1。

在玩之前请将输入法调至英文,鼠标请不要在窗口内点击,若是因此而导致游戏窗口卡住,请随便点击一个游戏按键(adsw),因为可以刷新屏幕。

总结

有一说一,很简单。原版的150行俄罗斯方块已经建立了相当的基础,虽然每次刷新的方法不是清屏再输出而是直接往下输出250格搞得很卡,并且没有失败判断而搞得游戏体验很差。

你可能感兴趣的:(c++)