想给小游戏加个背景图,但运行出来小球的轨迹会涂抹背景图,该怎么解决

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

#include <graphics.h>
#include <stdio.h>

void mainloop()
{

//x,y记录当前位置,dx,dy记录速度向量,r记录圆半径
int x= 200, y= 200, dx = 1, dy = 1, r = 100;
char a[20]="0";  //初始化分数 
char b[100];
int k = 0;
char A;
//int keystate(int key);//(判断按键是否被按下) 
int s=0; //初始分数为0,放在循环外 
for ( ; is_run(); delay_fps(30) )
{
    // 当前位置 + 速度
    x += dx;
    y += dy;
    if (x < r) dx = 1; //碰左 向右转 向量为正 
    if (y < r) dy = 1; //碰上 向下转 向量为正 
    if (x >= ege::getwidth()  - r) dx = -1; //碰右 向左转 向量为负 
    if (y >= ege::getheight() - r) dy = -1; //碰下  向右转 向量为负 
      //每次刷新屏幕后都重新显示分数 

//    cleardevice();
    setfont(-30, 0,"宋体");
    setcolor(BLUE);
    setfillcolor(EGERGB(255, 193, 37)); 
    fillellipse(x, y, r, r);
    outtextxy(0, 0, "分数:");
    outtextxy(80, 0, a);
    
    int m;
    
 while( kbhit() )  //循环监听按键消息 
{    
      //循环去掉 
       //int k=0;
       //如果按下键   
         //k = getch();  
         key_msg km=getkey();
             if(km.key==key_A)  //如果按下的是A键 
              {
                      if(x<=r||y<=r||x>=ege::getwidth()  - r||y >= ege::getheight() - r)//如果碰上了墙壁 
                   {
                   s=s+1;
                   sprintf(a,"%d",s);//分数加一
                  
                  
                }
                
            }
    
}
                   if(s==0)
                   {sprintf(b,"加油!");setcolor(BLUE);outtextxy(150, 0,b);
                   }
                  if(s==1) 
                   {sprintf(b,"nice!");setcolor(BLUE);outtextxy(150, 0,b);
                   }
                   if(s==2)
                   {sprintf(b,"好厉害!");setcolor(BLUE);outtextxy(150, 0,b);
                   }
                   if(s==3)
                   {sprintf(b,"太棒了!");setcolor(BLUE);outtextxy(150, 0,b);
                   }
                   if(s==4) 
                   {sprintf(b,"超神!");setcolor(GREEN);outtextxy(150, 0,b);
                   }
                  if(s==5) 
                   {sprintf(b,"非人哉?");setcolor(RED);outtextxy(150, 0,b);
                   }
                   
//改变分数后,擦除重绘 

}

}

int main(void)
{

setinitmode(INIT_ANIMATION);//移动,平移 
// 图形初始化,窗口尺寸640x480
initgraph(640, 480);

/* PIMAGE pi;
pi=newimage();
getimage(pi,"123321.png");
putimage(0,0,pi); */ //放入背景图片

setbkcolor(EGERGB(255 ,240, 245)); //浅绿色
// 随机数初始化,如果需要使用随机数的话    

randomize();
// 程序主循环
    PIMAGE pi;
pi=newimage();
getimage(pi,"123321.png");
putimage(0,0,pi);                    //放入背景图片 
mainloop();
// 关闭绘图设备
    
closegraph();
return 0;

}


img


加上cleardevice,不会出现背景图,去掉clear device,小球轨迹会涂抹bj