Ejemplo n.º 1
0
/*
 *createLane function
 *
 *p : a pointer to an array of strings represinting a lane
 *
 *this function will take an array of strings represinting a lane
 *and return a struct lane
 */
struct lane *createLane(char **p)
{
  struct lane *l;
  char *temp;
  char **params;
  int now;
  int n = 0;
  int i;
  int numOfCkPts;
  int numOfSps;
  int numOfEts;

  l = malloc(sizeof(struct lane));
  assert( l != 0);
  now = numberOfWords(p[n]);
  assert(now == 2);
  params = divideLine(p[n], now, MAX_STRING_LENGTH);
  assert(params != 0);
  l -> lane_id = createId(params[1]);
  freeCharArray(params, now);
  n++;
  
  now = numberOfWords(p[n]);
  assert(now == 2);
  params = divideLine(p[n], now, MAX_STRING_LENGTH);
  assert(params != 0);
  l -> number_of_waypoints = atoi(params[1]);
  freeCharArray(params, now);
  n++;
  
  temp = "lane_width";
  now = numberOfWords(p[n]);
  params = divideLine(p[n], now, MAX_STRING_LENGTH);
  assert(params != 0);
  if(compTwoStrings(params[0], temp)){
    assert(now == 2);
    l -> lane_width = atoi(params[1]);
    n++;
  }
  else
    l -> lane_width = -1;
  freeCharArray(params, now);

  temp = "left_boundary";
  now = numberOfWords(p[n]);
  params = divideLine(p[n], now, MAX_STRING_LENGTH);
  assert(params != 0);
  if(compTwoStrings(params[0], temp)){
    assert(now == 2);
    l -> left_boundary = malloc(MAX_STRING_LENGTH * sizeof(char));
    stringCopy(params[1],l -> left_boundary);
    n++;
  }
  else
    l -> left_boundary = 0;
  freeCharArray(params, now);
  
  temp = "right_boundary";
  now = numberOfWords(p[n]);
  params = divideLine(p[n], now, MAX_STRING_LENGTH);
  assert(params != 0);
  if(compTwoStrings(params[0], temp)){
    assert(now == 2);
    l -> right_boundary = malloc(MAX_STRING_LENGTH * sizeof(char));
    stringCopy(params[1],l -> right_boundary);
    n++;
  }
  else
    l -> right_boundary = 0;
  freeCharArray(params, now);

  numOfCkPts = 0;
  temp = "checkpoint";
  now = numberOfWords(p[n]);
  params = divideLine(p[n], now, MAX_STRING_LENGTH);
  assert(params != 0);
  while(compTwoStrings(params[0], temp)){
    assert(now == 3);
    freeCharArray(params, now);
    numOfCkPts++;
    now = numberOfWords(p[n + numOfCkPts]);
    params = divideLine(p[n + numOfCkPts], now, MAX_STRING_LENGTH);
    assert(params != 0);
  }
  freeCharArray(params, now);
  l -> number_of_checkpoints = numOfCkPts;
  if(numOfCkPts > 0)
    l -> checkpoints_list = malloc(numOfCkPts * sizeof(struct checkpoint));
  else
    l -> checkpoints_list = 0;
  for(i = 0; i < numOfCkPts; i++){
    l -> checkpoints_list[i] = createCheckpoint(p[n]);
    n++;
  }

  numOfSps = 0;
  temp = "stop";
  now = numberOfWords(p[n]);
  params = divideLine(p[n], now, MAX_STRING_LENGTH);
  assert(params != 0);
  while(compTwoStrings(params[0], temp)){
    assert(now == 2);
    freeCharArray(params, now);
    numOfSps++;
    now = numberOfWords(p[n + numOfSps]);
    params = divideLine(p[n + numOfSps], now, MAX_STRING_LENGTH);
    assert(params != 0);
  }
  freeCharArray(params, now);
  l -> number_of_stops = numOfSps;
  if(numOfSps > 0)
    l -> stops_list = malloc(numOfSps * sizeof(struct stop));
  else
    l -> stops_list = 0;
  for(i = 0; i < numOfSps; i++){
    l -> stops_list[i] = createStop(p[n]);
    n++;
  }

  numOfEts = 0;
  temp = "exit";
  now = numberOfWords(p[n]);
  params = divideLine(p[n], now, MAX_STRING_LENGTH);
  assert(params != 0);
  while(compTwoStrings(params[0], temp)){
    assert(now == 3);
    freeCharArray(params, now);
    numOfEts++;
    now = numberOfWords(p[n + numOfEts]);
    params = divideLine(p[n + numOfEts], now, MAX_STRING_LENGTH);
    assert(params != 0);
  }
  freeCharArray(params, now);
  l -> number_of_exits = numOfEts;
  if(numOfEts > 0)
    l -> exits_list = malloc(numOfEts * sizeof(struct stop));
  else
    l -> exits_list = 0;
  for(i = 0; i < numOfEts; i++){
    l -> exits_list[i] = createExit(p[n]);
    n++;
  }

