我正在尝试为游戏中的玩家实现坐标系。
我有一个结构
typedef struct player {
int playerPosition[1][5];
}
我创建一个指向该结构的指针
struct* player playerPtr;
struct player playerOne;
playerPtr = &playerOne;
如果在游戏过程中,我想将玩家的坐标更新为位置 [1,2]。
使用playerPtr->playerPosition=[1][2]
时出现错误;
正确的方法是什么?
如前所述,您可以这样做:
playerPtr->playerPosition[0][2] = 100;
但可能你在这里有一个错误:
int playerPosition[1][5];
因为拥有大小为 1 的数组很少有意义。 你真的想让playerPosition
成为一个 1x5 的整数数组吗? 看起来你想要这样的东西:
struct position {
int x, y;
};
struct player {
position playerPosition;
};
然后你会这样做:
playerPtr->playerPosition.x = 1;
playerPtr->playerPosition.y = 2;
playerPtr->playerPosition=[1][2];
会给你错误(语法错误)
您没有指定要存储数据的数组索引,也不能以这种方式在C
中存储数据。
正确的方法是:
playerPtr->playerPosition[0][0] = 1;
playerPtr->playerPosition[0][1] = 2;
.
.
.
playerPtr->playerPosition[9][0] = 19;
playerPtr->playerPosition[9][1] = 20;
如果您像这样声明数组,则有效:
int playerPosition[10][2];
这将允许您存储十个坐标。
2数组(如数组[1][10])与数组[10]相同(对于用法,我不确定内存分配,2D数组可能需要更多内存)
我认为您可以使用不同但更简单的方法来解决此问题:
typedef struct position{
int x, y;
float refpos; //position from some reference point (like healing circle)
}position;
typedef struct player{
char name[20];
int health, attack, defense; //can be float too
position coord[20];
}player;
player player1, *playerPtr;
playerPtr = &player1;
playerPtr->position[0].x = 3;
playerPtr->position[0].y = 4;
playerPtr->position[0].refpos = 5; //Pythagorean triplet wrt origin (0,0)
普罗斯特!