我必须为我的C#编程课做一个简单的冒险游戏。我决定这样做,但我想我可能会领先于自己。
我想出了如何列出房间和物品的清单。我有Item
和Room
的课程。每个类中都有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和继承
感谢您的帮助! 安德鲁
答案 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>
这将显着提高多次查找的性能。
祝你好运!