VC写的双人版俄罗斯方块

    以前写过C++版的俄罗斯方块,后来老师让写双人版,刚开始大家都认为是把所有的代码copy一遍就行了,但实际并不是这样,这样做并不能实现双人版。

    在老师的提示下,我们写出来C++版的俄罗斯方块游戏,现在把它移植到VC下,让界面更好看些。

一.  功能需求: 

1. 能进行双人模式:

这是程序的主要功能。

2. 能进行下一砖块的预测:

这也是俄罗斯方块游戏的基本功能,可以在这个基础上进行扩展其他功能,如不同于经典模式的砖块显示等来增加难度。

二.  总体设计计:

1.矩形框类的设计:

设计CBin类描述Tetris游戏的矩形框,用image的二维数组来描述这个矩形框。设置不同的值显示不同颜色的矩形,若没有砖块则为0。

2.砖块的设计:

设计CBrick抽象类来设计砖块,应用多态性的原理,其他不同类型的砖块类继承CBrick,来设计不同的砖块。

3.砖块在面板中的显示设计:

   在视图类中设计并显示砖块。

三.  详细设计:

1.矩形框类的设计:

设计CBin类描述Tetris游戏的矩形框,用image的二维数组来描述这个矩形框。设置不同的值显示不同颜色的矩形,若没有砖块则为0。

CBin类的五个成员函数:

(1)  CBin(unsigned int unsigned int h)

构造函数,用来初始化数据成员,width和height,并为image分配空间并初始化。

(2)  ~CBin()

析构函数,删除在构造函数中为image分配的空间。

(3)  Void getImage(unsigned char*destImage)

将image的数据拷贝到destImage,你可以假设destimage指向的空间足够容纳image的空间。

 

(4)  Void setImage(unsigned char**srcImage)

把srcImage中的数据拷贝到image,你可以假设srcImage是一个合法的指针。

(5)  Unsigned int removeFullLines()

检查image,如果任何一行完全填满,则删除这一行,并让上面一行的数据下移,返回删除的总行数。

  设计代码如下:

class CBin {
    private:
        unsigned char** image;
        unsigned int width;
        unsigned int height;
        
    public:
        CBin(unsigned int w, unsigned int h);
        ~CBin();
       
        unsigned int getWidth() { return width; };
        unsigned int getHeight() { return height; };
        
        void getImage(unsigned char** destImage);
        void setImage(unsigned char** srcImage);
        
        unsigned int removeFullLines();
};
 CBin::CBin(unsigned int w, unsigned int h)
{
	width=w;
	height=h;
	image = new unsigned char* [height];
    for (unsigned int i = 0; i<height; i++) 
	{
        image[i] = new unsigned char [width]; 
		for (unsigned int j = 0; j<width; j++) 
		    image[i][j]=0;
    }
}
CBin::~CBin()
{
	for (unsigned int i=0; i<height; i++) {
        delete image[i];
    }
    delete[] image;
}
void CBin::getImage(unsigned char** destImage)
{
     for (unsigned int i = 0; i<height; i++) 
    	 for (unsigned int j = 0; j<width; j++) 
		    destImage[i][j]=image[i][j];
}
void CBin::setImage(unsigned char** srcImage)
{
	   for (unsigned int i = 0; i<height; i++) 
    	 for (unsigned int j = 0; j<width; j++) 
		    image[i][j]=srcImage[i][j];

}
unsigned int CBin::removeFullLines()
{
	unsigned int flag,EmptyLine=0;
    unsigned int i,j,m;
	for (i=0; i<height; i++) 
	{
		flag=0;
		for (j=0; j<width; j++) 
		{
			if (image[i][j]==0 )
				flag=1;
		}
        //一行完全被填满
		if(flag==0)  
		{
			for (j=0; j<width; j++) 
			{
				image[i][j]=0;   
			}
			//消除整行
			for(m=i; m>0; m--)
            {
				for (j=0; j<width; j++) 
				{
				   image[m][j]=image[m-1][j];
				}
			}
            for (j=0; j<width; j++) 
			{
				   image[0][j]=0;
			}
            EmptyLine++;  //记录消的行数

			i--;
		
		}
		
	}
     return EmptyLine;   
}


 

2.砖块的设计:

设计CBrick抽象类来设计砖块,应用多态性的原理,其他不同类型的砖块类继承CBrick,来设计不同的砖块。

CBrick类的成员函数:

(1)  int shiftLeft(CBin *bin

将砖块在游戏的矩形框内左移一位。注意座椅可能产生冲突

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值