2017-09-23 101 views
0

我试图在游戏中实现一个玩家的坐标系。使用指针更新结构中的二维整数数组

我有一个结构

typedef struct player { 
    int playerPosition[1][5]; 
} 

我创建一个指向结构

struct* player playerPtr; 
struct player playerOne; 
playerPtr = &playerOne; 

如果在比赛过程中,我想更新播放器的坐标来定位[1,2] 。

我在使用playerPtr->playerPosition=[1][2]时出错;

这样做的正确方法是什么?

+0

'struct player playerOne;结构播放器* playerPtr =&playerOne;'''playerPtr-> playerPosition [1 -1] [2 -1] = intValue;' – BLUEPIXY

+0

你究竟期待这个'playerPtr-> playerPosition = [1] [2];'去做? – alk

+0

关于:'struct * player playerPtr;'应该是:'struct player * playerPtr;' – user3629249

回答

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; 
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]; 

,这将允许你存储十个坐标。

2Dimentional阵列如阵列[1] [10]是一样的阵列[10](供使用,我不能确定的内存分配,二维数组,可能需要更多的内存)

我想你可以使用不同但更容易处理此问题:

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) 

Prost!