方块的问题

wisoper 2007-12-05 10:40:41
#include <graphics.h>
int *bit1='\0',*bit2='\0';
getpic1()
{
int size;
size=imagesize(0,0,20,20);
bit1=(int *)malloc(size);
getimage(0,0,20,20,bit1);
}
getpic2()
{
int size;
size=imagesize(0,0,20,20);
bit2=(int *)malloc(size);
getimage(0,0,20,20,bit2);
}
putBarLine(int x,int y)
{
putimage(x,y,bit2,COPY_PUT);
sleep(1);
putimage(x,y,bit1,COPY_PUT);
}
drawLineBar(int x,int y)
{
bar(x,y,x+20,y+20);
line(x,y,x+20,y);
line(x+20,y,x+20,y+20);
line(x,y+20,x+20,y+20);
line(x,y,x,y+20);
}
drawbound()
{
line(229,89,411,89);
line(411,89,411,391);
line(229,391,411,391);
line(229,89,229,391);
}

main()
{
int gdr,gro,i=0,x,y;
char ch;
detectgraph(&gdr,&gro);
initgraph(&gdr,&gro,"e:\\tc");
getpic1();
setcolor(GREEN);
drawLineBar(0,0);
getpic2();
drawbound();

while(i<20)
{
setfillstyle(1,BLUE);
x=rand()%9*20+230;
drawbound();
y=90;
while(1)
{
if(y+20==390)
{
setfillstyle(1,RED);
drawLineBar(x,y);
break;
}
if(getpixel(x+10,y+30)==RED)
{
setfillstyle(1,RED);
drawLineBar(x,y);
break;
}
if(kbhit()&&x>230&&x+20<410)
{
ch=getch();
switch(ch)
{
case 'a':x-=20;putBarLine(x,y);break;
case 'd':x+=20;putBarLine(x,y);break;
default:break;
}
}
putBarLine(x,y);
y+=20;
}

i++;
}
getch();
closegraph();
}

这是一个方块下落的程序(可以控制方向)
本来想模拟一下俄罗斯方块的功能
问题在与当输入字符的时候总会出现反映迟顿现象(就是每次键盘输入的字符都会显示出来)
觉得问题是出在sleep()(用sleep()起个停顿的作用),曾经试过用0x2c中断,找过一些代码也没发现问题
是不是我的思路错了,(这个问题晕了我两天了)
哪位高人帮想想办法,提供一些思路。
...全文
155 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mathe 2007-12-05
  • 打赏
  • 举报
回复
人家是在DOS下面,有线程吗?
应该使用时间中断。
qiuqiu173 2007-12-05
  • 打赏
  • 举报
回复
楼上说的没错,sleep()回使线程停止,使用多线程的方式吧
WeinJones 2007-12-05
  • 打赏
  • 举报
回复
不能使用sleep,因为是单线程程序,一旦sleep,整个线程都停止响应了,所以会有迟钝现象。

你可以尝试为每个方块创建一个新线程。如果觉得麻烦的话,就使用定时器吧。
wisoper 2007-12-05
  • 打赏
  • 举报
回复
呵呵,谢谢楼上的,正在解决中
pptor 2007-12-05
  • 打赏
  • 举报
回复
使用时间中断
WeinJones 2007-12-05
  • 打赏
  • 举报
回复
不好意思,没仔细看代码。3楼滴说滴对

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