【发布时间】:2014-06-28 13:27:45
【问题描述】:
代表推箱子等级的字符串:-----#####-----------|-----#@$.#-----------|-----#####-----------
执行函数init_game(LEVEL *level)后,结构game应该是这样的:
GAME game = {
.x = 6,
.y = 1,
.width = 21,
.height = 3,
.steps = 0,
.map = {
{EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, WALL, WALL, WALL, WALL, WALL, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY},
{EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, WALL, EMPTY, BOX, DESTINATION, WALL, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY},
{EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, WALL, WALL, WALL, WALL, WALL, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY},
},
.level_name = "chicago"
}
我已经为x、y、width、height 和steps 解决了这个问题。 map 尚存
**/*............program begins here.......*/**
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef enum {
EMPTY,
WALL,
BOX,
DELIVERED,
DESTINATION
} MAP_ITEM;
typedef struct level { //level parsed from file
char *name;
char *description;
char *password;
char *raw_map;
struct level *next;
//char *solution;
} LEVEL;
typedef struct game {
int x; // player x position
int y; // player y position
int width; // raw_map width
int height; // raw_map height
int steps; // number of steps player made
MAP_ITEM **map; // game raw_map
} GAME;
GAME *init_game(LEVEL *level);
int main(){
LEVEL level;
level.name="chacago";
level.password="addie";
level.description="story beggins here";
level.raw_map="-----#####-----------|-----#@$.#-----------|-----#####-----------"; //this string should be exchanged for pointers o pointers to enumeration string
GAME *game;
game=init_game(&level);
return 0;
}
GAME *init_game(LEVEL *level){
GAME *game=malloc(sizeof(GAME));
int row=0,col=0;
int idx=0;
int x=0;
int y=0;
int width=0;
int height=0;
while (level->raw_map[idx]!='\0'){
while (level->raw_map[idx]!='|'){
if (level->raw_map[idx]=='@'){
x=col;
y=row;
}
if (level->raw_map[idx]=='\0')
break;
if (row==0)
width++;
idx++;
col++;
}
idx++;
col=0;
row++;
}
height=row;
int steps=0;
MAP_ITEM **map=(MAP_ITEM**)malloc((row+1)*(col+1));
game->x=x;
game->y=y;
game->width=width;
game->height=height;
game->steps=steps;
printf("\n");
printf("position of player is: %d , %d\n",game->x,game->y);
printf("width is: %d , height is: %d\n",game->width, game->height);
return game;
}
【问题讨论】:
-
请添加一个明确的问题;看来你忘了包括一个。
-
问题应该在标题中:如何将字符串中的字符交换为枚举字符串?为了更清楚:变量
level.raw_map中的字符串应该转换为存储在game.map中的枚举结构@ -
提示:字符是什么数据?您可以对其执行哪些操作?
标签: c enumeration pointer-to-pointer