Skip to content

DBWGLX/SZU_Tetris

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Computer Graphics Course - Shenzhen University
Mid-term Assignment - Tetris implementation sample code

============================================================



GIF 2024-10-18 18-35-41

简介:

REPO SIZE CODE SIZE License

这是一个基于OpenGL的cpp代码而实现的俄罗斯方块游戏。

基于已有框架代码完成。

框架代码在另一个分支“blank_code”中。(※ 直接下载master中的code无法直接运行,可以先下载blank_code中的cmake文件,cmake构建后,直接把这里的main粘过去即可正常运行)(环境安装也在另一个分支)

游戏时请使用英文输入法,否则无法识别字母按键。


项目介绍

项目坐标系:

image

!注意行是y坐标!

方块格式:

image


image

得分在终端打印,通过 \r 的方式在同一行刷新


暂停功能:

image

再次按P键即可解除暂停。


游戏失败画面:

image

此时按R仍可以重新游戏,并且只是清空board和颜色,并没有调用init()。


代码解析

实现的功能:

image

1.不同形状块的绘制:

image

2.不同颜色:

image

3.主循环:

image

每次while执行allFallsDown()让所有方块下移,间隔是1s,间隔在其中的userOptions()内部停留实现的。

forPause()

forPause()是暂停检查函数,每个间隙都会检查是否是暂停状态,随时能够暂停与开始。暂停的逻辑就是while不断检测

image

while (checkIfGameOver())

当最上方格子被占用,游戏结束,进入该循环,并打印结束信息。等待用户退出或者重新开始。

userOptions()用户操作部分:

image

循环20次,每次停留50ms(共1 s ,也就是说用户可以在1s内操作20次并且及时回显),每次也会检查键盘按动的时间,是否有行满,并及时回显。

allFallsDown()

每秒的下移,如果下移失败,固定这个方块,开始下一个方块。

image

4.其他函数的实现:

void checkfull()

image

image

void restart()

image

Note 打印函数:

image

随机数生成:

Cpp的方式

image

void newtile()

首先是形状的确定,这里的switch写法有些繁琐,可以用个vector来简化,如接下来的颜色选择(本文最开始部分已展示颜色的初始化)。

image

image

About

cpp game —— tetris

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published