如何将一个单位表示为pharo中的一个点?

时间:2014-06-06 22:36:58

标签: oop dictionary smalltalk pharo

我正在尝试在Pharo中编写游戏。我刚刚开始在Pharo中编写代码,所以我正试着习惯它。
游戏应包括游戏地图,每个角色(或事物)由符号表示。
我做的第一件事就是创建一个包含GameMap对象的GameMapClass。
然后我画了地图,这很容易。
接下来要做的就是放置单位。我有一个Unit类(以及一些继承Unit类的其他类)。我的GameMapClass中也有一个unitAt方法,到目前为止:

unitAt: aPoint |thePoint| ^thePoint := map at: aPoint ifAbsent: [self error: 'The space is empty'].

我不知道如何继续这种方法。如果该单元不为空,该点也应返回该单元。我如何多次返回?每个点都是我的程序中的一个点。我还需要使用字典来表示"事物"有符号,我不知道在哪里放这本字典以及如何访问它。

1 个答案:

答案 0 :(得分:1)

这是一种方法:

unitAt: aPoint
    | theUnit |
    theUnit := map 
        at: aPoint
        ifAbsent: [ self error: 'The space is empty' ].
    ^ { theUnit. aPoint }

请考虑@ Uko的评论:你以这种方式传递了这一点:

 unitAndPoint := myObject unitAt: myPoint.

如果仔细观察,您会发现变量unitAndPoint包含您作为参数传递的相同点对象myPoint。这意味着您已经知道了这一点,并且没有理由让您从unitAt:返回。以下是我认为解决方案应该(可能)的样子:

unitAt: aPoint
    ^ map 
        at: aPoint
        ifAbsent: [ self error: 'The space is empty' ]

这样称呼:

myPoint := 1@2.
unitOfPoint := myObject unitAt: myPoint.