繁体   English   中英

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

[英]Having trouble with objects in lists for SIMPLE adventure game

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

我想出了如何列出房间和物品的清单。 我有一个关于ItemRoom的课程。 每个类中都有一个用于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);
}

另一件事是移动房间。 最简单的方法是将另一个变量添加到ItemRoom称为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM