以下のようなプログラムを作ったのですが、人を動かそうとすると背景が消えたり、UFOが表示されなくなったりします。
ほんとは人を動かしながらも、背景はそのままで、UFOは操作せずにずっと動き続けるようなものを作ろうとしています。

なぜ消えたりするのか教えて欲しいです、後どうすればその様になるのか教えていただけると助かります。

#include <stdio.h>
#include <handy.h>
#include <time.h>
#include <math.h>

//人間を描く関数
void humanA1(int x1,int x2);
void humanA2(int x1,int x2);
void humanB1(int x1,int x2);
void humanB2(int x1,int x2);

void UFO(int a);
void view(void);

//void plane1(int a, int gid1);
//void plane2( int gid2);
//void Flag(int a, int gid1, int gid2);

int main(){
    int x1=0;
    int x2=0;
    int a=0;
    int v;
    int key;
    int count1=0;
    int count2=0;
    //  int gid1=HgImageLoad("war_stealth_aircraft.png");
    //  int gid2=HgImageLoad("war_stealth_aircraft2.png");

    HgOpen(600,600);
    //背景
    view();

    for(;;){

        key=HgGetChar();
        HgClear();
        //背景
        view();
        //UFO
        UFO(a);
        a=a-10;
        HgClear();

        if(a==-400){
            a=a+10;
            HgClear();
            UFO(a);
            HgSleep(0.05);
        }else if(a==540){
            a=a-10;
            HgClear();
            UFO(a);
            HgSleep(0.05);
        }

        //左に動く
        if(key=='a'){
            printf("%d\n",(500+a));
            count1++;

            if(count1%2==0){
                humanA2(x1,x2);
                x1=x1-10;
            }else{
                humanB2(x1,x2);
                x1=x1-10;
            }
        }

        //右に動く
        if(key=='d'){
            printf("%d\n",(500+a));
            count2++;

            if(count2%2==0){
                humanA1(x1,x2);
                x1=x1+10;
            }else{
                humanB1(x1,x2);
                x2=x2+10;
            }    
        }
    }

    HgGetChar();
    HgClose();

    return 0;
}

void humanA1(int x1,int x2){//右向き
    HgSetFillColor(HG_ORANGE);
    HgCircleFill(300+x1+x2, 75, 25,0);//頭
    HgLine(300+x1+x2, 50, 300+x1+x2, 25);//胴体
    HgLine(275+x1+x2, 38, 325+x1+x2, 38);//肩から手首
    HgLine(275+x1+x2, 38, 275+x1+x2, 25);//左手
    HgLine(325+x1+x2, 38, 325+x1+x2, 50);//みぎ手
    HgLine(300+x1+x2, 25, 275+x1+x2,0);//左足
    HgLine(300+x1+x2, 25, 325+x1+x2, 25);//みぎ太もも
    HgLine(325+x1+x2, 25, 325+x1+x2, 0);//右足
}
void humanA2(int x1,int x2){//左向き
    HgSetFillColor(HG_ORANGE);
    HgCircleFill(300+x1+x2, 75, 25,0);//頭
    HgLine(300+x1+x2, 50, 300+x1+x2, 25);//胴体
    HgLine(275+x1+x2, 38, 325+x1+x2, 38);//肩から手首
    HgLine(275+x1+x2, 38, 275+x1+x2, 50);//左手
    HgLine(325+x1+x2, 38, 325+x1+x2, 25);//みぎ手
    HgLine(300+x1+x2, 25, 275+x1+x2, 25);//左足太もも
    HgLine(275+x1+x2, 25, 275+x1+x2, 0);//左足
    HgLine(300+x1+x2, 25, 325+x1+x2, 0);//右足
}

void humanB1(int x1,int x2){//右向き
    HgSetFillColor(HG_ORANGE);
    HgCircleFill(300+x1+x2, 75, 25,0);//頭
    HgLine(300+x1+x2, 50, 300+x1+x2, 25);//胴体
    HgLine(300+x1+x2, 38, 275+x1+x2, 30);//左手首
    HgLine(275+x1+x2, 30, 290+x1+x2, 25);//左手
    HgLine(300+x1+x2, 38, 325+x1+x2, 30);//みぎ手首
    HgLine(325+x1+x2, 30, 325+x1+x2, 35);//右手
    HgLine(300+x1+x2, 25, 290+x1+x2, 0);//左足
    HgLine(300+x1+x2, 25, 325+x1+x2, 13);//右足首
    HgLine(325+x1+x2, 13, 312+x1+x2, 0);//右足
}

void humanB2(int x1,int x2){//左向き
    HgSetFillColor(HG_ORANGE);
    HgCircleFill(300+x1+x2, 75, 25,0);//頭
    HgLine(300+x1+x2, 50, 300+x1+x2, 25);//胴体
    HgLine(300+x1+x2, 38, 275+x1+x2, 30);//左手首
    HgLine(275+x1+x2, 30, 290+x1+x2, 35);//左手
    HgLine(300+x1+x2, 38, 325+x1+x2, 30);//みぎ手首
    HgLine(325+x1+x2, 30, 310+x1+x2, 25);//右手
    HgLine(300+x1+x2, 25, 280+x1+x2, 13);//左足太もも
    HgLine(280+x1+x2, 13, 290+x1+x2, 0);//左足
    HgLine(300+x1+x2, 25, 310+x1+x2, 0);//右足
}

void UFO(int a){
    HgSetFillColor(HG_GRAY);
    HgFanFill(500+a, 550, 30, 0, M_PI, 1);
    HgOvalFill(500+a, 530, 50, 25, 0, 1);
    HgBoxFill(470+a, 465, 60, 40, 1);
}

void view(void){
    HgSetFillColor(HG_GREEN);
    HgFanFill(50, 200, 300, 1.25*M_PI, 1.75*M_PI,1);
    HgFanFill(300, 300, 500, 1.25*M_PI, 1.75*M_PI,1);
    HgFanFill(550, 200, 300, 1.25*M_PI, 1.75*M_PI,1);
}