这个作业属于哪个课程 | 面向对象程序设计2020 |
---|---|
这个作业的要求在哪里 | 我罗斯方块 |
这个作业的目的 | 实现游戏我罗斯方块,熟悉面向对象编程方法 |
作业正文 | 我罗斯方块 |
项目地址 | 我罗斯方块 |
其他参考文献 | |
小组成员 | 041901328 |
一.游戏内容
基础内容与俄罗斯方块一样。
俄罗斯方块
区别在于,我罗斯方块是同屏幕,双人对战游戏,双方一人使用 wasd ,一人使用上下左右控制,当一名玩家消去一行,就会让另一名玩家最底下增加随机一行。
详细
以玩家一为例,AD 控制方块左右移动,W 转换方块朝向,S 快速下落,使得方块落到底端。当玩家方块填满一整行时,会消除这行方块,然后使得玩家二的方块底部随机增加一行带空格的。玩家二同理。当一名玩家方块高度达到一个高度时就会结束游戏,该玩家失败。
二.设计
(设计不完整,缺陷很大,正在修补)
1.游戏界面类
class gamewindow
{
public:
//void Map_initialize(); // 地图初始化函数
//画方框
void Map_frame(HDC hdc)
{
HDC Fhdc = CreateCompatibleDC(hdc); //创建兼容性DC
HBITMAP hbitmap=CreateCompatibleBitmap(hdc, 900, 650);//创建一张纸
SelectObject(Fhdc, hbitmap);//关联起来
Rectangle(Fhdc, 140, 0, 440, 600);
Rectangle(Fhdc, 460, 0, 760, 600);
Rectangle(Fhdc, 0, 0, 140, 600);
Rectangle(Fhdc, 440, 0, 460, 600);
Rectangle(Fhdc, 760, 0, 900, 600);
BitBlt(hdc, 0, 0, 900, 650, Fhdc, 0, 0, SRCCOPY);
DeleteObject(hbitmap);
DeleteDC(Fhdc);//释放dc;
}
int window_size1[20][10] = { 0 };// 游戏界面的尺寸
int window_size2[20][10] = { 0 };
//绘制方块
void Print_block1(HDC Fhdc,int a[][10])
{
int i = 0, j = 0;
for (i = 0; i < 20; i++)
{
for (j = 0; j < 10; j++)
{
if (a[i][j] == 1)
{
Rectangle(Fhdc, 140+30*j, 30*i, 140+30*j+30, 30*i+30);
}
}
}
}
void Print_block2(HDC Fhdc, int a[][10])
{
int i = 0, j = 0;
for (i = 0; i < 20; i++)
{
for (j = 0; j < 10; j++)
{
if (a[i][j] == 1)
{
Rectangle(Fhdc, 460 + 30 * j, 30 * i, 460 + 30 * j + 30, 30 * i + 30);
}
}
}
}
//创建随机块
void Block_CR()
{
srand((unsigned int)time(NULL));
int n = rand() % 7;
block block1;
int i = 0, j = 0;
switch (n)
{
case 0:
for (i = 0; i < 2; i++)
{
for (j = 0; j < 4; j++)
{
window_size1[i][j + 3] = block1.block_shape1[i][j];
}
}
for (i = 0; i < 2; i++)
{
for (j = 0; j < 4; j++)
{
window_size2[i][j + 3] = block1.block_shape1[i][j];
}
}
break;
case 1:
for (i = 0; i < 2; i++)
{
for (j = 0; j < 4; j++)
{
window_size1[i][j + 3] = block1.block_shape2[i][j];
}
}
for (i = 0; i < 2; i++)
{
for (j = 0; j < 4; j++)
{
window_size2[i][j + 3] = block1.block_shape2[i][j];
}
}
break;
case 2:
for (i = 0; i < 2; i++)
{
for (j = 0; j < 4; j++)
{
window_size1[i][j + 3] = block1.block_shape3[i][j];
}
}
for (i = 0; i < 2; i++)
{
for (j = 0; j < 4; j++)
{
window_size2[i][j + 3] = block1.block_shape3[i][j];
}
}
break;
case 3:
for (i = 0; i < 2; i++)
{
for (j = 0; j < 4; j++)
{
window_size1[i][j + 3] = block1.block_shape4[i][j];
}
}
for (i = 0; i < 2; i++)
{
for (j = 0; j < 4; j++)
{
window_size2[i][j + 3] = block1.block_shape4[i][j];
}
}
break;
case 4:
for (i = 0; i < 2; i++)
{
for (j = 0; j < 4; j++)
{
window_size1[i][j + 3] = block1.block_shape5[i][j];
}
}
for (i = 0; i < 2; i++)
{
for (j = 0; j < 4; j++)
{
window_size2[i][j + 3] = block1.block_shape5[i][j];
}
}
break;
case 5:
for (i = 0; i < 2; i++)
{
for (j = 0; j < 4; j++)
{
window_size1[i][j + 3] = block1.block_shape6[i][j];
}
}
for (i = 0; i < 2; i++)
{
for (j = 0; j < 4; j++)
{
window_size2[i][j + 3] = block1.block_shape6[i][j];
}
}
break;
case 6:
for (i = 0; i < 2; i++)
{
for (j = 0; j < 4; j++)
{
window_size1[i][j + 3] = block1.block_shape7[i][j];
}
}
for (i = 0; i < 2; i++)
{
for (j = 0; j < 4; j++)
{
window_size2[i][j + 3] = block1.block_shape7[i][j];
}
}
break;
}
}
private:
};
2.方块类
class block
{
public:
void Block_falling(); // 方块下落函数
void Block_speed(); // 方块加速函数函数
void Block_move(); // 方块左右移动函数
void Block_changeshape(); // 方块变形控制函数
int block_shape1[2][4] = { 1,1,0,0,
0,1,1,0 };
int block_shape2[2][4] = { 0,1,1,0,
1,1,0,0 };
int block_shape3[2][4] = { 0,0,1,0,
1,1,1,0 };
int block_shape4[2][4] = { 1,0,0,0,
1,1,1,0 };
int block_shape5[2][4] = { 0,1,0,0,
1,1,1,0 };
int block_shape6[2][4] = { 1,1,0,0,
1,1,0,0 };
int block_shape7[2][4] = { 1,1,1,1,
0,0,0,0 };
};
3.玩家类
class player //玩家类
{
public:
int score; //玩家分数
void player_initialize(); //玩家初始化函数;
private:
string name; //玩家名称
};
4.游戏引擎类
class gameengine // 游戏引擎类
{
public:
void Game_begin(); // 游戏开始函数
void Creat_block_random(); // 随机生成方块函数
bool Judge_bottom(); // 判断方块是否触底函数
bool Judge_top(); // 判断方块是否触顶
bool Judge_delete(); // 判断是否可以消行
void Block_delete(); // 消行函数
void Block_add(); // 增行函数
private:
};
三.渲染方法
用win32窗口来作为游戏的界面,在二维数组对应的图形界面画出方块。