缓冲区太小怎么解决啊

飞机大战的代码,玩的时候会显示以下的图片,显示缓冲区太小,这个要如何解决啊

img

img

所以,有代码吗,错误处上下文也可以啊

#include<graphics.h>
#include<Windows.h>
#include<conio.h>
#include<math.h>
#include<stdio.h>
#include<time.h>
#include<tchar.h>/*本游戏目前实现的功能为,1进入开始游戏,2退出游戏,3中途暂停,暂停后1继续或者2退出,血量100
进行记分,撞击敌机血量减少并扣分,敌机进入下方扣分,分数达到1000时胜利,血量小于1时失败,达到一定分数后,敌机加速移动,我方飞机也加速移动*/
#pragma comment(lib,"Winmm.lib")
#define High 1080 //游戏画面尺寸
#define Width 1080
#define Bullet_NUM 10//玩家子弹数量
#define ENEMY_NUM 8//敌机数量 
enum My
{
    BIG, SMALL, SENIOR
};//使用枚举的方法,飞机类型有三种
IMAGE img_bk;//背景图片
float position_x, position_y;//飞机的位置
float bullet_x, bullet_y;//子弹位置
float enemy_x, enemy_y;//敌机位置
IMAGE img_planeNormal1, img_planeNormal2;//正常飞机图片
IMAGE img_bullet1, img_bullet2;//子弹图片
IMAGE img_planeExplode1, img_planeExplode2;//爆炸飞机图片
IMAGE img_enemy[3][2];//敌机图片
IMAGE img_background;//开始画面背景
IMAGE img_victory; // 胜利时背景
IMAGE img_fail;//失败时背景
int isExplode = 0;//飞机是否爆炸
int score = 0, n = 50;//得分
int m = 0, isexplode = 0;
int luxuanhong = 0;//定义的一个变量
int gameStatus = 0;//游戏状态,0为初始菜单界面,1为正常游戏,2为结束游戏状态,3为游戏暂停
void startMenu();//初始菜单界面
void pauseMenu();//游戏暂停后的菜单界面,按3键后启动该界面
struct Plane//飞机结构(结构体)
{
    int x;
    int y;
    bool live;//是否存活
    int width, height;
    int hp;
    int Hp;
    int type;//敌机的类型
}player, bull[Bullet_NUM], enemy[ENEMY_NUM];
void startMenu()//显示开始的菜单
{
    putimage(0, 0, &img_background);//显示背景
    setbkmode(TRANSPARENT);
    //settextcolor(BLACK);
    setlinecolor(WHITE);
    settextstyle(50, 0, _T("黑体"));
    outtextxy(500, 400, "./1进入游戏");
    outtextxy(500, 500, "./2退出");
    FlushBatchDraw();
    Sleep(2);
    if (GetAsyncKeyState('1'))
        gameStatus = 1;
    else if (GetAsyncKeyState('2'))
    {
        gameStatus = 2;
        exit(0);
    }
}
void pauseMenu()//显示暂停时的画面
{
    putimage(0, 0, &img_background);//显示背景
    setbkmode(TRANSPARENT);
    settextstyle(50, 0, _T("黑体"));
    outtextxy(500, 400, "./1继续游戏");
    outtextxy(500, 500, "./2退出");
    FlushBatchDraw();
    

    if (GetAsyncKeyState('1'))
        gameStatus = 1;
    else if (GetAsyncKeyState('2'))
    {
        gameStatus = 2;
        exit(0);//直接结束程序
    
void load()//加载图片的函数,loadimage后图片俩俩出现,一张原图一张掩码图
{
    mciSendString("./open 1.mp3 alias p", NULL, 0, NULL);//打开背景音乐
    mciSendString("./play p repeat", NULL, 0, NULL);//循环播放
    //加载音乐
    /*initgraph(Width, High);*/
   //loadimage(&img_bk, L"picture//4.jpg");//背景图片
    loadimage(&img_bk, "./images/Background2.png");
    loadimage(&img_enemy[0][0], "./images//enemy3_2.png");//敌机1图片
    loadimage(&img_enemy[0][1], "./images//enemy3_1.png");
    loadimage(&img_background, "./images//Begin.png");//开始菜单背景
    loadimage(&img_enemy[1][0], "./images//enemy2_2.png");//敌机2图片
    loadimage(&img_enemy[1][1], "./images//enemy2_1.png");
    loadimage(&img_enemy[2][0], "./images//enemy1_2.png");//敌机3图片
    loadimage(&img_enemy[2][1], "./images//enemy1_1.png");
    loadimage(&img_fail, "./images//Fail.png");//失败图片
    loadimage(&img_victory, "./images//Victory.png"); // 胜利图片
    loadimage(&img_planeNormal1, "./images/player_2.png");//我方飞机图片
    loadimage(&img_planeNormal2, "./images/player_1.png");
    loadimage(&img_bullet1, "./images//bull_2.png");//子弹图片
    loadimage(&img_bullet2, "./images//bull_1.png");
    loadimage(&img_planeExplode1, "./images//boom_2.png");//爆炸图片
    loadimage(&img_planeExplode2, "./images//boom_1.png");
}
void enemyHp(int i)
{//敌机大小血量,宽度,高度
    int flag = rand() % 15;//0-14,以下为各类型敌机的出现概率
    if (flag >= 0 && flag <= 2)
    {
        enemy[i].type = BIG;
        enemy[i].hp = 3;
        enemy[i].width = 274;
        enemy[i].height = 226;
    }
    else if (flag >= 0 && flag <= 3)
    {
        enemy[i].type = SENIOR;
        enemy[i].hp = 2;
        enemy[i].width = 120;
        enemy[i].height = 99;
    }
    else if (flag >= 0)
    {
        enemy[i].type = SMALL;
        enemy[i].hp = 1;
        enemy[i].width = 100;
        enemy[i].height = 61;
    }
}
void gameInit()//初始化游戏数据
{
    player.x = 540;
    player.y = 900;
    player.live = true;
    player.Hp = 100;
    for (int i = 0; i < Bullet_NUM; i++)//初始化子弹
    {
        bull[i].x = 0;
        bull[i].y = 0;
        bull[i].live = false;
    }
   for (int i = 0; i < ENEMY_NUM; i++)
    {
        enemy[i].live = false;
        enemyHp(i);
    }
}
void playplane()//击落飞机
{
    for (int i = 0; i < ENEMY_NUM; i++)
    {
        if (!enemy[i].live)
        {
            continue;
        }
        for (int k = 0; k < Bullet_NUM; k++)
        {
            if (!bull[k].live)
            {
                continue;
            }
            if (bull[k].x > enemy[i].x - 25 && bull[k].x<enemy[i].x + enemy[i].width && bull[k].y>enemy[i].y && bull[k].y < enemy[i].y + enemy[i].height)
            {
                bull[k].live = false;//子弹消失
                enemy[i].hp--;//血量减少,每次减少
            }
        }
        if (enemy[i].hp <= 0)
        {

            enemy[i].live = false;//根据血量判断敌机生死
            if (enemy[i].type == BIG)
            {
                score += 20;
                printf("%d", score);
            }
            if (enemy[i].type == SENIOR)
            {
                score += 10; printf("%d", score);
            }
            if (enemy[i].type == SMALL)
            {
                score += 5; printf("%d", score);
            }
            mciSendString("./close 4", NULL, 0, NULL);//先把前面一次的音乐关闭
            mciSendString("./open 1.mp3 alias 4", NULL, 0, NULL);//打开背景音乐
            mciSendString("./play 4 ", NULL, 0, NULL);//循环播放
        }
    }
}
void show()//游戏绘制
{
    load();
    while (gameStatus == 3)
    {
        pauseMenu();
    }
    putimage(0, 0, &img_bk);
    putimage(player.x, player.y, &img_planeNormal1, NOTSRCERASE);//显示正常飞机
    putimage(player.x, player.y, &img_planeNormal2, SRCINVERT);//显示正常飞机

    //putimage(enemy_x, enemy_y, &img_enemyPlane1, SRCAND);//显示敌机
    //putimage(enemy_x, enemy_y, &img_enemyPlane2, SRCPAINT);
    for (int i = 0; i < Bullet_NUM; i++)
    {
        if (bull[i].live)//绘制子弹
        {
            putimage(bull[i].x, bull[i].y, &img_bullet1,NOTSRCERASE);//显示子弹
            putimage(bull[i].x, bull[i].y, &img_bullet2, SRCINVERT);
        }
    }  //绘制敌机
    for (int i = 0; i < ENEMY_NUM; i++)
    {
         if (enemy[i].live)
        {
            if (enemy[i].type == BIG)
            {
                putimage(enemy[i].x, enemy[i].y, &img_enemy[1][0], NOTSRCERASE);//显示敌机
                putimage(enemy[i].x, enemy[i].y, &img_enemy[1][1], SRCINVERT);
            }
            if (enemy[i].type == SENIOR)
            {
                putimage(enemy[i].x, enemy[i].y, &img_enemy[2][0], NOTSRCERASE);//显示敌机
                putimage(enemy[i].x, enemy[i].y, &img_enemy[2][1], SRCINVERT);
            }
            if (enemy[i].type == SMALL)
            {
                putimage(enemy[i].x, enemy[i].y, &img_enemy[0][0], NOTSRCERASE);//显示敌机
                putimage(enemy[i].x, enemy[i].y, &img_enemy[0][1], SRCINVERT);
            }
        }
        if (!enemy[i].live && enemy[i].hp <= 0)
        {
            putimage(enemy[i].x, enemy[i].y, &img_planeExplode1, NOTSRCERASE);//显示爆炸敌机
            putimage(enemy[i].x, enemy[i].y, &img_planeExplode2, SRCINVERT);

        }
        if (abs(abs((int)player.x - (int)enemy[i].x) + abs((int)player.y - (int)enemy[i].y)) < 150 && isexplode == 0)
        {
            isexplode = 1;
            enemy[i].live = false;
            enemy[i].hp = 0;
            score -= 5;
            player.Hp -= 2;
            putimage(enemy[i].x, enemy[i].y, &img_planeExplode1, NOTSRCERASE);//显示爆炸敌机
            putimage(enemy[i].x, enemy[i].y, &img_planeExplode2, SRCINVERT);
            mciSendString("./close 4", NULL, 0, NULL);//先把前面一次的音乐关闭
            mciSendString("./open 1.mp3 alias 4", NULL, 0, NULL);//打开背景音乐
            mciSendString("./play 4 ", NULL, 0, NULL);//循环播放
        }
        if (luxuanhong == 0 && enemy[i].y >= 750)//敌机跑到屏幕下方,扣分
        {
            luxuanhong = 1;
            score -= 5;
        }
    }
  outtextxy(0, 5, "./得分:");
    TCHAR s[5];

    _stprintf_s(s, "./%d", score);
    outtextxy(150, 5, s);//指定出现的文字及位置
    outtextxy(0, 50, "./血量:");
    TCHAR Hp[50];
    _stprintf_s(Hp, "./%d", player.Hp);
    outtextxy(150, 50, Hp);
    Sleep(2);


} //产生子弹
void creatBullet()
{
    for (int i = 0; i < Bullet_NUM; i++)
    {
        if (!bull[i].live)
        {
            bull[i].x = player.x + 10;
            bull[i].y = player.y - 40;
            bull[i].live = true;
            break;
        }
    }
}//产生敌机
void creatEnemy()
{
    for (int i = 0; i < ENEMY_NUM; i++)
    {
        if (!enemy[i].live)
        {
            isexplode = 0;
            luxuanhong = 0;
            enemy[i].live = true;
            enemy[i].x = rand() % (Width - 100);
            enemy[i].y = 0;
            enemyHp(i);//重置机型血量
            break;
        }
    }
}//子弹移动
void BulletMove(int speed)
{
    for (int i = 0; i < Bullet_NUM; i++)
    {
        if (bull[i].live)//假
        {
            bull[i].y -= speed;
            if (bull[i].y < 0)
            {
                bull[i].live = false;//重新被找
            }
        }
    }
}//敌机移动
void enemyMove(int speed)
{
    for (int i = 0; i < ENEMY_NUM; i++)
        if (enemy[i].live)
        {
            enemy[i].y += speed;
            if (enemy[i].y > High)
            {
                enemy[i].live = false;
            }
        }
}//定时器封装,静态变量,只初始化一次,不重复初始化
bool Timer(int ms, int id)
{
    static DWORD t[10];//自动初始化为0
    if (clock() - t[id] > ms)
    {
        t[id] = clock();
        return true;//保存上次数据记录
    }
    return false;//默认值,不是0就认为是真
}
void playerMove(int speed)//角色移动
{
    if (GetAsyncKeyState('W'))

    {
        if (player.y > 0)//能移动
        {
            player.y -= speed;
        }
    }
    if (GetAsyncKeyState('S'))
    {
        if (player.y < 980)
        {
            player.y += speed;
        }
    }
    if (GetAsyncKeyState('A'))
    {
        if (player.x + 60 > 0)
        {
            player.x -= speed;
        }
    }
    if (GetAsyncKeyState('D'))
    {
        if (player.x < 1000)
        {
            player.x += speed;
        }
    }
 
    if (GetAsyncKeyState(' ') && Timer(300, 1))
    {
        creatBullet();
        //创建一个子弹
        mciSendString("./close 3 ", NULL, 0, NULL);
        mciSendString("./open 3.mp3 alias 3", NULL, 0, NULL);//打开背景音乐
        mciSendString("./play 3 ", NULL, 0, NULL);//循环播放
    }
}
int main()
{
    load();
    initgraph(Width, High, SHOWCONSOLE);//SHOWCONSOLE显示控制台窗口
    gameInit();//双缓冲绘图
    BeginBatchDraw();
    while (!gameStatus)
    {

        startMenu();
        //pauseMenu();
    }

    while (player.Hp != 0 && score < 1000)
    {
        if (GetAsyncKeyState('3'))
        {
            while (1)
            {
                pauseMenu();
                if (GetAsyncKeyState('1'))
                    break;
            }
        }
        //system("pause");
        show();
        FlushBatchDraw();

        if (score < 200)
            playerMove(10);
        if (score >= 200 && score < 500)
            playerMove(15);
        if (score > 500 && score < 800)
            playerMove(16);
        if (score > 800 && score < 1000)
            playerMove(17);

        BulletMove(30);


        if (Timer(800, 0))
        {
            creatEnemy();//产生敌机
        }
        //时间函数,时间变化,t2变化,满足条件,定时器,控制敌机的出现,移动
        if (Timer(10, 2))
        {
            if (score < 200)
                enemyMove(2);
            if (score >= 200 && score < 500)
                enemyMove(3);
            if (score >= 500 && score < 800)
                enemyMove(4);
            if (score >= 800 && score < 1000)
                enemyMove(4);

        }
        playplane();
    }
    cleardevice();
    if (player.Hp <= 0)
    {
        putimage(0, 0, &img_fail);
        mciSendString("./close p", NULL, 0, NULL);
        mciSendString("./close wu", NULL, 0, NULL);//先把前面一次的音乐关闭
        mciSendString("./open wu.mp3 alias m", NULL, 0, NULL);//打开背景音乐
        mciSendString("./play m", NULL, 0, NULL);//循环播放
    }
    if (score == 10000)
    {
        putimage(0, 0, &img_victory);
        mciSendString("./close p", NULL, 0, NULL);
        mciSendString("./close my", NULL, 0, NULL);//先把前面一次的音乐关闭
        mciSendString("./open my.mp3 alias v", NULL, 0, NULL);//打开背景音乐
        mciSendString("./play v ", NULL, 0, NULL);//循环播放
        system("pause");
    }
    EndBatchDraw();
    Sleep(1000000);
    return 0;
}