读书人

。在VC环境下编写C语言俄罗斯方块遇到

发布时间: 2012-05-31 12:19:24 作者: rapoo

求助。在VC环境下编写C语言俄罗斯方块遇到困难。。。
还用了Easyx来画图。
下面是我的代码。

图片文件是七个不同的图片方块。

我的问题是把这段代码在vc上编译,右框无法出现预览方块。只能在左上角出现一个随机方块图片。



希望大神指导下哪里出错了。


#include <stdlib.h>
#include <graphics.h> // 引用图形库
#include <conio.h>
#include <time.h>

//表示所有方块形状
struct Block
{
WORD dir[4];
char *color;
}g_Blocks[7]={{0xf000,0x8888,0xf000,0x8888,"p//1.bmp"},{0xcc00,0xcc00,0xcc00,0xcc00,"p//2.bmp"},
{0xe400,0x4c40,0x4e00,0x8c80,"p//3.bmp"},{0x88c0,0xe800,0xc440,0x2e00,"p//4.bmp"},
{0x44c0,0x8e00,0xc880,0xe200,"p//5.bmp"},{0xc600,0x4c80,0xc600,0x4c80,"p//6.bmp"},
{0x6c00,0x8c40,0x6c00,0x8c40,"p//7.bmp"}};

//表示一个方块
struct block
{
int x;
int y;
unsigned int id;
unsigned int dir;
}nowblock,nextblock;




void Init();//初始化
void Text();//文字说明部分
void Drawblock();//画一个方块
void Newblock(struct block _block);//预览方块
void Down(struct block nowblock,int t);//方块自由下沉


int main()
{
Init();
Text();

Drawblock();
getch();
closegraph();
return 0;
}




//初始化
void Init()
{
srand(time(NULL));
initgraph(640,480);

rectangle(10,10,150,250);
rectangle(160,-1,480,460);
rectangle(490,10,630,160);

}

//文字说明部分
void Text()
{
char s1[] = "按键功能说明";
char s2[] = "左移:←键";
char s3[] = "右移:→键";
char s4[] = "旋转:↑键";
char s5[] = "加速:↓键";
char s6[] = "沉底:空格键";
char s7[] = "退出:ESC键";
outtextxy(20, 30, s1);
outtextxy(20, 60, s2);
outtextxy(20, 90, s3);
outtextxy(20, 120, s4);
outtextxy(20, 150, s5);
outtextxy(20, 180, s6);
outtextxy(20, 210, s7);
}

//画nowblock;
void Drawblock()
{
//int i,j,t=0;
//WORD b,c=0x8000;
nextblock.id=rand()%7;
nextblock.dir=rand()%4;
Newblock(nextblock);
/*while(1)//当nowblock最底下方块1碰到1或者碰底时,执行这个循环
{
nowblock.id=nextblock.id;
nowblock.dir=nextblock.dir;


//画nowblock方块
b=g_Blocks[nowblock.id].dir[nowblock.dir];
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(b&c)
{
rectangle(300+2*i,2*j,302+2*i,2+2*j);
IMAGE img;
loadimage(NULL,g_Blocks[nowblock.id].color);
putimage(300+2*i, 2*j,&img);
}
c>>=1;
}
}
t++;
Down(nowblock,t);//下沉函数

nextblock.id=rand()%7;
nextblock.dir=rand()%4;
Newblock(nextblock);

for(i=0;i<100000;i++)
{
}
//计时下沉时间
}

*/


}
//显示nextblock;
void Newblock(struct block _block)
{
int i,j;
WORD b,c=0x8000;

b=g_Blocks[_block.id].dir[_block.dir];
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(b&c)
{
//rectangle(500+2*i,20+2*j,502+2*i,22+2*j);
IMAGE img;
loadimage(NULL,g_Blocks[_block.id].color);
putimage(500+2*i,20+2*j,&img);

}
b>>=1;
}

}


}


/*void Down(struct block nowblock,int t)
{
setbkcolor(BLACK);
int i,j;
WORD b,c=0x8000;
b=g_Blocks[nowblock.id].dir[nowblock.dir];
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(b&c)
{
rectangle((300+2*t)+2*i,2*j,(302+2*t)+2*i,2+2*j);
IMAGE img;
loadimage(NULL,g_Blocks[nowblock.id].color);
putimage((300+2*t)+2*i,2*j, &img);
}
c>>=1;
}
}
}*/













[解决办法]
for循环里面的有错误,应该为如下:

rectangle(300+2*i,2*j,302+2*i,2+2*j);
IMAGE img;
loadimage(NULL,g_Blocks[nowblock.id].color);
putimage(300+2*i, 2*j,&img);

这个就不用解释了吧,哈哈,见帮助文件
要仔细看一下easyx的帮助文件,里面的例子可以作为很好的参考>>>
加油了!

读书人网 >C语言

热点推荐