(NO.00001)iOS游戏SpeedBoy Lite成形记(二十九):增加排行榜功能2

接下来回到Xcode中,首先在PopupLayer.m中添加justClose方法:

-(void)justClose{
    [self.gameScene removePopup];
}

然后在GameInterface.m中添加showRecords方法:

-(void)showRecords{
    [_gameScene showPopupNamed:@"Layers/RecordsLayer"];
}

接着,在GameScene.m中添加实例变量_recordsLabel.

好了,在GameScene.m中继续添加代码之前我们先考虑一下GameState里对应的记录如何存放以及需要提供什么功能的方法.

我们打算使用字典来存放记录,key为选手的名字(so不应该有重名选手),对应的值就是该选手的最好成绩.我们不想从外面洞悉该记录字典的内容,所以该字典应该是私有变量,我们在GameState.m里添加它:

    NSMutableDictionary *_playerRecords;

我们需要2个方法作为其读取器方法,在GameState.h接口文件中添加:

-(void)addPlayer:(NSString*)playerName;
-(CCTime)playerRecord:(NSString*)playerName;

以下是上面2个方法的实现:

-(void)addPlayer:(NSString *)playerName{
    //设置一个较大值以便被超越 ;)
    CCTime record = 100.f;
    //不重复添加player,在这个例子中没有什么必要.
    if (_playerRecords[playerName]) {
        return;
    }

    [_playerRecords setObject:@(record) forKey:playerName];

}

-(CCTime)playerRecord:(NSString *)playerName{
    NSNumber *record = (NSNumber*)_playerRecords[playerName];
    NSAssert(record, @"No such player!");
    return record.floatValue;
}

我们再添加一个更新选手记录的方法,同样要在头文件里导出:

-(void)updatePlayerRecord:(NSString *)playerName withRecord:(CCTime)record{
    if (!_playerRecords[playerName]) {
        return;
    }

    NSNumber *objRec = (NSNumber*)_playerRecords[playerName];
    if (record < objRec.floatValue) {
        [_playerRecords setObject:@(record) forKey:playerName];
    }
}

功能为如果选手不在字典中直接退出,否则只有当新记录小于旧记录时才更新字典中的值.

下一篇我们实现GameState中最重要的排序功能,see you ;)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大熊猫侯佩

赏点钱让我买杯可乐好吗 ;)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值