重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
时延函数一般还是会用的,因为电脑的速度太快了,不用的话我们基本上看到的就是直接从起点到终点,但是图像移动的控制还是自己写,你可以写函数控制小球匀速下落或者自由落体下落。还有一点,图像移动说白了就是重绘,所以双缓存是必要的,不然画面会抖动闪烁,多线程也是必要的。
作为一家“创意+整合+营销”的成都网站建设机构,我们在业内良好的客户口碑。创新互联提供从前期的网站品牌分析策划、网站设计、成都网站制作、成都网站设计、创意表现、网页制作、系统开发以及后续网站营销运营等一系列服务,帮助企业打造创新的互联网品牌经营模式与有效的网络营销方法,创造更大的价值。
control()
{
p-x= rand()%60;
p-y= rand()%20;
gotoxy(p-x,p-y);
printf("%c",2);
Sleep(500);
system("cls");
gotoxy(p-x,p-y);
return control();
}
位图平移没有这方面的库函数,必须自己来实现,下面是位图平移的参考代码:
#include "stdafx.h"
#includewindows.h
#includestdio.h
#includemath.h
int _tmain(int argc, _TCHAR* argv[])
{
int width;
int height;
RGBQUAD *pTableColor;
unsigned char *pBmpBuf1,*pBmpBuf2;
BITMAPFILEHEADER bfhead;
BITMAPINFOHEADER bihead;
//读出源图像的信息
FILE *fpr=fopen("E:\\picture\\dog.bmp","rb");
if(fpr==0)
return 0;
fread(bfhead,14,1,fpr);
fread(bihead,40,1,fpr);
width=bihead.biWidth;
height=bihead.biHeight;
int LineByte=(width*8/8+3)/4*4;
pTableColor=new RGBQUAD[256];
fread(pTableColor,sizeof(RGBQUAD),256,fpr);
pBmpBuf1=new unsigned char[LineByte*height];
fread(pBmpBuf1,LineByte*height,1,fpr);
fclose(fpr);
//将处理后的图像赋值为白色
pBmpBuf2=new unsigned char[LineByte*height];
for(int i=0;iheight;i++)
for(int j=0;jwidth;j++)
{
unsigned char *p;
p=(unsigned char*)(pBmpBuf2+LineByte*i+j);
(*p)=255;
}
//左右平移功能的实现
int t;
printf("请输入左平移或右平移的大小t(左移t0,右移t0):");
scanf("%d",t);
int k=abs(t);
printf("%d",k);
if(t0)
{
if(t=(-width))
{
for(int i=0;iheight;i++)
for(int j=0;j(width-k);j++)
{
unsigned char *p1,*p2;
p1=pBmpBuf1+LineByte*i+j+k;
p2=pBmpBuf2+LineByte*i+j;
(*p2)=(*p1);
}
}
}
else
{
if(t=width)
{
for(int i=0;iheight;i++)
for(int j=k;jwidth;j++)
{
unsigned char *p1,*p2;
p1=pBmpBuf1+LineByte*i+j-k;
p2=pBmpBuf2+LineByte*i+j;
(*p2)=(*p1);
}
}
}
//保存处理后的图像
FILE *fpw=fopen("dog.bmp","wb");
fwrite(bfhead,14,1,fpw);
fwrite(bihead,40,1,fpw);
fwrite(pTableColor,sizeof(RGBQUAD),256,fpw);
fwrite(pBmpBuf2,LineByte*height,1,fpw);
fclose(fpw);
return 0;
}
第一种方法:
#includegraphics.h
#includestdio.h
void main()
{
int gd=DETECT,gm,i,j,size;
void *buffer;
initgraph(gd,gm,"");
registerbgidriver(EGAVGA_driver);
setcolor(BROWN);
circle(100,100,5);
circle(80,100,5);
setfillstyle(1,RED);
bar(72,88,107,95);
setfillstyle(1,GREEN);
bar(80,80,100,88);
size=imagesize(71,79,108,106);
buffer=malloc(size);
getimage(71,79,108,106,buffer);
cleardevice();
putimage(1,1,buffer,COPY_PUT);
do
{
for(j=0;j=450;j+=90) /*改变90,可以改变下降的大小*/
{
cleardevice();
for(i=0;i=640;i++)
putimage(i+1,j+1,buffer,COPY_PUT);
cleardevice();
}
}while(!kbhit()); /*按任意键退出,不过要等全部走完一遍才会退出*/
closegraph();
}
第二种方法(用背景色覆盖):
#includestdio.h
#includegraphics.h
void main()
{
int gd=DETECT,gm,i;
registerbgidriver(EGAVGA_driver);
initgraph(gd,gm,"");
setfillstyle(1,GREEN);
bar(50,230,60,240);
while(!kbhit())
{
for(i=0;i30;i++)
{
delay(10000);
bar(50+(i+1)*10,230,60+(i+1)*10,240);
setfillstyle(1,0);
bar(50+i*10,230,60+i*10,240);
setfillstyle(1,GREEN);
}
cleardevice();
}
closegraph();
}