C++ 如何在我的c++;游戏

C++ 如何在我的c++;游戏,c++,double-buffering,C++,Double Buffering,我有闪烁屏幕的问题,我知道我需要使用双缓冲来解决它,但我不知道如何以及在哪里添加到我的游戏。如果因为某种原因我不能使用它,有没有其他方法可以减少闪烁,因为随着地图越来越大,闪烁越来越严重。以下是代码的一部分: `const char HEIGHT=11, WIDTH=54; unsigned char maze[HEIGHT][WIDTH]={ "##############################", "# !# # ### ##

我有闪烁屏幕的问题,我知道我需要使用双缓冲来解决它,但我不知道如何以及在哪里添加到我的游戏。如果因为某种原因我不能使用它,有没有其他方法可以减少闪烁,因为随着地图越来越大,闪烁越来越严重。以下是代码的一部分:

    `const char HEIGHT=11, WIDTH=54;
     unsigned char maze[HEIGHT][WIDTH]={

     "##############################",
     "#  !#      # ###  ##         #",
     "# ### ###  # !!  ### ####### #        GAME OF THRANS",
     "#     #    #####  ## # !!  # #",
     "######## #  ##     # ####  # #      R-restart  Q-quit",
     "#  !   # #   #  #  #       # #            M-menu",
     "### ## # ### #  #! #### ######",
     "#   !# #  ## #  ####  # # !! #                  W",
     "# #### ## ## #   #    # #### #      Controls:  A-S-D",
     "#         ##   #   #         #",
     "##############################",
     };

     enemy1.x=14;
     enemy1.y=7;
     enemy2.x=22;
     enemy2.y=9;
     enemy3.x=10;
     enemy3.y=3;


      srand(time (NULL));

     while(on){

maze[ppy][ppx]=playerSprite;
maze[gpy][gpx]=goal;
maze[enemy1.y][enemy1.x]=enemy1.sprite;
maze[enemy2.y][enemy2.x]=enemy2.sprite;
maze[enemy3.y][enemy3.x]=enemy3.sprite;

for(int y=0; y<HEIGHT;y++){
    cout<<endl;
    for(int x=0;x<WIDTH;x++){
        cout<<maze[y][x];
    }
}
     for(;;){

randNum=rand()%randNumMax+1;
cout<<endl;


        movement=getch();
        switch (movement){
    case'w':
        if (maze[ppy-1][ppx]!='#' &&(maze[ppy-1][ppx]==' '||(maze[ppy-1][ppx]=='G','N','M','Y','!'))){
            maze[ppy][ppx]=' ';
            ppy--;
            moves++;
             if (maze[ppy][ppx]=='!'){
                Beep(400,150);
                points++;

             }`
`const char HEIGHT=11,WIDTH=54;
无符号字符迷宫[高度][宽度]={
"##############################",
"#  !#      # ###  ##         #",
“######################################35,
"#     #    #####  ## # !!  # #",
“##################R-重启Q-退出”,
“##########M菜单”,
"### ## # ### #  #! #### ######",
“##################W”,
“################控制:A-S-D”,
"#         ##   #   #         #",
"##############################",
};
enemy1.x=14;
灌肠1.y=7;
enemy2.x=22;
灌肠2.y=9;
灌肠3.x=10;
灌肠3.y=3;
srand(时间(空));
当{
梅兹[ppy][ppx]=球员斯普林特;
迷宫[gpy][gpx]=目标;
迷宫[enemy1.y][enemy1.x]=enemy1.sprite;
迷宫[enemy2.y][enemy2.x]=enemy2.sprite;
迷宫[enemy3.y][enemy3.x]=enemy3.sprite;
对于(int y=0;y您不能真正执行“双缓冲”通常,用标准的C++控制台IO。用图形,双缓冲传统意味着将所有渲染都放在屏幕后退缓冲器中,然后在V-BLASH中切换到前缓冲区,以避免闪烁。没有什么与标准C++中控制台输出直接等同。

您可以尝试“本着”双缓冲的精神。使用
stringstream
构建最终字符串,而不是直接输出到
cout
,然后使用一次写入
cout
一次显示整个字符串。这可能会减少闪烁


作为旁注,您可能希望避免在输出的每一行之后使用
endl
,因为它刷新的输出流不是您想要的。请改用
“\n”
,并且仅当您确实想在“帧”的末尾刷新时才使用
endl

cout
输出许多字符是不可能的ve您可以使用闪烁屏幕/whateveryouwannacallit。如果您想使用“控制台图形”,您应该使用
诅咒
(具体来说:
ncurses
用于Linux,而
pdcurses
用于Windows)