# include < graphics. h>
# include < stdlib. h>
# include < stdio. h>
# include < conio . h>
int main( void)
{ int gdriver= DETECT, gmode;
void * ball;
int x, y, maxx ;
unsigned int size;
initgraph( & g driver, & gmode,) ;
maxx= get maxx ( ) ;
x= 0; y= 200;
rectangle( x , y+ 11, x+ 20, y+ 31) ; / / 绘制矩形
circle( x+ 10, y, 10) ; / / 绘制圆
size= imagesize( x , y- 10, x+ 20, y+ 10) ;
/ / 计算保存区域大小
ball= mallo c( size) ; / / 申请保护区域内存
getimage( x , y- 10, x+ 20, y+ 10, ball) ;
/ / 保存圆所在的位置图形到内存
while( ! kbhit( ) ) {
putimage( x, y- 10, ball, XOR_PUT) ;
/ / 用异或方式在新位置绘制圆, 圆消失
x+ = 10; / / 计算圆移动增量
if ( x> = max x ) {
x= 0;
putimage( x, y- 10, ball, XOR_PUT) ;
/ / 用异或方式在新位置绘制圆, 圆出现
delay( 1000) ; / / 延迟一定时间
} }
free(ball) ;
closegraph( ) ;
return 0;
}
该程序的运行情况, 和前面的例程的效果差不多。但从实际画点开销角度来看, 3 个圆球运行的例程是不一样的。
本例程使用XOR 异或方法重画, 每次画点开销为:
10* 4 点(重画圆形清除) + 10* 4 点(重画圆形) = 80 点
由此可见,异或在这里是最好的绘制动画的选择。