//类用到的类型定义 typedef struct { POINT pt[MAXBLOCKNUM];//各小方块在网格中的索引 int ncount;//小方块数 }RUSSIAN;
class Russian { public:
//类的公有函数 Russian(); void init(COLORREF blockcolor,COLORREF blocklinecolor,COLORREF removecolor,int blocksize,int xindex,int yindex); int randomblock(int shapeindex);//随机产生一个方块 int drawblock(HDC hdc,int left,int top,COLORREF brushcolor,COLORREF pencolor); int virtualmoveblock(int *falled,int m,int n,int incre,int *adjust,int hv); int rotate(HDC hdc,int left,int top,int *falled,int m,int n); int coordinaterotate(int *falled,int m,int n); void trans(POINT *pt); int linefinished(int *falled,int m,int n); int minmax(int xy,int flag); void mov(int incre,int flag); int setfalled(int *falled,int m,int n); int getblock(HDC hdc,int left,int top,int shapeindex); ~Russian();
private: //类的私有属性 POINT block[MAXBLOCKNUM];//方块中各小方块的位置索引 int ncount;//方块可分成几个小方块 static RUSSIAN russianshape[SHAPENUM];//方块形状描述数组 COLORREF m_blocklinecolor;//方块边框颜色 COLORREF m_blockcolor;//方块颜色 COLORREF m_removecolor;//擦除方块所用颜色 int m_blocksize;//方块尺寸 int m_xindex;//方块x坐标偏移m_xindex个m_blocksize单位 int m_yindex;//方块y坐标偏移yindex个m_blocksize单位
int Russian::virtualmoveblock(int *falled,int m,int n,int incre,int *adjust,int hv) //功能:假设水平或垂直方向移动方块incre增量,是否会遇到障碍(边界或者falled) //参数: //1.pt为POINT数组的起始地址 //判断n个POINT范围内是否有边界或者障碍(falled) //3.incre 坐标增量 //4.adjust存储新的增量(单位为BLOCKSIZE),即实际可行的移动的网格数 //5.hv 0或1,分别表示水平方向、垂直方向 //返回值:-1表示参数错误,0表示可以移动,1表示水平有边界或者障碍,2表示垂直有边界或障碍(randomblock) { POINT *p; int index; int i; int resflag=0;//返回值变量,初始为0 int temp;//临时存储变量 int direction;//移动方向,1或者 -1
int Russian::coordinaterotate(int *falled,int m,int n) //原理:(x1,y1)绕(x0,y0)顺时针旋转90度,新坐标为:(x0+y0-y1,y0-x0+x1) //功能:将方块绕点(0+pt->x,0+pt->y)顺时针旋转90度,坐标变换(网格坐标系中) //返回值,1 已转换,0不能转换 { int resflag=1; POINT *p1,*p2;
POINT pt[MAXBLOCKNUM];//临时存储旋转后的坐标 trans(pt);//转换坐标,存储到pt中