예제 #1
0
        string HandleGiveCommand(Command giveCommand, Game game)
        {
            string objectString = giveCommand.GetParameter("object");
            string personString = giveCommand.GetParameter("person");

            Objects.ID objectType = Emoji.GetID(objectString);

            if (objectType == Objects.ID.Unknown)
            {
                return("You can't even figure out what you're trying to give.");
            }

            if (!game.mInventory.Contains(objectType))
            {
                return("You don't have " + objectString);
            }

            Objects.ID personType = Emoji.GetID(personString);
            if (personType == Objects.ID.Unknown)
            {
                mStatus = Status.Frustrated;
                return("You can't even figure out who you're trying to talk to.");
            }

            GridObject person = game.mRoom.FindObjectAdjacentTo(mPosition, personType);

            if (person == null)
            {
                mStatus = Status.Frustrated;
                return("They aren't close enough to talk to.");
            }

            return(person.GiveObject(objectType, game));
        }
예제 #2
0
        public DynamicObject SpawnObject(Objects.ID type, Point position)
        {
            DynamicObject dynamicObject = (DynamicObject)GridObject.Create(type, position);

            AddNewItem(dynamicObject);
            return(dynamicObject);
        }
예제 #3
0
        string HandleTalkCommand(Command talkCommand, Game game)
        {
            string personString  = talkCommand.GetParameter("person");
            string subjectString = talkCommand.GetParameter("subject");

            Objects.ID personType = Emoji.GetID(personString);
            if (personType == Objects.ID.Unknown)
            {
                mStatus = Status.Frustrated;
                return("You can't even figure out who you're trying to talk to.");
            }

            Objects.ID subjectType = Objects.ID.Unknown;
            // Only try to parse if it's not empty
            if (subjectString != "")
            {
                subjectType = Emoji.GetID(subjectString);
                if (subjectType == Objects.ID.Unknown)
                {
                    mStatus = Status.Frustrated;
                    return("You can't even figure out what you're trying to talk about.");
                }
            }

            GridObject person = game.mRoom.FindObjectAdjacentTo(mPosition, personType);

            if (person == null)
            {
                mStatus = Status.Frustrated;
                return("They aren't close enough to talk to.");
            }

            return(person.TalkTo(subjectType, game));
        }
예제 #4
0
        string LookAtObjectCommand(Command lookAtCommand, Game game)
        {
            string objectString = lookAtCommand.GetParameter("object");

            Objects.ID objectType = Emoji.GetID(objectString);

            if (objectType == Objects.ID.Unknown)
            {
                mStatus = Status.Frustrated;
                return("You can't even figure out what that is.");
            }

            GridObject targetObject = game.mRoom.GetNearestObject(objectType, mPosition);

            if (targetObject == null)
            {
                if (game.mInventory.Contains(objectType))
                {
                    mStatus = Status.Thinking;
                    return(ObjectTraits.GetObjectTraits(objectType).GetDescription(game));
                }
                else
                {
                    mStatus = Status.Frustrated;
                    return("You don't see that here.");
                }
            }
            else
            {
                mStatus = Status.Thinking;
                return(targetObject.GetDescriptionText(game));
            }
        }
예제 #5
0
        string HandleUseWithoutTargetCommand(Command useCommand, Game game)
        {
            string actorString = useCommand.GetParameter("actor");

            Objects.ID actorType = Emoji.GetID(actorString);

            if (actorType == Objects.ID.Unknown)
            {
                mStatus = Status.Frustrated;
                return("You don't have that in your inventory.");
            }

            GridObject actorObject = game.mRoom.FindObjectAdjacentTo(mPosition, actorType);

            if (actorObject == null)
            {
                mStatus = Status.Frustrated;
                return("You couldn't find that nearby.");
            }

            ActionResult result = actorObject.UseWithoutTarget(game);

            if (!result.mSuccess)
            {
                mStatus = Status.Frustrated;
            }

            return(result.mOutput);
        }
예제 #6
0
 private string RenderObject(GridObject gridObject)
 {
     if (mIsRenderingHallucination)
     {
         if (gridObject.GetTypeID() == Objects.ID.PlayerCharacter)
         {
             return(gridObject.Render());
         }
         else
         {
             return(Emoji.GetRandomHallucinationEmoji());
         }
     }
     else
     {
         return(gridObject.Render());
     }
 }
