Tsz Foon 2022-04-08 09:10 采纳率: 91.7%
浏览 9
已结题

移动控制栏或者全屏出现颜色错乱,图在下边。

本来输出挺正常的

img


但是一旦移动控制栏或者全屏就出现这样的问题
有错的话应该就是void displayPath(int a[xmax][ymax])这个函数哪里出问题了

img


麻烦各位帮忙看看哪里的bug


#include<iostream>
#include<iomanip>
#include<stdlib.h>
#include <Windows.h>
#define xmax 50
#define ymax 50
using namespace std;

void SetFont(int size) {
    CONSOLE_FONT_INFOEX cfi;
    cfi.cbSize = sizeof cfi;
    cfi.nFont = 0;
    cfi.dwFontSize.X = 0;
    cfi.dwFontSize.Y = size;  //设置字体大小
    cfi.FontFamily = FF_DONTCARE;
    cfi.FontWeight = FW_NORMAL; //字体粗细 FW_BOLD

    SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &cfi);
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_FONT_INFO consoleCurrentFont;
    GetCurrentConsoleFont(handle, FALSE, &consoleCurrentFont);
}

int foreColor = 7, backColor = 0;
 
void SetColor(int fore = 7, int back = 0)
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), (back << 4) + fore);
}






void displayPath(int a[xmax][ymax])/////////////////////////////////////////////////
{
    SetColor();
    SetFont(12);
    system("mode concols=300 lines=300");//改变运行框大小 
    //SetConsoleTitle(LPCWSTR(L"map"));//命名 

  //输出第一排的x
  int x1=0; 
   cout<<" "<<setw(4)<<setfill(' ');
    for(int i=0;i<xmax;i++)
  {
      x1=i;
      if(x1%5==0)
      {
          if(x1<10)
          {
          cout<<x1<<setw(11)<<setfill(' ');
        }
          else
          {
          cout<<x1<<setw(10)<<setfill(' ');
        }
    }
    else
    {
        cout<<" ";
    }
  }
  cout<<endl;

  int y1=0;
  
  for(int i=0;i<ymax;i++)//输出第一列的y
  {
      y1=i;
      SetColor();//白底黑字    总的直接白底黑字 
      if(y1%5==0)
      {
          cout.width(2);//每个数占用2个字符空间
          cout<<y1;
        SetColor(0,7);
    }
    else
    { 
        cout.width(2);//每个数占用2个字符空间
          cout<<" ";
        SetColor(0,7);
    }

    
      for(int j=0;j<ymax;j++)
      {
          
        //改变高度颜色
        if(a[i][j]<0){
            SetColor();
            cout<<"   ";
        }
         if(a[i][j]<=3&&a[i][j]>0)//地面,改为浅灰色7 
          {
            cout.width(3);//每个数占用3个字符空间
            SetColor(0,7);
              cout<<a[i][j];
              SetColor();//恢复默认颜色白字黑底 
        }
        else if(a[i][j]>3&&a[i][j]<=(xmax/5)*1)//10=(xmax/5)*1  将xmax分成5分,五种不一样的颜色 
        {
            SetColor(14,8);
              cout.width(3);//每个数占用3个字符空间
              cout<<a[i][j];
              SetColor();
        }
        else if(a[i][j]>(xmax/5)*1&&a[i][j]<=(xmax/5)*2)
        {
            SetColor(2,8);
              cout.width(3);//每个数占用3个字符空间
              cout<<a[i][j];
              SetColor();
        }
        else if(a[i][j]>(xmax/5)*2&&a[i][j]<=(xmax/5)*3)
        {
            SetColor(3,8);
              cout.width(3);//每个数占用3个字符空间
              cout<<a[i][j];
              SetColor();
        }    
        else if(a[i][j]>(xmax/5)*3&&a[i][j]<=(xmax/5)*4)
        {
            SetColor(4,8);
              cout.width(3);//每个数占用3个字符空间
              cout<<a[i][j];
              SetColor();
        }    
        else if(a[i][j]>(xmax/5)*4&&a[i][j]<=(xmax/5)*5)
        {
            SetColor(5,8);
              cout.width(3);//每个数占用3个字符空间
              cout<<a[i][j];
              SetColor();
        }
    }//字体颜色 14 2 3 4 5 
    /*******************************************************************************************/
    //输出最后一列y 
    int y=i;
      if(y%5==0)
      {
        SetColor();
          cout<<y;
        //SetColor(0,7);
    }
    else
    {
        SetColor();
        cout.width(3);//每个数占用3个字符空间
          cout<<" ";
    }
    
    cout<<endl;
  }

  //输出最后一排的x
  int x2=0; 
   cout<<" "<<setw(3)<<setfill(' ');
    for(int i=0;i<xmax;i++)
  {
      x2=i;
      if(x2%5==0)//判断,如果是0 5 10这样的数就输出 
      {
          if(x2<10)
          {
          cout<<x2<<setw(11)<<setfill(' ');
        }
          else
          {
          cout<<x2<<setw(10)<<setfill(' ');
        }
    }
    else//否则就输出空白 
    {
        cout<<" ";
    }
  }
  cout<<endl; 
}


