方法是否可能(或可取)识别其调用者?
Is it possible (or advisable) for a method to recognize its caller?
我正在开发一款简单的游戏,玩家需要掷骰子,然后 "the computer" 需要掷骰子。
我想要一个 roll
方法,它对每种类型的玩家的表现略有不同。
它目前设置了一个名为 isPlayer
的 BOOL
参数(相对于 isComputer)。玩家传递一个 TRUE 值,计算机传递一个 FALSE。方法中有一些 if
语句会相应地起作用。
这对我来说似乎很笨拙。有没有更好的方法?
我正在考虑创建一个 PlayerType
枚举,每个玩家都有一个类型,但他们仍然需要将类型传递给方法。那或者他们可以将游戏变量更改为该类型,并且该方法可以识别该类型。
任何想法都会有所帮助。谢谢。
不,这看起来不错,是一种常用且简单的模式。
A BOOL
一直都很好,只有两种类型的玩家(或行为),然后如果玩家数量超过 2,则转向 enum
。
或者存在多态性,其中 roll
方法根据实现它的 subclass 表现不同。这将不需要传递任何参数,因为行为 锁定在 到 class.
传递枚举可能是一个不错的选择。
另一个是创建一个名为 "Protagonist" 的超类(例如)实现一个 roll()
方法和另外两个 类 "Human" 和 "Player"继承自 "Protagonist"。这样,您就可以为每种播放器指定行为。
//Protagonist.h (your superclass)
@interface Protagonist : NSObject
- (void)roll;
@end
//Player.h
#import "Protagonist.h"
@interface Player : Protagonist
@end
//Player.m
@implementation Player
- (void)roll {
NSLog(@"I'm a real player");
}
@end
//Computer.h
#import "Protagonist.h"
@interface Computer : Protagonist
@end
//Computer.m
@implementation Computer
- (void)roll {
NSLog(@"I'm a computer");
}
@end
//ExternalController.m
Protagonist *computer = [Computer new];
[computer roll]; //"I'm a computer"
Protagonist *computer = [Player new];
[computer roll]; //"I'm a real player"
我正在开发一款简单的游戏,玩家需要掷骰子,然后 "the computer" 需要掷骰子。
我想要一个 roll
方法,它对每种类型的玩家的表现略有不同。
它目前设置了一个名为 isPlayer
的 BOOL
参数(相对于 isComputer)。玩家传递一个 TRUE 值,计算机传递一个 FALSE。方法中有一些 if
语句会相应地起作用。
这对我来说似乎很笨拙。有没有更好的方法?
我正在考虑创建一个 PlayerType
枚举,每个玩家都有一个类型,但他们仍然需要将类型传递给方法。那或者他们可以将游戏变量更改为该类型,并且该方法可以识别该类型。
任何想法都会有所帮助。谢谢。
不,这看起来不错,是一种常用且简单的模式。
A BOOL
一直都很好,只有两种类型的玩家(或行为),然后如果玩家数量超过 2,则转向 enum
。
或者存在多态性,其中 roll
方法根据实现它的 subclass 表现不同。这将不需要传递任何参数,因为行为 锁定在 到 class.
传递枚举可能是一个不错的选择。
另一个是创建一个名为 "Protagonist" 的超类(例如)实现一个 roll()
方法和另外两个 类 "Human" 和 "Player"继承自 "Protagonist"。这样,您就可以为每种播放器指定行为。
//Protagonist.h (your superclass)
@interface Protagonist : NSObject
- (void)roll;
@end
//Player.h
#import "Protagonist.h"
@interface Player : Protagonist
@end
//Player.m
@implementation Player
- (void)roll {
NSLog(@"I'm a real player");
}
@end
//Computer.h
#import "Protagonist.h"
@interface Computer : Protagonist
@end
//Computer.m
@implementation Computer
- (void)roll {
NSLog(@"I'm a computer");
}
@end
//ExternalController.m
Protagonist *computer = [Computer new];
[computer roll]; //"I'm a computer"
Protagonist *computer = [Player new];
[computer roll]; //"I'm a real player"