예제 #7
0
        public string Render()
        {
            List <string> lines = new List <string>();

            for (int rowIndex = 0; rowIndex < Game.numRoomRows; rowIndex++)
            {
                string line = "";
                for (int columnIndex = 0; columnIndex < Game.numRoomColumns; columnIndex++)
                {
                    GridObject gridObject = GetFirstObject(new Point(rowIndex, columnIndex));

                    line += RenderObject(gridObject);
                }
                lines.Add(line);
            }

            return(string.Join('\n', lines));
        }
예제 #8
0
        string HandleInspectDirectionCommand(Command inspectCommand, Game game)
        {
            string directionString = inspectCommand.GetParameter("direction");

            Direction direction = Room.GetDirection(directionString);

            if (direction == Direction.Unknown)
            {
                return("Invalid direction");
            }

            Point inspectPosition = MathUtils.GetAdjacentPoint(mPosition, direction);

            GridObject inspectObject = game.mRoom.GetFirstObject(inspectPosition);

            mStatus = Status.Thinking;

            return(inspectObject.GetDescriptionText(game));
        }
예제 #9
0
        public Room(string description, ICollection <string> roomLines, IEnumerable <GridObjectSetup> gridObjectSetups)
        {
            mDescription = description;

            Debug.Assert(roomLines.Count == Game.numRoomRows);

            int lineIndex = 0;

            foreach (string line in roomLines)
            {
                List <string> splitLine = StringUtils.SplitEmojiString(line);

                Debug.Assert(splitLine.Count == Game.numRoomColumns);

                for (int columnIndex = 0; columnIndex < splitLine.Count; columnIndex++)
                {
                    GridObject staticObject = GridObject.Create(Emoji.GetID(splitLine[columnIndex]), new Point(lineIndex, columnIndex));
                    mStaticRoomGrid[lineIndex, columnIndex] = (StaticObject)staticObject;
                }

                lineIndex++;
            }

            foreach (GridObjectSetup setup in gridObjectSetups)
            {
                GridObject gridObject = setup.CreateObject();

                if (gridObject as DynamicObject != null)
                {
                    mDynamicObjects.Add((DynamicObject)gridObject);
                }
                else
                {
                    Point position = gridObject.GetPosition();
                    mStaticRoomGrid[position.mRow, position.mColumn] = (StaticObject)gridObject;
                }
            }
        }
예제 #10
0
        string HandleUseOnTargetCommand(Command useCommand, Game game)
        {
            string actorString  = useCommand.GetParameter("actor");
            string targetString = useCommand.GetParameter("target");

            Objects.ID actorType = Emoji.GetID(actorString);

            if (actorType == Objects.ID.Unknown)
            {
                mStatus = Status.Frustrated;
                return("You don't have that in your inventory.");
            }

            if (!game.mInventory.Contains(actorType))
            {
                mStatus = Status.Frustrated;
                return("You don't have " + actorString);
            }

            Objects.ID targetType = Emoji.GetID(targetString);

            if (targetType == Objects.ID.Unknown)
            {
                mStatus = Status.Frustrated;
                return("You can't find that");
            }

            GridObject targetObject = game.mRoom.FindObjectAdjacentTo(mPosition, targetType);

            if (targetObject == null)
            {
                mStatus = Status.Frustrated;
                return("There isn't " + targetString + " nearby");
            }

            string outText = "";

            if (targetType == Objects.ID.Lock)
            {
                Lock lockObject = targetObject as Lock;
                if (lockObject.CanBeUnlockedBy(actorType))
                {
                    lockObject.Unlock();
                    outText = "You unlocked the door with the " + actorString;
                }
            }
            else if (targetType == Objects.ID.Clamp)
            {
                Objects.ID crushingResult = ObjectTraits.GetObjectTraits(actorType).mCrushingResultType;
                if (crushingResult != Objects.ID.Unknown)
                {
                    game.mInventory.RemoveItem(actorType);
                    game.mInventory.AddItem(crushingResult);
                    outText = "You crushed the " + actorString;
                }
            }

            if (outText == "")
            {
                outText = "You don't think you can do that.";
                mStatus = Status.Frustrated;
            }

            return(outText);
        }