V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
GuuJiang
V2EX  ›  分享发现

天哪,看我竟然在 Java 语言里撸出了什么

  •  
  •   GuuJiang · 2018-05-31 22:00:48 +08:00 · 3271 次点击
    这是一个创建于 2401 天前的主题,其中的信息可能已经有所发展或是发生改变。

    直接先上一段示例代码

    public static Iterable<Integer> range(int start, int end) {
        for (int i = start; i < end; ++i) {
            yield(i);
        }
        return null;
    }
    

    相信懂的人已经看出来了,没错,我在 Java 语言里实现了协程(coroutine),这是个早就想写但又搁置了无数次的项目,前段时间在做微信小游戏的过程中再次享受了协程带来的便利,于是终于下定决心把这个项目写了出来,项目地址https://github.com/GuuJiang/Jacob,更多开发过程中的背景和思路可以见我在知乎上写的文章https://zhuanlan.zhihu.com/p/36614393

    有类似想法的人我并不是第一个,不过在开发这个项目的过程中除了一开始查了下 c#内部对 yield 的实现方式相关的资料以外,剩下的部分全是自己撸出来的,没有参考任何现有项目,核心就是基于 bytecode 生成,开发过程中也趟了不少 asm 库的坑

    自己感觉这个库最大的优点就是几乎无侵入性,用它来实现 coroutine 返回的是标准的 Iterable 对象,仅仅需要调用下 yield 这个起标记作用的空方法,再加上两个注解已方便处理程序识别,而在字节码处理前后调用方是不需要做任何改动,具体的示例可以参见项目中带的 samples 工程

    缺点嘛就是目前还处于玩具级别,只实现了最核心的部分,未来会考虑假如 yieldFrom, yieldBreak 等一系列特性
    V 友们如果感兴趣的话可以去使用下给点评价,觉得可以的话来一波 Star

    最后借地再次为我独立开发的小游戏打一波广告,毕竟这个小游戏也算是这个项目诞生的一个契机吧,游戏最初版本由于规则相对复杂导致流失了很多用户,针对这个问题新的版本加入了道具系统,算是变相降低了游戏难度,大家可以去体验一下,微信搜索“数字消除”或扫描下方二维码进入

    5 条回复    2018-06-05 12:26:00 +08:00
    oska117
        1
    oska117  
       2018-06-03 11:59:58 +08:00 via Android
    晚上回去试试
    cwcauc
        2
    cwcauc  
       2018-06-03 20:42:28 +08:00 via iPhone
    游戏一通瞎点比认真玩分还高。。尴尬
    GuuJiang
        3
    GuuJiang  
    OP
       2018-06-03 23:25:12 +08:00 via iPhone
    @cwcauc 感谢支持,我也发现这个问题了,主要在于 combo 的奖励太高,目前 combo 的分数是翻倍增长,而无脑点相比起刻意地计算反而更容易触发意想不到的长 combo,另外有了道具作后盾导致不用精心计算也不那么容易死,后面我会调整 combo 的计分规则并适当削弱道具,以提高可玩性
    MrFireAwayH
        4
    MrFireAwayH  
       2018-06-05 11:35:22 +08:00
    支持大佬~ 看源码中~

    一点小建议

    // the return value does not matter, offen use null

    often
    GuuJiang
        5
    GuuJiang  
    OP
       2018-06-05 12:26:00 +08:00 via iPhone
    @MrFireAwayH 感谢支持,其实不光是拼写,这句话本身语法就有点问题,晚上回去改一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1007 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:20 · PVG 06:20 · LAX 14:20 · JFK 17:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.