我罗斯方块

这个作业属于哪个课程 面向对象程序设计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窗口来作为游戏的界面,在二维数组对应的图形界面画出方块。

四.游戏界面示意图(原始版本)

原文地址:https://www.cnblogs.com/wangmou-233-1024-com/p/12823118.html