void render(void); /*唯一的绘图函数*/ /*注意,此函数重画整个地图,根据地图中的点阵,以及根据小盒在地图的中坐标在恰当位置画出小盒子*/ /*DOS的图形当然是很低的,但,全屏绘图在这里还是过得去 的,我用的是双缓冲,交换绘图,这样感觉好点*/ void initMap(void); /*初始化地图(大盒子)*/ /*之前提到过在这个两维数组中有一圈为1的东西来阻止小盒子出界,这就是生成这一圈的函数*/ void newGame(); /*新建一个游戏*/ /*这个函数初始化一几个时钟和建造第一个下落的小盒子。当然建造完后要生成一个个的预览*/ void rotateBox(int box1[5][5], int box2[5][5]); /*核心函数成员,把box1逆时针旋转90度,并保存到box2中*/ void rebuidNext(); /*核心函数成员,生成下一个方块*/ int drop(); /*核心函数成员,将下落的盒子向下移(实际上增加下落盒子的Y值而已,当然要判断是否与地图点阵重叠与地图重叠,无法完成下落操作,返回0*/ void putBox(); /*在这之上,下落的盒子与地图之前是独立的两个两维数*/ /*当下落失败后,小盒子要回到顶端再次重新执行下落,这*/ /*时原来的盒子内容当然就要变成地图上的内容了,putBox就是将下落盒子的内容根据XY写到地图上*/ void clear(); /*这个函数在下落失败并putBox后执行,扫描整个地图*/ /*清除掉满行的点阵,具体细节在函数内讲*/ int move(int dir); /*左右移动下落盒子,dir指出向左还是向右,这个与drop是一样的*/ int test(int mx, int my, int box[5][5]); /*这个比较重点,判断box在mx,my为坐标上,与地图上的非空点阵是否有重叠.很通用的一个函数*/ int rotate(); /*旋转下落的盒子,当然如果转了之后与地图有冲突,会取消转动,返回0,但返回的值好像没什么用~*/ int newfall(); /*创建下落元素,把"下一个"预览的内容复制到下落盒子*/ /*并将下落的盒子移动到地图顶部,当然这个过程,如果顶部有冲突,会返回0,这时说明已经满了...gameOver*/ int main(); /*终于到了最后的主函数,在这里可以看到整个游戏的架*/ /*构,包括游戏主循环,键盘处理等...*/ /******************************************************\ * 变量区 * \******************************************************/
/*在上面的说明中,可能会有一些蒙,因为可能对所用到的实际变量没有了解*/ int map[MAX_Y+4][MAX_X+4]; /*地图\大盒子...MAX_X,Y是可见面积*/ /*我已说过需要在外面布两圈"卫兵"*/ int curbox[5][5]; /*当前下落的盒子*/ int curx, cury; /*保存着当前活动盒子在地图上的位置*/ int nextbox[5][5]; /*保存着下一个形状的盒子*/