[英]Having trouble with objects in lists for SIMPLE adventure game
我必须为C#编程课做一个简单的冒险游戏。 我决定这样做,但我想我可能会领先一步。
我想出了如何列出房间和物品的清单。 我有一个关于Item
和Room
的课程。 每个类中都有一个用于String Name, String Desc, and int ItemNum
的变量String Name, String Desc, and int ItemNum
每个变量的获取和设置。 然后在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并想要Desc一样,我该怎么做? 我试过了,但是无法正常工作。
var match =
from t in rooms
where t.Name == "temp"
select t.Desc;
foreach (var element in match)
{
Console.WriteLine(element);
}
另一件事是移动房间。 最简单的方法是将另一个变量添加到Item
和Room
称为CurrentRoom = 0
,如果房间是当前房间,则将其更改为1。 因此,如果您想知道当前房间,则无论CurrentRoom = 1
?
任何帮助表示赞赏。 我只问过是否有更好的方法来做某件事,请记住我还是一个开始,并且在LINQ和继承方面还没有做太多事情
谢谢你的帮助! 安德鲁
您的LINQ语句用于根据名称查找项目说明,看起来很正确。 进行字符串比较/搜索时要记住的主要事情是区分大小写,如果他们键入“ prison”,是否应该返回名为“ Prison”的房间的描述?
要实现不区分大小写的查找,可以执行以下操作:
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所述,如果这是一个频繁的操作,请使用Dictionary的一种形式,我个人将使用KeyedCollection(TKey,TItem)
类的实现。
当前房间的概念将在很大程度上取决于实现的其余部分的结构。 如果您有Player
类,请向其中添加一个CurrentRoom
属性,例如
public class Player
{
public Room CurrentRoom { get; set; }
}
看起来像一个声音解决方案。 如果您要进行频繁查找,我建议您将列表更改为字典。
Dictionary<string, Room>
Dictionary<string, Item>
这将显着提高多次查找的性能。
祝好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.