在SIMPLE冒险游戏的列表中遇到问题

时间:2013-12-08 23:43:43

标签: c# list class object

我必须为我的C#编程课做一个简单的冒险游戏。我决定这样做,但我想我可能会领先于自己。

我想出了如何列出房间和物品的清单。我有ItemRoom的课程。每个类中都有String Name, String Desc, and int ItemNum的变量以及每个类的gets和sets。然后在World课程中我有两个列表。 public static List<Room> rooms = new List<Room>();public static List<Item> items = new List<Item>();

要在我使用的列表中添加内容

rooms.Add(new Room {Name = "Prison", Desc = "This is text", ItemNum = 1}); items.Add(new Item {Name = "Key", Desc = "This is a key", ItemNum = 1 });

我的问题是我不知道如何“得到”某些东西。就像用户在Name中输入并想要描述描述我该怎么做? 我尝试了这个,但无法让它发挥作用。

var match =
    from t in rooms
    where t.Name == "temp"
    select t.Desc;

foreach (var element in match) 
{
   Console.WriteLine(element);
}

另一件事是移动房间。最简单的方法是将另一个变量添加到名为Item的{​​{1}}和Room,如果房间是最新的,则将其更改为1。所以,如果你想知道你现在的房间,那么有什么东西要找CurrentRoom = 0 ??

感谢任何帮助。只有我问它是否有更好的方法做某事记住我仍然是一个开始,并没有做过多LINQ和继承

感谢您的帮助! 安德鲁

2 个答案:

答案 0 :(得分:1)

用于查找基于名称的项目描述的LINQ语句看起来非常正确。在进行字符串比较/搜索时要记住的主要事项是区分大小写,如果它们键入“监狱”,它应该返回名为“监狱”的房间的描述吗?

要实现不区分大小写的查找,您可以执行以下操作:

var descriptions = from r in rooms
                   where r.Name.Equals("prison", StringComparison.CurrentCultureIgnoreCase)
                   select r.Desc;
foreach(var description in descriptions)
{
    Console.WriteLine(description);
}

正如gpmurthy所说,如果这是一个频繁的操作,使用一种形式的词典,我个人会使用KeyedCollection(TKey,TItem)类的实现。

当前房间的概念在很大程度上取决于其余实施的结构。如果您有Player类,请为其添加CurrentRoom属性,例如

public class Player
{
    public Room CurrentRoom { get; set; }
}

答案 1 :(得分:0)

看起来像一个合理的解决方案。如果您要进行频繁的查找,我建议您将列表更改为字典....

Dictionary<string, Room>
Dictionary<string, Item>

这将显着提高多次查找的性能。

祝你好运!