我有一个部分的枚举列表:
public enum Parts
{
Wall = (int)'#',
Empty = (int)'-',
Player = (int)'@',
Goal = (int)'.',
Block = (int)'$',
BlockOnGoal = (int)'*',
PlayerOnGoal = (int)'+'
};
我有一个字符串
string Level = "####\n# #\n#@ #\n####";
所以字符串中的所有项都在枚举列表中 如果我然后调用函数
public Parts WhatsAt(int row, int column)
{
return Parts.Wall;// Teachers comment but idk what he means "WRONG - but now no exception! should look up Level or some better data structure"
}
因此,当调用该函数时,它会将字符串拆分为\ n,然后使用输入到函数中,就像地图上的坐标一样,以确定其中的特定字符。
左上角是行:0,列:0
右下角是行:4,列:4
####
# #
#@ #
####
如何使函数返回指定给定坐标的部件名称
例如
Parts actual = WhatsAt(0, 2);
实际上将成为Wall,就像枚举列表中的#表示一样 感谢您提前提供任何帮助
答案 0 :(得分:1)
如果我找对你,你可以试试这个:
public static Parts WhatsAt(int row, int column)
{
var rows = Level.Split('\n');
return (Parts)rows[row][column];
}
答案 1 :(得分:0)
你有没有试过任何?如果你不能试图编写一些代码,那么与老师讨论会更好,因为这意味着你错过了他试图传达的一些关键概念。
与此同时:
你的问题确实有两个部分(至少):
char
和row
值的column
值。char
值转换为Parts
枚举值。 (旁白:除非enum
具有enum
属性,否则将[Flags]
类型名称设为单数而不是复数是一种.NET编码约定,并且此约定对恕我直言是有用的一,Part
对enum
类型而言比Parts
更好。关于第一点,您似乎已经意识到,您可以使用string.Split()
方法从原始值中获取string
值数组:
string[] rows = Level.Split('\n');
您可以使用传入的row
变量索引此数组,以获取该行的正确string
值。在该string
值中,您可以使用column
变量为该位置索引所需的char
值:
char location = rows[row][column];
关于第二点,转换回Parts
类型是一个简单的演员:
Parts part = (Parts)location;
这不会更改正在使用的实际值,而是会将location
值重新解释为Parts
值,并存储在part
变量中。
有了这个,你应该拥有编写WhatsAt()
方法所需的一切。如果您愿意,以上所有内容甚至可以表示为单个表达式:
(Parts)Level.Split('\n')[row][column]