俄罗斯方块有关问题

俄罗斯方块问题
自己想做一个俄罗斯方块,在本程序中,方块只有一种形状,那就是下三上一的那种对称的,根据最中间的那个方块进行运算(左、右、下移动),是不是我的陷入死循环了,运行一个图像都没出现,打键盘也没用!求大神解惑!上码:
#include<iostream>
#include<conio.h>
#include<stdlib.h>
using namespace std;
int a[20][20];
int i,j;
void show()
{
system("CLS");
for(i=0;i<20;i++)
for(j=0;j<20;j++)
{
if(a[i][j]==0)
cout<<"  ";//不是方块显示空的
else if(a[i][j]==1)
cout<<"口";//是方块显示口
else
cout<<" O";//其余显示O(四周)
}
}
int down(int x,int y)//房块的下移
{
char c;
c='a';
hi:while(1)
{
while(!_kbhit)//没有按键时
{

     a[x][y]=1;//该点的上、左、右都为1,形成方块
     a[x-1][y]=1;
     a[x][y-1]=1;
     a[x][y+1]=1;
     show();
     if(a[x+1][y]!=1&&a[x+1][y+1]!=1&&a[x+1][y-1]!=1&&a[x+1][y]!=2&&a[x+1][y+1]!=2&&a[x+1][y-1]!=2)//判断会不会有实物挡住
 {
 a[x-1][y]=0;//如果没有物体遮住,现在方块位置让它为0,进行下移
 a[x][y-1]=0;
 a[x][y+1]=0;
 x++;//
 }
 else //如果有物体了,什么都不做,退出移动这个函数
 return 1;
}
c=(char)_getch();//有按下键时赋值给c
if(x>1||x<18)//如果x的坐标不在两周时可以进行左右移动
    {
a[x-1][y]=0;
    a[x][y-1]=0;
    a[x][y+1]=0;
}
switch(c)
{
case 'a':y--;break;//左移
    case 'd':y++;break;//右移
    default:break;
}
}
   }
int main()
{
int x,y,z;
for(i=0;i<20;i++)//初始化四周
{
a[0][i]=2;
a[19][i]=2;
a[i][0]=2;
a[i][19]=2;
}
for(i=1;i<19;i++)//初始化中间区域
for(j=1;j<19;j++)
a[i][j]=0;
hh:y=rand()%15+2;//随机形成一个点的y轴,不在两边
x=2;//开始x轴为2
z=down(x,y);//进行下移
if(z==1)//如果有挡住了
goto hh;//重新再从x=2,y随机进行下移
return 0;
}



------解决方案--------------------
while(!_kbhit)//没有按键时
改为
while(!_kbhit())//没有按键时
------解决方案--------------------
      while(!_kbhit)//没有按键时

这里 应该是函数调用 _kbhit()
------解决方案--------------------
你的程序还有逻辑问题
第一:边界没有做处理
第二:你可以加个 Sleep 函数隔多久刷新一次,但是有闪屏现象
第三:图形变换存在问题