  l -> waypoints_list = malloc(
			       (l -> number_of_waypoints) * 
			       sizeof(struct waypoint));
  assert((l -> waypoints_list) != 0);
  for(i = 0; i < l -> number_of_waypoints; i++){
    l -> waypoints_list[i] = createWaypoint(p[n]);
    n++;
  }

  return l;
}
Ejemplo n.º 2
0
/*
 *createPerimeter function
 *
 *p : a pointer to an array of strings represinting a perimeter
 *
 *this function will take an array of strings represinting a perimeter
 *and return a struct perimeter
 */
struct perimeter *createPerimeter(char **p)
{
  struct perimeter *p_s;
  char *temp;
  char **params;
  int now;
  int n = 0;
  int i;
  int numOfEts;

  p_s = malloc(sizeof(struct perimeter));
  assert(p_s != 0);
  now = numberOfWords(p[n]);
  assert(now == 2);
  params = divideLine(p[n], now, MAX_STRING_LENGTH);
  assert(params != 0);
  p_s -> perimeter_id = createId(params[1]);
  freeCharArray(params, now);
  n++;
  
  now = numberOfWords(p[n]);
  assert(now == 2);
  params = divideLine(p[n], now, MAX_STRING_LENGTH);
  assert(params != 0);
  p_s -> number_of_perimeterpoints = atoi(params[1]);
  freeCharArray(params, now);
  n++;
  
  numOfEts = 0;
  temp = "exit";
  now = numberOfWords(p[n]);
  params = divideLine(p[n], now, MAX_STRING_LENGTH);
  assert(params != 0);
  while(compTwoStrings(params[0], temp)){
    assert(now == 3);
    freeCharArray(params, now);
    numOfEts++;
    now = numberOfWords(p[n + numOfEts]);
    params = divideLine(p[n + numOfEts], now, MAX_STRING_LENGTH);
    assert(params != 0);
  }
  freeCharArray(params, now);
  p_s -> number_of_exits = numOfEts;
  if(numOfEts > 0)
    p_s -> exits_list = malloc(numOfEts * sizeof(struct stop));
  else
    p_s -> exits_list = 0;
  for(i = 0; i < numOfEts; i++){
    p_s -> exits_list[i] = createExit(p[n]);
    n++;
  }

  p_s -> perimeterpoints_list = malloc(
			       (p_s -> number_of_perimeterpoints) * 
			       sizeof(struct perimeterpoint));
  assert((p_s -> perimeterpoints_list) != 0);
  for(i = 0; i < p_s -> number_of_perimeterpoints; i++){
    p_s -> perimeterpoints_list[i] = createPerimeterpoint(p[n]);
    n++;
  }
  return p_s;
}
Ejemplo n.º 3
0
void Room::generateRooms(){
	lvl++;
	int roomNum = 10 + lvl;
	// Limit to 40 rooms
	if(roomNum > 40)
		roomNum = 40;

	int x = 0, y = 0;

	std::string tileMap = "";
	tileMap += "XXXXXXXXXXXX\n";
	tileMap += "X          X\n";
	tileMap += "X          X\n";
	tileMap += "X          X\n";
	tileMap += "X          X\n";
	tileMap += "X          X\n";
	tileMap += "X          X\n";
	tileMap += "X          X\n";
	tileMap += "XXXXXXXXXXXX";

	for(int i = 0; i < roomNum; i++){
		std::string roomMap = tileMap;
		// Create first exit
		if(i == 0){
			doors.push(SOUTH);
			roomMap[109] = ' ';
			roomMap[110] = ' ';
		} else{
			createEntrance(roomMap);
			// Don't create exit in last room
			if(i != roomNum - 1)
				createExit(roomMap);
		} 
		createCornerBlocks(roomMap);
		if(i != roomNum - 1)
			createCenterBlocks(roomMap);
		// Add room pieces according to room map
		for(int j = 0; j < roomMap.size(); j++){
			if(roomMap[j] == 'X')
				addBlock(x, y);
			else if(roomMap[j] == '\n'){
				y += 64;
				x -= 64*13;
			} 
			// Add stairs in last room
			else if(j == 58 && i == roomNum - 1)
				stairs.push_back(Stairs(x, y));
			else{
				int randPiece = rand() % 100;
				if(randPiece == 0)
					addEnemy(x, y);
				else if(randPiece == 1)
					addItem(x, y);
			}
			x +=64;
		}
		// Move x and y coordinates to next position for new room
		if(doors.front() == SOUTH){
			x -= 64*12;
			y += 64;
		} else if(doors.front() == EAST){
			y -= 64*8;
		} else if(doors.front() == WEST){
			x -= 64*12*2;
			y -= 64*8;
		}
	}
}