我正在尝试为游戏中的玩家实施坐标系。
我有一个结构
typedef struct player {
int playerPosition[1][5];
}
我创建了一个指向该结构的指针
struct* player playerPtr;
struct player playerOne;
playerPtr = &playerOne;
如果在比赛期间,我想将玩家的坐标更新为位置[1,2]。
使用playerPtr->playerPosition=[1][2]
时出错;
这样做的正确方法是什么?
答案 0 :(得分:0)
如上所述,您可以这样做:
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;
答案 1 :(得分:0)
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];
这将允许您存储十个坐标。
像array [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)
普罗斯特!