我罗斯方块第一次作业
我罗斯方块第一次作业
这个作业属于哪个课程 | 2020面向对象程序设计张栋班 |
---|---|
这个作业要求在哪里 | 我罗斯方块 |
这个作业的目标 | 讲述设计,选用的渲染方法,收集到的资料,游戏界面示意图 |
作业正文 | 我罗斯方块第一次作业 |
其他参考文献 | GreedySnake、C++俄罗斯方块、俄罗斯方块的源码实现 |
本次作业GitHub
小组成员:
- 031902215 吕航
- 031902218 阙嘉毅
- 031902226 余佳硕
关于设计
游戏规则
- 按键功能:
- W、↑:转换方块朝向;
- S、↓:加速方块下落;
- A、←:控制方块向右移动;
- D、→:控制方块向右移动。
- 方块种类:
- 基本规则:
- 移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。
- 方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的方块出现在区域上方开始落下;
- 同屏幕,双人对战游戏,双方一人使用 WASD ,一人使用上下左右控制;
- 当一名玩家消去一行,就会让另一名玩家最底下增加随机带有空格的一行;
- 当其中一个玩家的未被消除的方块堆放的高度超过场地所规定的最大高度,则游戏结束;
类的设计
本次作业设计了四个类,分别为:
- Game:控制游戏的进度
- Interface:负责页面的渲染
- Player:储存玩家的各种信息
- Block:管理方块
Game类负责控制整个游戏的进行,包括模式的选择(单、双人)以及时间循环;Block用于处理方块的生成,旋转;Player类用于处理玩家的名字,得分,以及玩家的已经静止的方块图map,其中也包含对于一个玩家消行后,对另一个玩家底部随机方块的生成;在Interface中负责整个游戏界面的绘制,负责将Player和Block中的数据呈现到屏幕上,以及游戏页面图案的绘制。
详细类成员函数及变量见Github
关于渲染方法
控制台,利用windows.h头文件中的函数实现页面的绘制;
Linux下利用unistd.h头文件中的函数中实现页面的绘制;
游戏界面示意图
-
模式选择(方案1)
-
模式选择(方案2)
-
单人模式(玩家名字输入)
-
单人模式(游戏界面)
-
双人模式(玩家名字输入)
-
双人模式(游戏界面)
关于遇到的问题
问题描述:
在Block类的初始化上,需要对类中的存储方块类型的4*4二维数组(共有19个)进行初始化,遇到困难
解决方法:
-
方案一:可将类中存储方块类型的数组声明在类外并初始化
-
方案二(暂时采用):考虑每个存储方块类型的数组只需将四处的值赋值为1,所以在构造函数中添加以下代码:
memset(BlockType_1form_1, 0, sizeof(BlockType_1form_1)); BlockType_1form_1[1][0]=1;// ■ BlockType_1form_1[1][1]=1;// ■ BlockType_1form_1[1][2]=1;// ■ BlockType_1form_1[1][3]=1;// ■
实现对一个方块的初始化
无论哪方案都将使代码变得很长,欢迎大佬提出意见和解决方案