Это довольно сложно объяснить.Сейчас я работаю над текстовым приключением и анализирую ввод от игрока.
Когда игрок вводит данные, могут быть два возможных субъекта (назовем их subject1 и subject2).Например, в следующем случае: «ударил по двери палкой», subject1 - это «дверь», а subject2 - «палка».
В этом случае и дверь, и палка относятся к типу «Предмет».Также могут быть предметы типа «Персонаж».
Проблема в том, что если я разбираю предметы, то символы, разбирающие предметы, будут находить предмет как subject1, даже если это фактически второй субъект.Код, который я использую, выглядит следующим образом:
public static void ParseForSubjects(string Input, Player CurrentPlayer, ref object Subject1, ref object Subject2)
{
// This method doesn't really work properly, as it looks up Inventory items, Environment items and then Characters in order
// when it may well be that a character is subject1 and an item is subject2, but they will be reversed because of the parsing order
Input = Input.ToLower();
// Parse items in Player inventory
foreach (Item InventoryItem in CurrentPlayer.Inventory)
{
if (Input.Contains(InventoryItem.Name.ToLower()))
{
if (Subject1 == null)
{
Subject1 = InventoryItem;
}
else
{
Subject2 = InventoryItem;
}
}
}
// Parse items in environment
foreach (Item EnvironmentalItem in CurrentPlayer.CurrentArea.Items)
{
if (Input.Contains(EnvironmentalItem.Name.ToLower()))
{
if (Subject1 == null)
{
Subject1 = EnvironmentalItem;
}
else
{
Subject2 = EnvironmentalItem;
}
}
}
// Parse present characters
foreach (Character PresentCharacter in CurrentPlayer.CurrentArea.Characters)
{
if (Input.Contains(PresentCharacter.Name.ToLower()))
{
if (Subject1 == null)
{
Subject1 = PresentCharacter;
}
else
{
Subject2 = PresentCharacter;
}
}
}
}
Я уверен, что это действительно достаточно ясно.В основном, независимо от типа, мне нужно, чтобы subject1 был первым субъектом в строке ввода, а subject2 - вторым субъектом в строке ввода.
Не стесняйтесь задавать вопросы, возможно, это не совсем ясно.