【发布时间】:2020-01-30 02:06:13
【问题描述】:
我正在创建一个游戏,它创建一个带有绳索的 2d 地图,每条绳索都是一个房间。所以我正在创建一个从绳索 (0,0) 开始的玩家,这是我游戏中的房间 1。我正在尝试归还持有绳索的播放器,这就是我的问题所在。返回类型“struct PC *”但预期为“struct PC”时,我得到了不兼容的类型。
世界是我的 2d 地图,每个房间都有绳索,绳索是玩家的绳索。
struct PC
{
int respect;
int x;
int y;
};
void createRooms(struct room AllRooms[])
{
int MaxRooms = 9;
int number = 1;
for(int i = 0;i < MaxRooms; i++)
{
AllRooms[i].roomNum = number;
number++;
}
for(int i = 0;i < MaxRooms; i++)
{
printf("%d",AllRooms[i].roomNum);
}
}
void createWorld(struct room AllRooms[], int rows, int cols, struct room World[rows][cols])
{
int counter = 0;
for(int i = 0; i <= rows;i++)
{
for(int j = 0; j <= cols; j++)
{
World[i][j] = AllRooms[counter];
counter++;
printf("\nWorld %d", World[i][j].roomNum);
}
}
}
struct PC startPointPC(struct PC* player,int rows, int cols, struct room* World[rows][cols],struct PC* cords[rows][cols])
{
int x = 0;
int y = 0;
player->x = x;
player->y = y;
cords[x][y] = player;
printf("\nYou are starting in Room %d",World[x][y]->roomNum);
return player;
}
int main()
{
int MaxRooms = 9;
int rows = 2;
int cols = 2;
//creaste each room
struct room Room1;
struct room Room2;
struct room Room3;
struct room Room4;
struct room Room5;
struct room Room6;
struct room Room7;
struct room Room8;
struct room Room9;
struct PC player;
player.respect = 40;
//Store them into a array
struct room AllRooms[MaxRooms];
AllRooms[0] = Room1;
AllRooms[1] = Room2;
AllRooms[2] = Room3;
AllRooms[3] = Room4;
AllRooms[4] = Room5;
AllRooms[5] = Room6;
AllRooms[6] = Room7;
AllRooms[7] = Room8;
AllRooms[8] = Room9;
//allrooms has all the 9 rooms in the array
createRooms(AllRooms);
struct PC player;
struct room World[rows][cols];
struct PC cords[rows][cols];
player = startPointPC(&player,rows,cols,&World,&cords);
}
【问题讨论】:
-
为什么需要退回播放器?您传递了一个指针并对其进行了适当的修改。但是如果你真的想做,你需要
return *player; -
好的,谢谢,但是当我去打印电线时,它不会打印任何东西,但我没有收到任何错误。
-
您分配的是
cords[x][y],但打印的是World[x][y]。 -
另外,
cords被声明为struct PC的数组,但您正试图为该元素分配一个指针。 -
应该是
struct PC *cords[rows][cols]。并且在将数组传递给函数时不需要使用&,它会自动转换为指针。
标签: c