我正在撰寫一個小游戲,我決定從檔案中加載地圖,但我遇到了一個問題。檔案如下所示:

我需要像在檔案中期望的點一樣列印它。它們必須是空格。我的列印代碼如下所示:
void printmap(){
clear();
refresh();
FILE *mapfile;
int width=30;
int height=20;
char map[20][30];
mapfile = fopen(mapname, "r ");
for (int row = 0; row < height; row ) {
for (int col = 0; col < width; col ) {
mvprintw(0,0," ");
mvprintw(0,0,"%d %d",row,col);
refresh();
map[row][col]=fgetc(mapfile);
}
}
fclose(mapfile);
offsetW=(xMax-width)/2;
offsetY=((yMax-height)/2)-3;
printOffsetW = offsetW 23;
printOffsetY = offsetY 17;
for(int i=0;i<20;i ){
offsetW=(xMax-width)/2;
for(int y=0;y<width;y ){
if(map[i][y]=='#'){
attron(COLOR_PAIR(1));
mvprintw(i,y,"#");
attroff(COLOR_PAIR(1));
}
else if(map[i][y]=='*'){
attron(COLOR_PAIR(2));
mvprintw(i,y,"*");
attroff(COLOR_PAIR(2));
}
else if(map[i][y]==' '||map[i][y]=='.'){
mvprintw(i,y," ");
}
offsetW ;
}
offsetY ;
}
mvprintw(printOffsetY,printOffsetW,"@");
refresh();
}
偏移量僅用于使地圖居中(將來),因此您可以忽略它們。
我的實際列印是這樣的:

而且我真的不知道問題出在哪里。
我將不勝感激任何幫助。謝謝你
uj5u.com熱心網友回復:
由于地圖檔案在行尾包含換行符,因此每一行都包含width 1字符。然后順序fgetc()
讀取每行的額外位元組并導致垂直對齊的傾斜。
一種解決方法是顯式讀取換行符,例如:
for (int row = 0; row < height; row ) {
for (int col = 0; col < width; col ) {
...
map[row][col]=fgetc(mapfile);
}
fgetc(mapfile); // read the newline character and discard
}
或者更便攜的方式:
char map[20][30];
char buf[BUFSIZ]; // line buffer
mapfile = fopen(mapname, "r ");
for (int row = 0; row < height; row ) {
fgets(buf, BUFSIZ, mapfile); // read each line
for (int col = 0; col < width; col ) {
...
map[row][col]=buf[col]; // assign column values of the line
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/369520.html
上一篇:有沒有辦法匯出C靜態庫中的函式?
