在这个例子中,我们的显示代码只需要选手的名字以及对应的成绩.根据选手名字取对应的成绩可以用前面实现的playerRecord:方法,我们只需要将按照成绩排序后的选手名字返回就可以了.

我只需要再实现一个函数,就是返回已经排好序选手的姓名数组,在GameState.h接口文件中添加allSortedPlayers方法:

-(NSArray*)allSortedPlayers;

接下来在GameState.m中实现它:

-(NSArray*)allSortedPlayers{
    NSArray *keys = _playerRecords.allKeys;
    NSArray *sortArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1,id obj2){
        NSNumber *val1 = _playerRecords[obj1];
        NSNumber *val2 = _playerRecords[obj2];
        return [val1 compare:val2];
    }];
    return sortArray;
}

方法中我们首先取得所有选手名字,然后建立一个排序block用来回调每次排序:直接比较2个选手的成绩.

接下来打开PopupLayer.m,在didLoadFromCCB最后添加如下代码:

if (_recordsLabel) {
        [self initRecordsLabel];
    }

新建initRecordsLabel方法如下:

static NSString *recFormat = @"%d\t\t%@\t\t\t%.5f\n";

-(void)initRecordsLabel{
    GameState *gameState = [GameState sharedInstance];
    NSMutableString *recordsString = [NSMutableString string];
    NSArray *allPlayers = [gameState allSortedPlayers];
    NSInteger i = 0;
    for (NSString *playerName in allPlayers) {
        CCTime record = [gameState playerRecord:playerName];
        //CCLOG(@"%d : %@ %.5f",++i,playerName,record);
        [recordsString appendFormat:recFormat,++i,playerName,record];
    }

    _recordsLabel.string = recordsString;
}

比较简单,就是按照排序后选手来依次取对应的成绩,然后按照特定格式生成字符串,最后将字符串附加到_recordsLabel节点上.

打开GameScene.m我们需要在选手到达终点时更新成绩:

-(void)matchRun{
//...
block {
                [gameState updatePlayerRecord:player.playerName withRecord:player.elapsedTime];

}
//...

编译运行App,界面显示如下:

到这里本猫第一个原创App : SpeedBoy Lite基本告一段落了,其实还有完善的地方,比如以下几个方面:

1.游戏Main界面还可以美化,加上一些动画效果

2.游戏完全没有背景音乐和音效

3.游戏没有设置界面

4.游戏记录无法冷保存,退出App下次开始记录会丢失.

但是在这里我们暂且打住,回味片刻,准备开始下一个App吧 ;)

(NO.00001)iOS游戏SpeedBoy Lite成形记(三十):增加排行榜功能3的更多相关文章

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

    游戏大体上基本也就完成了,还差一个排行榜.否则如何激励各位选手创造新纪录呢? 排行榜功能也没什么难的,不过需要一点点排序的算法上的考虑. 这里我们把排行榜记录数据和排序都放在GameState类中,在 ...

  2. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十四)

    我们回到Xcode,打开GameScene.m,首先要添加实例变量: CCNode *_trackLine; 为了根据选中的赛道更新_trackLine的位置,我们添加一个显示方法: -(void)s ...

  3. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十二)

    自己的游戏自己更需要多玩,这样才能首先发现不足的地方.所以本猫到现在已经忍一个地方很久了,就是弹出moneyLayer后每次都要输入数字才能关闭,这多少让人不爽.于是本篇我们就修正这个小小的不便. 首 ...

  4. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十)

    下面修改最为关键的matchRun方法里的代码: CCActionCallBlock *blk = [CCActionCallBlock actionWithBlock:^{ _finishedCou ...

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

    接下来回到Xcode中,首先在PopupLayer.m中添加justClose方法: -(void)justClose{ [self.gameScene removePopup]; } 然后在Game ...

  6. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十六)

    到目前为止,选手跑到终点时仿佛没什么激动人心的事情发生呢?貌似需要添加一些胜利的特效啊! 前面说好的不添加特效,只完成游戏功能的诺言呢? T T 我们主要想实现这样一个特效效果: 1.胜利的玩家突出显 ...

  7. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十五)

    每次压赌要打开弹出菜单还是让人略觉不爽,下面我们再添加一个随机押注的按钮:自动随机选择选手和下赌金额. 打开spriteBuilder,修改GameInterface.ccb的界面,在Run按钮旁边添 ...

  8. (NO.00001)iOS游戏SpeedBoy Lite成形记(三)

    在Xcode中建立新类Player,继承自CCSprite.因为我们之后需要方便的更换玩家的大头贴,所以需要能够以不同的大头贴参数初始化Player对象. 不过别急,想想我们还需要在Player对象初 ...

  9. (NO.00001)iOS游戏SpeedBoy Lite成形记(一)

    这是本猫第一个原创iOS游戏,留此为证!看编号貌似要写9万多个,千锤百炼还是太少吧!? ;) 这是一个赛跑游戏,几位选手从起点跑到终点看谁用的时间最少.现在需要实现的功能是: 1.8位选手从起点移动至 ...

随机推荐

  1. java基础复习+大数运算

    String: Array: 下面分别是大数加法,加法,乘法,取模

  2. Python能做些什么?

    前言 网上搜集到的一些python能做什么的资料,利用python能做很多事情,我们可以在多门课程中都使用Python作为我们的教学语言.比如,计算机网络.数据结构.人工智能.图像处理.软件分析与测试 ...

  3. REFRESH删除POSTGRESQL

    sudo apt-get install python-psycopg2sudo apt-get install postgresql sudo su - postgres createuser -- ...

  4. [uwsgi]使用建议(类似最佳实践)

    看了下uwsgi官方的一个使用建议,之前都是直接参考了下django文档中那个比较简单的配置或者就写了个能运行的配置,么有注意很多细节问题,这里学习下,把需要的配置添加到项目配置中. 1 http a ...

  5. activty栈管理

    题外话:我们有时在开发中,通常会有如下的需求:屏幕1-->屏幕2-->屏幕3-->屏幕4...,现在需要直接从屏幕4-->屏幕1,很多人会想到对activity进行管理得到对应 ...

  6. 一个 Linux 上分析死锁的简单方法

    简介 死锁 (deallocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这 ...

  7. Spark调度模式-FIFO和FAIR

    Spark中的调度模式主要有两种:FIFO和FAIR.默认情况下Spark的调度模式是FIFO(先进先出),谁先提交谁先执行,后面的任务需要等待前面的任务执行.而FAIR(公平调度)模式支持在调度池中 ...

  8. IIS部署WCF报 无法读取配置节“protocolMapping”,因为它缺少节声明

    今天写了个wcf的测试程序放在客户的服务器上供他们测试调用,部署到IIS后浏览报错了,根据错误的提示看出似乎是识别不了这个节点名,偶然的去看了下进程池中该站点的进程池名字的高级设置,看到使用的.net ...

  9. 【一天一道LeetCode】#205. Isomorphic Strings

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given t ...

  10. 关于MySQL-python-1.2.3.tar.gz安装失败的解决方案

    关于MySQL-python-1.2.3.tar.gz安装失败的解决方案 RHEL6.4升级到python2.7.9,然后安装 MySQL-python-1.2.3.tar.gz, 报错.解决错误之后 ...