LordSmaug 2021-06-29 23:44 采纳率: 0%
浏览 33

关于c++的flappy bird小游戏,出现了一个小问题

在flappy bird游戏中 在添加多个障碍物时,后一个障碍物会变形。 (好像是前面的障碍物中的留的空造成的)

img

以下是完整代码:


```#include<iostream>
#include<cstdlib>
#include<conio.h>
#include<windows.h>
using namespace std;
int x=100;  
int y=20;
int birdx=x/8;
int birdy=y/4;
int speed=0;           
int bar1x=x/3;
int bar1y=rand()%(y/2);
int bar2x=x/2;
int bar2y=rand()%(y/2);

int count=0;


void notin();
void in();
void gotoxy(int x,int y)
     {
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos;
    pos.X=x;
    pos.Y =y;
    SetConsoleCursorPosition(handle,pos);
}
void HideCursor()
{
    CONSOLE_CURSOR_INFO cursor_info={1,0};
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}
void map()
{
         gotoxy(0,0) ;
             HideCursor()   ;
             for(int i=1;i<y;++i)
             {
                 for(int j=1;j<x;++j)
                 {
                     if(j==birdx&&i==birdy)
                     {
                         cout<<"\b"<<"鸟"; 
                     }
                     else if((j==bar1x&&(i>=1&&i<=bar1y)||j==bar1x&&(i>=bar1y+5&&i<=y))||(j==bar2x&&(i>=1&&i<=bar2y)||j==bar2x&&(i>=bar2y+5&&i<=y)))
                     cout<<"HH";

                     else
                     cout<<" ";
                 }
                 cout<<endl;
             }

             cout<<"得分:"<<count/6<<endl;

}
void control()
{
if(kbhit())
{
       string ss;
      ss=getch();

          if(ss==" ")
          {
            if(birdy>3)birdy-=3;
          }


}
}
void things()  
{
        if ((birdx==bar1x&& (birdy>=bar1y&&birdy<=bar1y+5))||(birdx==bar2x&& (birdy>=bar2y&&birdy<=bar2y+5)))
        count+=1;

      if(speed!=3)
      {
          speed++;   
      }
       if(birdy!=y&&speed==3)
   {
           birdy+=1;
           speed=0;
    }


     
     
          if(bar1x>0)
      {
          bar1x--;
      }
      
          if(bar2x>0)
      {
          bar2x--;
      }


      if(bar1x==0)
      {
           bar1x=x;
         bar1y= rand()%(y/2);
         while(bar1y==0)
         {
            bar1y= rand()%(y/2);
         }
             
      }
   
      if(bar2x==0)
      {
           bar2x=x;
         bar2y= rand()%(y/2);
         while(bar2y==0)
         {
            bar2y= rand()%(y/2);
         }

      }




}
int main()
{
    system("COLOR 17 ");
    while(bar1y==0)
{
      bar1y= rand()%(y/2);
}
      while(1)
{


            map();
            things();
            control(); 
            if((birdx==bar1x&&(((birdy>1&&birdy<bar1y))||(birdy >bar1y+5&&birdy<y)))||(birdx==bar2x&&(((birdy>1&&birdy<bar2y))||(birdy >bar2y+5&&birdy<y))))
{
         cout<<"YOU ARE FILLED!!"<<endl;
         break;
}    
}
}``
  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-06-30 05:15
    关注

    因为你其它行前面输出了两个HH,但这些问题行由于前面没有输出两个HH,只输出了一个空格,从而少输出了一个字符 你需要在输出HH的if处理中,记录一下该行是否已输出过HH,只要输出过,再次输出HH时,都需要先退一格 如果前面已经输出"鸟",同样也需要先退一个再输出HH

        for(int i=1;i<y;++i)
        {
            int hh = 0;
            int bird = 0;
            for(int j=1;j<x;++j)
            {
                if(j==birdx&&i==birdy)
                {
                    cout<<"鸟"; 
                    bird = 1;
                }
                else if((j==bar1x&&(i>=1&&i<=bar1y)||j==bar1x&&(i>=bar1y+5&&i<=y))||(j==bar2x&&(i>=1&&i<=bar2y)||j==bar2x&&(i>=bar2y+5&&i<=y)))
                {
                    if(hh == 1 || bird==1)
                    {
                        cout<<"\b";
                    }
                    hh = 1;
                    bird = 0;
                    cout<<"HH";
                }
                else
                    cout<<' ';
            }
            cout<<endl;
        }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 模电中二极管,三极管和电容的应用
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络