Thread: Help with my text adventure game.

  1. #16
    Registered User VirtualAce's Avatar
    Join Date
    Aug 2001
    Posts
    9,607
    Since most items, rooms, etc., in the game resolve to a unique ID, creating a class to encapsulate a room might be a little overkill in the object oriented department.

    I'm not even sure that a room is complex enough to even warrant creating a class for it. A struct would probably do just fine since a room is essentially a data block.

    A room in the map reduces to this:
    • A description
    • Items in the room
    • Doors in the room
    • Anything else relative to your game


    Doors can be done with this:
    Code:
    struct Door
    {
      int iRoomID;  //Room ID the door is in
      int iRoomToID; //Room ID the door leads to
      bool bLocked;  //Is the door locked?
    }
    
    struct DoorKey
    {
      int iDoorID;   //Door this key unlocks
      int iRoomID;  //Room the key is found in
      int iDoorTypeID;  //Alternate unlock ID that allows one key to unlock a set 'type' of doors
    };
    When the player goes through the door you check the door structure. If the player room ID is Door::RoomID then you set it to Door::RoomToID. If the room ID is Door::RoomToID then you set it to Door::RoomID.

    Making everything in the game an object is not going to help you in the long run. Use very simple basic data structures for doors, rooms, etc. Classes should be reserved for complex items such as an inventory system, parser system, map system, etc, etc.

    I also recommend you keep the map system simple. If you are going to create a room object then I recommend keeping them in a vector. The map can be a simple class that wraps a 2D array that contains integers representing room IDs. So if map[10,10] has the number 52 then you would request room 52 from the room manager or container and then display the returned data to the user.

    Once you create a default standard way of displaying each room to the user you can simply call that function and pass in the room ID to display.

    Code:
    void RoomMgr::ShowRoom(int iRoomID)
    {
      ....
    }
    I made this part of a RoomMgr class but you can do what you want. But as long as you have a function for this then you can simply change the ID of the room to display and everything works as it should.

    Just my two cents. Just trying to caution you away from over object orienting your design. Objects are great but you don't want to create an overly complex system that is cumbersome to use and hard to maintain or extend.

    The usual approach I see to managing objects here by many is to make an object and stick it into an array to create your map. The problem with this is that the objects are known only to the map and yet the map really doesn't care about the objects. A road map is a map that leads you to somewhere or shows you where to go. Your map should be much the same. If you reduce everything to integers as unique IDs then you can store all your objects in nice, neat container classes. Anyone who needs access to these objects just asks the container for it and you have a nice centralized way of creating, managing, and destroying your objects.

    I would create lists or vectors of objects, items, descriptions, vocab, etc, etc that are populated at load-time. You can create a master manager class and derive from it for your various object managers or you can use one huge list (not necessarily an STL list). This also makes the data separate from the core engine code to run the game and will make your life easier. Figure out how you want the game to look and feel and how objects are going to interact with each other. Write it all down and then get to coding your newly developed system. The 'big picture' you have on paper will help a lot when you get to coding the other classes. If you don't have the 'big picture' you are going to code yourself into a corner pretty quick.

    This might sound complex but it is a very good lesson in object oriented programming and will greatly improve your C++ and object oriented design skills. Knowing C++ is just half the battle. The other half is actually designing a class architecture that works.
    Last edited by VirtualAce; 10-26-2007 at 02:15 AM.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. C Programming 2d Array Question
    By jeev2005 in forum C Programming
    Replies: 3
    Last Post: 04-26-2006, 03:18 PM
  2. A bunch of Linker Errors...
    By Junior89 in forum Windows Programming
    Replies: 4
    Last Post: 01-06-2006, 02:59 PM
  3. Game Independent Anti-cheat Project Needs Programmers
    By GIA Project Lea in forum Projects and Job Recruitment
    Replies: 3
    Last Post: 09-15-2005, 07:41 PM
  4. Saving a text game
    By Unregistered in forum C++ Programming
    Replies: 4
    Last Post: 03-27-2002, 01:33 PM
  5. Text Based Game
    By drdroid in forum C++ Programming
    Replies: 2
    Last Post: 02-18-2002, 06:21 PM