本来输出挺正常的
但是一旦移动控制栏或者全屏就出现这样的问题
有错的话应该就是void displayPath(int a[xmax][ymax])这个函数哪里出问题了
麻烦各位帮忙看看哪里的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;
}
}
}
}