我有一个 1v1 游戏,我正在更新为 3 名玩家(最终是 4 名玩家),当用户与 2 名电脑玩家对战时,我遇到了玩家跟踪问题。
我有一个 Game NSObject,它处理游戏的所有主要代码,还控制计算机玩家的动作。过去,我对 Game.h 中的 2 个属性(用户和对手)很好,现在我有 3 个(用户、对手、对手2)。声明如下:
@property (retain) Player *user;
当我需要使用控制计算机播放器操作的方法时,问题就出现了。例如,当计算机玩家需要出价时,它必须知道出价和其他一些关于它的对手的信息。旧代码的片段是:
- (void)computerBiddingObjects {
// ... other stuff
if (_opponentPoints == 110 && _userPoints >= 90 && _userDidBid != YES) {
bid = bidTwenty;
} else if (_opponentPoints == 115 && _userPoints >= 90 && _userDidBid != YES) {
bid = bidTwentyFive;
}
// ... other stuff
}
为了获取对方玩家的信息,我的想法是在 Player.h 中添加 2 个新属性,以跟踪每个玩家的对手(对手 1 和对手 2)。我的问题是,如果我为每个 Player 设置属性,如下所示:
_opponent.opponent = _user;
_opponent.opponent2 = _opponent2;
我可以在这两种情况下引用它们和/或设置它们的单独属性吗?鉴于上述情况,这些陈述是否等效:
_opponent.opponent.didBid = YES;
_user.didBid = YES;
另外,我可以像这个新版本的出价代码片段一样访问 Player 对象属性吗?
- (void)computerBiddingObjectsForOpponent:(Player *)opponent {
// ... other stuff
if (opponent.points == 110 && self.currentBid < bidTwenty && ((opponent.opponent1.points >= 90 && opponent.opponent1.didBid != YES) || (opponent.opponent2.points >= 90 && opponent.opponent2.didBid != YES))) {
bid = bidTwenty;
} else if (opponent.points == 115 && self.currentBid < bidTwentyFive && ((opponent.opponent1.points >= 90 && opponent.opponent1.didBid != YES) || (opponent.opponent2.points >= 90 && opponent.opponent2.didBid != YES))) {
bid = bidTwentyFive;
}
// ... other stuff
opponent.bid = bid.
}
我是否偏离了基地/偏离轨道?有没有更简单的方法来做到这一点?