Dungeon_Space_Room *generateMultipleRooms(int *seed)
{
	int seed_local;
	int num_room;
	
	if(seed <= 0)
	{
		seed_local = time(NULL);
		*seed = seed_local;
	}
	else if(seed > 0)
	{
		seed_local = *seed;
	}
	
	srand(seed_local);
	
	num_room = (rand()%3)+5;
	//printf("Number of rooms is %d\n", num_room);
	
	Dungeon_Space_Room *room_collection = malloc(sizeof(Dungeon_Space_Room) * (num_room+1));
	Dungeon_Space_Room *room_collection_ptr;
	
	for(room_collection_ptr = room_collection; room_collection_ptr != room_collection + num_room; room_collection_ptr++)
	{
		*room_collection_ptr = generateRoom();
	}
	*room_collection_ptr = Dungeon_Space_Room_create(-1, -1);
	return room_collection;
	
}
示例#2
0
MapNode* generateMapTree(int maxRooms)
{
	MapNode* rootNode = new MapNode();
	std::vector<MapNode*>* leafList = new std::vector<MapNode*>();

	rootNode->refBlock.dimensions.x = MAX_X_SIZE;
	rootNode->refBlock.dimensions.y = MAX_Y_SIZE;
	rootNode->refBlock.position.x = 0;
	rootNode->refBlock.position.y = 0;
	generateMapHelper(rootNode, 1, maxRooms);
	
	//Now we need to create rooms in the leaves.
	getLeafNodes(rootNode, leafList);

	//for each leaf node...
	for(int i = 0; i < leafList->size(); i++)
	{
		//generate a room somewhere in this node.
		generateRoom((*leafList)[i]);
	}

	//Connect some corridors
	for(int i = 0; i < leafList->size(); i+=2)
	{
		//connect the two nodes together
		connectRooms((*leafList)[i], (*leafList)[i+1]);
	}
	return rootNode;
}
示例#3
0
int generateDungeon(gridCell_t*** gridPtr, room_t** roomsPtr) {
    int roomCount;
    unsigned int seed;
    seed = (unsigned int)time(NULL); //1453848819;
    srand(seed);
    printf("Seed: %d\n", seed);

    roomCount = MIN_ROOMS + (rand() % (MAX_ROOMS - MIN_ROOMS + 1));
    printf("Room count: %d\n", roomCount);

    if (!(*roomsPtr = malloc(sizeof(room_t) * roomCount))) {
        return -1;
    }

    for (int i = 0; i < roomCount; i++) {
        generateRoom(&(*roomsPtr)[i], *roomsPtr, i);
    }

    *gridPtr = populateGrid(*roomsPtr, roomCount);
    connectRooms(*gridPtr, *roomsPtr, roomCount);
    return roomCount;
}
示例#4
0
int generateDungeon(dungeon_t* dungeonPtr) {
    dungeonPtr->roomCount = MIN_ROOMS + (rand() % (MAX_ROOMS - MIN_ROOMS + 1));
    printf("Room count: %d\n", dungeonPtr->roomCount);

    if (!(dungeonPtr->rooms = malloc(sizeof(room_t) * dungeonPtr->roomCount))) {
        return -1;
    }

    for (int i = 0; i < dungeonPtr->roomCount; i++) {
        generateRoom(&dungeonPtr->rooms[i], dungeonPtr->rooms, i);
    }

    if (populateGrid(dungeonPtr)) {
        return -2;
    }
    connectRooms(dungeonPtr->grid, dungeonPtr->rooms, dungeonPtr->roomCount);

    initMonsters(dungeonPtr);
    turnInit(dungeonPtr);

    return 0;
}
int main(){
  nameGenerator();
  //inventory = (Weapon)calloc(1,sizeof(Weapon));
  srand(time(NULL));
  seed = getpid();
  while(1){
    system("clear");
    printf("Welcome to Generic Crawler #%d!\nType Play to start playing, or Exit to Quit the game.\n",rand_lim(545));
    fgets(mainMenu, sizeof(mainMenu), stdin);
    if(strcasecmp("Play\n", mainMenu) == 0){
      /// printf("Game is Go\n");
      printf("Load Game?\n");
      fgets(input,sizeof(input), stdin);
      int bob = 2;
      if(strcasecmp(input,"Yes\n") == 0)
	bob = 1;
      switch(bob){
      case 1:
	if(!LoadChooser()){
	  printf("Test\n");
	  break;
	}
	else 
	  printf("There is no save file present. Creating new Character\n");
      case 2:
	Player = (Character *)calloc(1, sizeof(Character));
	printf("Please enter your Name:\n");
	fgets(user,sizeof(user),stdin);
	strcpy(Player->name,user);
	printf("Generating Stats\n");
	generatePlayer();
	printStats();
	system("clear");
	printf("Would You Like to see the Help Page?\n");
	while(quit){
	  fgets(input,sizeof(input),stdin);
	  if(strcasecmp("Yes\n",input) == 0){
	    DisplayHelp();
	    break;
	  }
	  else if(strcasecmp("No\n",input) == 0){
	    system("clear");
	    break;
	  }
	  else{
	    printf("Sorry. I don't understand what you said\n");
	  }	  
	}
	DRoom = calloc(1,sizeof(Room));
	generateRoom();
      }
      while(Player->hp > 0 && quit){
	signal(SIGINT, sigHandle);
	system("clear");
	printf("Your life: %d \n", Player->hp);
	if(!DRoom->roomClear)
	  printf("There is a %s in this room\n", Enemy->name);
	printf("What would you like to do?\n");
	fgets(input,sizeof(input), stdin);
	interpretGame();
      }
      printf("YOU LOST!\n");
      sleep(2);
    }
    else if(strcasecmp("Exit\n",mainMenu) == 0){
      printf("Goodbye\n");
      break;
    }
    else if(strcasecmp("What What?\n",mainMenu) == 0){
      printf("NO. WE ARE NOT DOING THAT!\n");
      sleep(1);
    }
    else{
      printf("Sorry. I don't understand what you said\n");
      sleep(2);
    }
  }
  return 1;
}
void interpretGame(){
  if(strcasecmp(input,"Help\n") == 0){
    system("clear");
    DisplayHelp();
  }
  else if(strcasecmp(input,"Stats\n") == 0){
    system("clear");
    printStats();
  }
  else if(strcasecmp(input,"Room\n") == 0){
    system("clear");
    printRoomInfo();
  }
  else if(strcasecmp(input,"Attack\n") == 0){
    battle();
  }
  else if(strcasecmp(input,"down forward low punch\n") == 0){
    printf("Hadoken \n");
    sleep(1);
    if(DRoom->roomClear)
      printf("A blue orb comes out of your hands and hits the wall\n");
    else
      printf("%s: ... \n", Enemy->name);
    sleep(1);
  }
  else if(strcasecmp(input,"Advance\n") == 0){
    if(!DRoom -> roomClear){
      printf("The room isn't clear yet!\n");
      sleep(1);
    }
    else{
      printf("You move into the next room\n");
      generateRoom();
    }
  }
  else if(!strcasecmp(input,"Save\n")){
    dump();
    printf("Game saved\n");
  }
    else if(!strcasecmp(input,"OSave\n")){
    dump();
    char buff[256];
    printf("Enter the ip adress of the save server\n");
    fgets(buff, sizeof(buff), stdin);
    OSave(2, buff);
  }
  else if(strcasecmp(input,"Inventory\n") == 0){
    if(Player->weaponNum == 0){
	printf("You have no weapons!\n");
	getchar();
    }
    else if(Player->weaponNum == 1){
	printf("Your weapons give you a +%d bonus to attack.\n",Player->slot1.attk);
	getchar();
    }
    else if(Player->weaponNum == 2){
      printf("Your weapons give you a +%d bonus to attack.\n",Player->slot1.attk + Player->slot2.attk);
      getchar();
    }
  }
  else if(strcasecmp(input,"Quit\n") == 0 || strcasecmp(input,"Exit\n") == 0){
    quit = 0;
  }
  else{
    printf("Sorry, I don't understand that\n");
    sleep(1);
    system("clear");
  }
}