两个函数:Show_box(int x,int y,int box_numb)
Erase_box(int x,int y,int box_numb)
Show_box(int x,int y,int box_numb)用来显示方块。
Erase_box(int x,int y,int box_numb)用来擦去方块。
按道理讲,根据动画的原理,应该能很好的控制方块。
while(1)
{
......
通过switch语句改变x;
getch()
......
Show_box(int x,int y,int box_numb);
Sleep(300);
y++;
//再循环语句中y++以实现自由下落。
Erase_box(int x,int y,int box_numb);
}
可运行的结果却不正常,显示的方块被立刻擦掉了,没有形成动画。困惑一天,希望高手给点办法。
------解决方案--------------------------------------------------------
网上剽窃的,仅供参考
/*
*俄罗斯方块源程序
*/
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <graphics.h>
#include <bios.h>
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
/*定义按键码*/
#define VK_LEFT 0x4b00
#define VK_RIGHT 0x4d00
#define VK_DOWN 0x5000
#define VK_UP 0x4800
#define VK_ESC 0x011b
/*设置中断号*/
#define TIMER 0x1c
/*定义常量*/
#define MAX_BOX 19 /*总共有19种各形态的方块*/
#define BSIZE 20 /*方块的边长是20个象素*/
#define Sys_x 160 /*显示方块界面的左上角x座标*/
#define Sys_y 25 /*显示方块界面的左上角y座标*/
#define Horizontal_boxs 10 /*水平的方向以方块为单位的长度*/
#define Vertical_boxs 15 /*垂直的方向以方块为单位的长度,也就说长是15个方块*/
#define Begin_boxs_x Horizontal_boxs/2 /*产生第一个方块时出现的起始位置*/
#define FgColor CYAN //前景色
#define BgColor BLACK //背景颜色
#define LeftWin_x Sys_x+Horizontal_boxs*BSIZE+46 /*右边状态栏的x座标*/
#define false 0
#define true 1
/*移动的方向*/
#define MoveLeft 1
#define MoveRight 2
#define MoveDown 3
#define MoveRoll 4
/*以后坐标的每个方块可以看作是像素点是BSIZE*BSIZE的正方形*/
/*定义全局变量*/
int current_box_numb; /*保存当前方块编号*/
int Curbox_x=Sys_x+Begin_boxs_x*BSIZE,Curbox_y=Sys_y;/*x,y是保存方块的当前坐标的*/
int flag_newbox=false; /*是否要产生新方块的标记0*/
int speed=0; /*下落速度*/
int score=0; /*总分*/
int speed_step=30; /*每等级所需要分数*/
void interrupt (*oldtimer)(__CPPARGS);/* 指向原来时钟中断处理过程入口的中断处理函数指针 */
struct BOARD /*游戏底板结构,表示每个点所具有的属性*/
{
int var; /*当前状态 只有0和1,1表示此点已被占用*/
int color; /*颜色,游戏底板的每个点可以拥有不同的颜色.增强美观*/
}Table_board[Vertical_boxs][Horizontal_boxs];
/*方块结构*/
struct SHAPE
{
char box[2]; /*一个字节等于8位,每4位来表示一个方块的一行