我罗斯方块的实现
| 作业描述 | 详情 |
|---|---|
| 这个作业属于哪个课程 | 2020年面向对象程序设计 |
| 这个作业的要求 | 我罗斯方块 |
| 这个作业的目标 | ①设计详解②选用的渲染方法③收集到的资料④ 游戏界面示意图 |
| 作业正文 | 我罗斯方块还没实现的努力实现 |
| 参考文献 | 俄罗斯方块C++的实现 /// C++【EasyX】俄罗斯方块 ///Windows控制台下绘制简单图形 |
| 成员 | 031903149肖若烨 031903150张晓蓉 |
一.游戏内容
基础内容与俄罗斯方块一样,不过双人对战版还需添加P2界面以及与P1之间消长与否的利弊关系。P1使用AD控制方块的左右移动,W转换方块朝向,S可以控制方块的下落速度。P2使用上下左右箭头,道理与之相通。
当一方玩家的一行填满后将消除这一行的方块,并且另一名玩家的底部会增加一行空行,当某一玩家的方块到达一定的高度时,游戏结束,另一方胜利。
只有一些零零碎碎的思路和不成文的代码。会有很多落下的东西。
网上看了点单人俄罗斯方块的资料和一些其他双人小游戏的代码,拼凑出的一点思路。
二. 系统需显示的内容
- 游戏的界面
- 分数的显示
三. 游戏设计
1.游戏的状态常量
enum STATUS
{
BEGIN,//游戏开始
RUNNING,//游戏进行中
FAIL,//游戏失败
PASS,//游戏成功
FAILING,//游戏失败界面
PASSING//游戏成功界面
};
2.游戏者类(每个游戏者都有一个独立的游戏区域)
class PLAYER
{
private:
STATUS m_status;//游戏状态
char* m_name;//游戏者名称
char* m_keys;//按键
public:
PLAYER(char* name,char* keys);//构造函数
void Hit(char key);//游戏者的按键
void Draw();//绘制该游戏者的游戏界面
private:
void Init(); // 初始化当前游戏者的游戏信息
void DrawFrame(); // 绘制游戏界面的外框
void DrawRow(int baseY, int iTask); // 绘制游戏界面中的一行任务
void DrawPass(); // 绘制通过游戏后的界面
void DrawFail();
};
3.方块类
class BLOCK{
public:
int zt[10][21]; //每个方格状态0未填充1已填充
int score,xh; //分数和消行
char scores[50],xhs[50]; //分数显示字符串,消行显示字符串
BLOCK(int x1,int y1,int index1);
BLOCK(BLOCK &a);
void displayBlock(); //显示块
void movew(int movement); //移动
void spin(); //旋转
void clearone(int i); //清除一行
void display(); //输出信息
void initgame(); //初始化游戏
private:
int x,y,index;
};
4.渲染
Windows控制台下绘制简单图形
构造函数
PLAYER::PLAYER(char* name,char*keys)
{
m_strName=name;
m_keys=keys;
Init();//初始化游戏者
}
初始化当前游戏者游戏信息
void PLAYER::Init()
{
// 初始化任务
m_iTask= 0; // 从第一个任务开始
m_status= BEGIN; // 设置游戏初始状态
m_failFrame = 0; // 重置失败后的动画的帧计数
// 初始化游戏界面
DrawFrame();
}
绘制该游戏者的界面
void PLAYER::Draw()
{
switch (m_status)
{
case PASSING: // 游戏成功后的动画
{
m_status = PASS;
DrawPass();
break;
}
case BEGIN: // 游戏初次开始
case RUNNING: // 游戏运行中
{
/*未实现的*/
}
case FAILING: // 游戏失败后的动画
DrawFail();
break;
case PASS: // 游戏通过后的成绩显示
case FAIL: // 游戏失败后的成绩显示
break;
}
}
绘制游戏界面的画外框
void PLAYER::DrawFrame()
{
// 画外框
// 画姓名区
// 画成绩区
// 画控制区
}
浙公网安备 33010602011771号