void setcoordinate(int a[xmax][ymax]);
void revisecoordinate(int a[xmax][ymax]);
int main()
{
    int a[xmax][ymax];
    setcoordinate(a);
    revisecoordinate(a);//将路境外的值全部赋值为-1 
    displayPath(a);
    
    system("pause");
    return 0;
}



/**********************************************创建地图环节,各位可以不用看********************************************************************/

void setcoordinate(int a[xmax][ymax])
{
    for(int i=0;i>=0&&i<5;i++)
    {
        for(int j=0;j<ymax;j++)
        {
            a[i][j]=2;
        }
    }
    /**************************************************/
    for(int i=5;i>=5&&i<10;i++)
    {
        for(int j=0;j<ymax;j++)
        {
            a[i][j]=3;
        }
    }
    /**************************************************/
    for(int i=10;i>=10&&i<20;i++)
    {
        for(int j=0;j<ymax;j++)
        {
            a[i][j]=10;
        }
    }
    /**************************************************/
    for(int i=20;i>=20&&i<30;i++)
    {
        for(int j=0;j<ymax;j++)
        {
            a[i][j]=20;
        }
    }
    /**************************************************/
    for(int i=30;i>=30&&i<40;i++)
    {
        for(int j=0;j<ymax;j++)
        {
            a[i][j]=30;
        }
    }
    /**************************************************/
    for(int i=40;i>=40&&i<45;i++)
    {
        for(int j=0;j<ymax;j++)
        {
            a[i][j]=40;
        }
    }
    /**************************************************/
    for(int i=45;i>=45&&i<xmax;i++)
    {
        for(int j=0;j<ymax;j++)
        {
            a[i][j]=50;
        }
    }
}
/************************************************修改地图******************************************************/
void revisecoordinate(int a[xmax][ymax])
{
    //先修改y方向
    for(int i=0;i<xmax;i++)
    {
        for(int j=0;j<ymax;j++)
        {
            //改变右上角 
            if(0<=i&&i<=9&&0<j&&j<=49||10<=i&&i<=30&&20<j&&j<=49||30<=i&&i<=48&&35<j&&j<=49)
            {
                a[i][j]=-1;
            }
            //改变左下角
             if(11<=i&&i<=49&&0<=j&&j<=19||32<=i&&i<=49&&20<=j&&j<=34)
            {
                a[i][j]=-1;
            }
                
        }
    } 
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 4月16日
    • 创建了问题 4月8日

    悬赏问题

    • ¥15 freertos下使用外部中断失效
    • ¥15 输入的char字符转为int类型,不是对应的ascall码,如何才能使之转换为对应ascall码?或者使输入的char字符可以正常与其他字符比较?
    • ¥15 devserver配置完 启动服务 无法访问static上的资源
    • ¥15 解决websocket跟c#客户端通信
    • ¥30 Python调用dll文件输出Nan重置dll状态
    • ¥15 浮动div的高度控制问题。
    • ¥66 换电脑后应用程序报错
    • ¥50 array数据同步问题
    • ¥15 pic16F877a单片机的外部触发中断程序仿真失效
    • ¥15 Matlab插值拟合差分微分规划图论