V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
andyzhshg
V2EX  ›  分享创造

[送码] 数独游戏 -- Hi Sudoku 上线,送一些终身会员和订阅兑换码

  •  
  •   andyzhshg · 2023-11-16 10:53:48 +08:00 · 19845 次点击
    这是一个创建于 402 天前的主题,其中的信息可能已经有所发展或是发生改变。

    TL;DR

    大家好,我做了一款数独游戏——Hi Sudoku,自认为还不错,现在已经上线,这里发一些码给大家。希望大家能够尝试和喜欢,如果你觉得不错,能够到商店给打个星,或者写几句评价的话就更加感谢了,也欢迎推荐给身边的朋友。

    兑换码在文章末尾,需要注意的是 iOS 平台因为在国区没有版号和备案,所以是国区独不占,需要其他区的账号才能使用。欢迎大家积极回复。


    以下是啰哩啰嗦的正文:

    大家好,玩了这么多年的数独游戏,我终于拖拖拉拉的花了小一年做出了一个自己的数独游戏—— Hi Sudoku 。

    我是一重度的数独玩家,每天不玩上几盘就手痒那种。玩了这么多的数独游戏,能让人满意的凤毛麟角,不是题库质量太差,就是操作太反人类,或是广告满天飞,各种打扰。这也是促使我又双叒叕开发一款数独游戏的缘由。

    终于,炖了快一年,可以把自己做的这盘菜来给大家尝尝了了。游戏的设计目标只有两个:精良的题库,舒适的操作。

    1. 题库

    首先,合格的数独题目要满足有唯一解,不幸的是,现在市面上很多数独游戏连这点都做不到,玩到这种多解的题目,让你摔手机的冲动都有。

    其次,难度分布要合理。市面上很多数独 APP 的出题思路简单粗暴:给定数字越少,题目就越难。乍一看很合理,实际是经不起推敲的。一些难题,往往不是在开始的时候就卡住你,而是填到后边快结束,只剩下 20 左右格子的时候难为你,那么这个只剩 20 来个格子的数独当成简单题目显然是不合理的,如果你不会一些高级技巧,保证你一筹莫展,只能靠猜。

    Hi Sudoku 的出题原则很简单,让出题的程序像人类一样思考,我将大量的时间用在了模拟人类解题逻辑,编写了一套算法,从简单技巧到复杂技巧,并根据用到技巧的难度给题目打分,以此来区分题目的难度。

    Hi Sudoku 并不标榜纯手工打造题库,因为手工打造太过费时费力,效果也不一定最好,我试图用程序的方式来提高题目的质量。

    我后续有一个小计划,就是将 Hi Sudoku 的题库开源,其中包含 简单/中等/困难/专家/魔鬼 各 1 万道题目,加上每日挑战 初/中/高 三个级别各 5 千 道题目,共 6 万 5 千道题目。

    2. 操作

    对于数独 APP ,什么样的操作是便捷的,见仁见智。我按照玩了这么多数独游戏个人经验,优化了 Hi Sudoku 的操作。

    • 高亮

    数字高亮是现代数独游戏的必备功能,目前主流的操作方式基本上是:点击盘面上的数字,高亮盘面上相应的数字,以及这个数字的标记。这已经很不错了,但是还能够改进,如果盘面上正好缺了某个数字,但我想高亮它(盘面没有这个数字,所以只能是标记)是做不到的。 这是 Hi Sudoku 的做法:可以点击盘面数字高亮,同时,也可以长按数字按钮来高亮数字和标记。甚至可以在数字键盘上按住并滑动,快速的切换高亮的数字,这在某些解题技巧中非常的实用。

    • 标记模式切换

    传统的方案是提供一个切换按钮,在输入数字和标记之间切换。 Hi Sudoku 保留了这个传统方案,同时,增加了一种新的模式——快速上划,通过在数字按钮快速上划,来临时的切换输入的模式。比如游戏前期往往主要是填入数字,这是你可以一直处于填数模式,在偶尔需要标记的时候,在想要的数字按钮上划就完成了标记;相反,游戏后期,一般都是在排出标记,这是你就可以切换到标记模式,当确认了某个格子的数字时,在对应的数字按钮上划一下,就完成数字的输入,非常方便。

    • 自动标记

    老派的数独玩家可能认为自动标记是异端,但是我认为玩数独是为了乐趣而非自虐,并且 Hi Sudoku 给了玩家是否使用自动标记的自由。 自动标记有两种:一种是一次只自动标记一个格子;另一种是一键自动全部标记格子。 简单题目下,往往是不需要标记的;但是对于一些难题来说,自动标记减少了前期标记的枯燥,把主要的时间和精力用在解题本身的乐趣上。 Tip:自动标记有一个快捷触发机制,长按标记模式切换按钮,可以立即标记当前选中的空格。

    • 智能提示

    这个功能是前边题库算法的副产品,因为已经有了一套模拟人类的解题算法,所以 Hi Sudoku 可以模仿人类的逻辑来做题,给出当前盘面下最可能采取的步骤,并给出采取这个步骤的原因,而不是简单粗暴的告诉你某个格子该填什么数字。 Tip:智能提示也有一个快捷触发机制,长按智能工具按钮“神奇”就可以快速的打开提示界面,获取一条逻辑提示。


    发码区

    兑换完成后如果 APP 中没有自动解锁高级会员,可以尝试重启 APP ,或者进入 选项-高级会员,在会员购买页面点一下 “恢复购买”即可。

    APP Store

    注意:国区没有上架,如果你是国区账号应该是兑换不了的。

    ## 1 年高级会员兑换码
    
    JRLKJP3JNENY
    TJPLWRRKMM3N
    WN63R74JNELJ
    N9MR4EAKM7HK
    JYN4KXJPTA33
    L33LN9NJET76
    TP7N4KAXKL3W
    RMX77M9ANHPP
    EF74PPF9MFTA
    EPWPRTR4R7RA
    
    
    ## 终身会员兑换码
    
    P3PFPP4XNXRN
    KP6JXP6A96KW
    6P43TLP746WA
    9FMPFPTL4MPL
    PY6JF49A47KK
    7RLNA9A6R7M7
    MMJTFR677JHM
    7F6PPRP74JAA
    WYL4X7HFPWNW
    WYEEPPTATMAA
    

    Google Play

    注意:Google Play 的订阅兑换码实际是试用兑换码,最长为 90 天,到期会自动续订,如果你不想到期续订,可以在兑换后在 Play 商店的设置中取消订阅,取消后这 90 天的订阅还是有效的。

    ## 90 天高级会员兑换码
    
    ULG4ZCCGX9YMU5AXBRME007
    GLLFF5467F3NWFV49JTJ41W
    PJHNJRRTGYRL3YZL513FPQ3
    PR16QMUUCL72BKLH9JK4F6A
    CEASSCYX7EKUYTSJU0GKP77
    H8L8526QHBYXE1V9WW4NEZ9
    UCCEYFQPDCN2CXCVJ1ALM6Q
    42114FHP0ADRRMUU6LRGKY8
    M57LMW0NUT2JFT5H44678PE
    ZDBWRBY7XA087FLTXPEH3NZ
    6CQ1F9RJTCUH5KCAVDGS0KE
    2QDBBT868C5PNM0WFYR03AZ
    C8UAS381WJKTVG3KCH3VWVS
    ZDRUW7TCMKJNC26BNMRVEJF
    27QZHHVFRQU8A4RQASEVRDF
    03KK5WL7G7C4Q606FA7YYL2
    HCW10897MG7XAM16105V7UY
    ZCPL68QSF11XKQTEY092GZN
    S6E1J5TM22SB7KPCY0CE4HF
    ZXEZGRQFXRSAQ2HL32J25XL
    
    ## 终身会员兑换码
    
    C70ZDHXUNGM7SMBKU1C2N32
    M37AP9Y7A7XRBXZVFSQDCEB
    TFG9MY036PPR0M34TPQKCN4
    ZSM3S964XRKDKU3AXUWB3XB
    TPRQ37FS7LFJ0ZTXZTTXW87
    QNBYA5ZBLPYKSLZT28YVKQY
    LKQP7PGAH8CLQAED3XQJ46C
    KEBYSG5NEQ8RCQ2DPFMU9T7
    4GRYX23SPR728F5LM4D7F9G
    RNH5Y66GTHNU320NA8YTHY8
    

    下载 Hi Sudoku

    APP Store

    请到**除国区之外的 APP Store **搜索 "Hi Sudoku" 即可下载,或直接点击下面的链接

    https://apps.apple.com/app/instagram/id6450198518

    App Store Button

    Google Play

    搜索 "Hi Sudoku" 即可下载,或直接点击下面的链接

    https://play.google.com/store/apps/details?id=com.hisudoku.classic

    Google Play Button

    官网

    你也可以通过 Hi Sudoku 的官网 https://hisudoku.com/ 找到不同平台的下载方式。


    因为开发者可以生成的兑换码的数量是有限制的,所以暂时先发这么多,如果大家热情比较高,我视情况再发一些。

    其实如果你喜欢数独,即使没有码,也希望你能下载玩一下,游戏确实是有广告的,但是我已经尽最大努力做到不让广告打扰到玩家了。

    227 条回复    2024-10-11 10:00:50 +08:00
    1  2  3  
    vialon17
        201
    vialon17  
       2023-11-18 18:28:37 +08:00 via Android
    试了一把中级难度,评价:
    对比其他 play 的数独,难度偏高点。
    我做了 30min ,其他版本数独大概 15-20min ,
    (也许自己太菜了吧,哈哈)
    建议添加自动填充,最后只剩一个数字的时候自动补全;
    建议当数字全部填充完毕后使该数 选项 消失功能。比如 1 全部填入后将 1 抹去或者 转变为不可选择(灰色,和可选数字颜色相同比较不太好辨认)。
    祝 good luck ;)
    andyzhshg
        202
    andyzhshg  
    OP
       2023-11-18 18:51:22 +08:00
    @Pig930 #194 兑换码已发送至邮箱。已经到了 200 楼,抽奖活动告一段落啦,感谢大家热情参与。

    继续欢迎大家试用和交流使用想法哈,我还是会按前边 #168 楼所说,给有价值的反馈赠送兑换码。

    大家如果觉得游戏不错的话,非常希望您能帮忙去对应的商店打个星,评个分,让 App 有机会让更多的人看到,谢谢大家。
    andyzhshg
        203
    andyzhshg  
    OP
       2023-11-18 19:14:25 +08:00   ❤️ 1
    @nuhou #195 确实可以加上这个功能。
    @sixg0d #199 多谢返场评价,Hi Sudoku 关卡难度的划分原则大致上是 hard 之前的可以在不做 note 的前提下完成,Hard 不会用到高级技巧,Expert 会用到少量高级技巧,Evil 高级技巧会多一些。您提到的那个巨难数独,貌似只能用暴力穷举才能解了,个人认为题目其实给人做的话,这种算不上好的题目。
    @vialon17 自动补全这个可以考虑下,但这种功能肯定会有人不喜欢,应该会有个开关。全部填完的按钮的显示方式我确实也想改一下,但应该不会是消失,具体还没想好,您说的另一种确实也是一个可选的方式。

    感谢各位反馈,nuhou 和 vialon17 二位请查收下邮箱,给二位发了兑换码。sixg0d 前边已经中过奖就没有再发了哈。
    ZeroW
        204
    ZeroW  
       2023-11-19 16:11:44 +08:00 via iPhone
    玩了两天,提个小建议:有时候手抖会误操作但是这会导致错误次数累加,有没有啥开关可以避免这种情况,比如我不想要错误提示
    oIMOo
        205
    oIMOo  
       2023-11-19 19:18:23 +08:00
    @andyzhshg #167 小飞机已经下架很久了(暴露年龄),搜到一篇文章里有一些截图 https://zhuanlan.zhihu.com/p/21481730

    然后关于操作方式的一点补充,我发现长按地步数字后,实际棋盘中的相同数字可以高亮,算是我希望的步骤,只不过是短按和长按的区别。不过这之后,我点击空白格子,这个时候能不能自动填充我选好的数字呢? 比如判定一下逻辑,是其它操作后点击空白格 —— 保持目前逻辑;还是长按了底部数字后按空白格 —— 填充数字。当然这个需要严谨的逻辑思考,因为如果玩家再高亮之后,需要连续填几个空白格子(相同数字)的话,逻辑需要再缜密一下。

    加油!~
    sixg0d
        206
    sixg0d  
       2023-11-19 20:38:23 +08:00
    每一行、列或块的最后一个空格的确可以考虑自动补全,这一步也和填 note 一样枯燥~
    lvlcj
        207
    lvlcj  
       2023-11-19 23:26:54 +08:00
    一直在玩一个韩国的古早 App 试用楼主这个非常不错 题库很不错~

    也求一个兑换码 谢谢楼主 // bHZsY2o0NzExNzc4QGdtYWlsLmNvbQ==
    lvlcj
        208
    lvlcj  
       2023-11-19 23:31:25 +08:00
    也求一个兑换码 谢谢楼主 // bHZsY2o0NzExNzc4QGdtYWlsLmNvbQ==([email protected])

    抱歉重复.. 是 AppStore
    andyzhshg
        209
    andyzhshg  
    OP
       2023-11-20 10:06:25 +08:00
    @ZeroW #204 这个我计划加一个填正确的数字锁定功能,正确的数字就不能修改了,应该可以减少误触。
    @oIMOo #205 在美区 App Store 找到了这个小飞机,感谢再次返场提出建议,你说的这个功能应该更类似于“数字优先输入”,锁定数字后,点击空的格子来连续输入相同的数字。跟现在的输入模式有些冲突,可能得好好想一下怎么放两种模式。
    @sixg0d #206 确实,不过还是得权衡下怎么做才能不让用户觉得是自己在做题,而不是 App 在主导

    @ZeroW 感谢首次提出建议,跟您发了一个 1 年高级会员的兑换码,后期会员到期可以回复我的发码邮件来获得新的码哈。
    oIMOo
        210
    oIMOo  
       2023-11-20 15:56:55 +08:00
    @andyzhshg #209 再跟进一条,试了一下 magic 功能 —— 将所有可能性填入空白格子。
    我不知道以下功能是不是有意为之:
    假如横向第一组( 3 * 9 个格子)中,我们需要补全 “2”,
    - 最左边的一组( 3*3 )已经有 2 ,在第一行
    - 然后中间一组的 2 待填,可能的格子为第二行的两个格子(横向)
    - 最右边的一组中,2 可能存在与第二行和第三行。

    按照初始逻辑,这样没有问题。但是多加一步判断后,因为中间一组中,2 只能在第二行,所以会将最右边一组中 2 的可能性限制到第三行。

    我的问题就在于,你是故意没有把后面这层判断加进去么。

    补充一点,小飞机之前有免费版和付费版,看起来是后者下架了。
    andyzhshg
        211
    andyzhshg  
    OP
       2023-11-20 16:51:24 +08:00
    @oIMOo 没图的情况下把数独描述清楚太难了😂,我一边看一边在纸上画才理解了你的意思,真是辛苦打这么多字了。
    确实是故意这么做的,如果把这层判断加进去,就等于是帮玩家多做了一步推理了。我定义的自动标记,就是排出这个格子所有相交的行列宫已有数字后剩下的数字。
    shenpVip
        212
    shenpVip  
       2023-11-21 10:21:48 +08:00
    @shenpVip #149 下载玩了两局,个人感觉首页设计有点复杂了,可以简单点,就初级、中级、高级三个入口,其他模式放到一个聚合入口,点击开始游戏,具体的统计信息放到单独的功能,例如成就、挑战榜单。另外每次进入的时候,白屏时间有点长,可以加个动画或者图案之类,白屏看着有点不舒服
    lvzw
        213
    lvzw  
       2023-11-21 17:57:19 +08:00
    bHp3a2lraUBnbWFpbC5jb20=
    求个 ios 终生,谢谢
    vankhu
        214
    vankhu  
       2023-11-22 09:51:07 +08:00
    dmFua2h1NDdAZ21haWwuY29t iOS 谢谢分享
    zjl03505
        215
    zjl03505  
       2023-11-22 16:13:36 +08:00
    已手动标记的情况下使用自动标记全部,无法正常标记 全部格子
    andyzhshg
        216
    andyzhshg  
    OP
       2023-11-22 18:20:28 +08:00
    v1.0.3 已经上线,增加了游戏内唤起设置页面的功能,现在像错误提示,选中格行列宫高亮等都可以通过设置项关闭了。

    @shenpVip #212 感谢建议,确实是有计划加一个专门的统计页面,包含现在首页的统计信息还有游戏的历史之类的;摆平时间长主要应该是首次加载,因为要解压拷贝关卡数据和做一些初始化,还有 android 上的 flutter 首次启动应该是需要作 shader 编译,确实是会慢一些,我已经按你的建议加了一个启动的动画,下个版本就会有了。

    @zjl03505 #215 目前如果格子做过手动标记再选全部自动标记的话,会只根据已有数字计算没标记过的格子;对于已经手动标记过的格子,会检查这个格子的答案是否在已经标记的数字里,如果不在,会把这个答案的数字补在标记里。这是因为玩家可能已经根据逻辑分析排除了某些标记,自动标记不应该把已经正确排除的标记再标回来。如果你遇到的是这个情况之外的问题,就应该是 bug 了,方便的话麻烦提供下发生的场景,我分析排查一下。

    @shenpVip 给您邮箱发送了 play 的兑换码,请查收;@zjl03505 我看提了好几次建议,但没留过邮箱,如果需要可以下边留个邮箱,我给您发兑换码。
    zjl03505
        217
    zjl03505  
       2023-11-27 21:18:33 +08:00
    @andyzhshg #216 经过测试,实际为游戏初期「只标记了格子的部分数字」时,剩余的数字被判断为人工排除(虽然我实际没有去执行排除),因此未完整的填充所有可能的数字。
    可能我需要养成一个习惯,入场先全部标记下 /笑 cry
    kingdom8
        218
    kingdom8  
       2023-11-29 16:25:07 +08:00
    最近正好在找数独游戏,搜索就看到这个,烦请给个 IOS 终身,谢谢 andxMjAxOEBnbWFpbC5jb20=
    lulu00147
        219
    lulu00147  
       2023-11-30 15:05:43 +08:00
    老板,安卓 14 下一直闪退啊,跪求修一下谢谢
    sixg0d
        220
    sixg0d  
       2023-12-06 16:51:49 +08:00
    老铁,我又回来反馈一些看法啦~
    1. 我每天都玩,经常出现的情况就是手滑填错,反思了一下觉得可以给底部选中的数字也高亮,因为玩数独的时候都是靠选中数字看是否有唯一位置,并不会在意这数字是几,在拼时间且频繁切数字下,脑子来不及反应现在是数字几。
    2. 在填错的情况下,同行同列同块的同数字标记也会消失。这时候如果按 undo ,标记会回来,还算好,但这时如果手急改回正确的数字后,那就蛋疼了,因为不该抹去的标记也没了。通过你 216 楼的回复,似乎这时按一键 note 只会补上正确答案的 note 。能够理解这是很尴尬的局面,一方面要照顾可能是用户通过逻辑排除掉的 note ,一方面又可能有被错误抹去的 note (不管是误填还是错误逻辑)。你选择补上正确答案作为 note 也算是折衷,不过这是不是等于是给答案了(😂我在所有空格标记 1 ,然后一键 note ,出来的是不是就是正确答案?)。
    3. 我说了这么多,其实想说的是,填错的情况下,是不是可以不抹去 note ?
    4. 同时为了处理第二点中出现的尴尬局面,是否可以增加一个一键 erase ,比如用户发现自己 note 填乱了,也会想重新填。
    5. 如果允许的话,统计可以添加一个平均时间。最短时间具有偶然性,有时候突然出现一个简单的题,这样保留下的时间记录没啥参考意义。
    6. 是不是其他 v 友提到过,每日挑战是不是可以放个排名(比如你击败了百分之多少的网友)?顺便问下,每日挑战的题是所有用户都一样的么。
    7. 最后就是我心心念念的从底部选中数字和自动补全最后一格啦。底部数字改成选中高亮的话,跟点击选中逻辑就配套了,修改数字的话可以改成长按,或者强制 erase 后才能修改,符合自然逻辑,跟你现在的数字锁定也是一致的。
    andyzhshg
        221
    andyzhshg  
    OP
       2023-12-07 10:46:57 +08:00
    @sixg0d 非常感谢这么久了还返场回复哈

    1 底部选中数字高亮可以加上,不过我还没想好怎么展示。最直观的方式是跟棋盘上高亮的样式一致,不过现在绿色圆角矩形已经用来展示对应宫是否完成了,最终可能上边或下边加一个小点之类的。

    2/3 这里确实有你提到的问题,其实我已经偷偷处理了一些情况,比如某个格子填了错误的数字 3 ,然后不按 undo 而是按 3 取取消填入或者按橡皮擦擦出,都会按照 undo 处理,补回之前的 note 。但确实没有考虑填错了再改成正确的情况。像你说的填错了就不更新 note 也是一个方案,我再研究下有没有更好的方式。

    4 一键 erase 指的应该是 erase 所有的 note 吧,这个可以加上,不过我现在的 ui 不太容易放进去了,可能藏得比较深了。

    5 平均时间确实更有意义一些,下次更新就加上。其实游戏的中的很多数据就在本地的存档数据库里,只是我设计能力有限,还没想明白怎么展示,后边会一点点迭代出来。

    6 排名这个短期估计没有,现在游戏可以认为是一个单机游戏,只有内购,广告这些联网,游戏本身是没有服务器的。而且现在游戏的下载量还很小,用真实数据展示的话也比较尴尬。等现在的版本迭代的基本稳定的话我计划去花钱商店买买广告,扩大下用户量,后边在考虑加联网排名之类的东西。
    目前的题库是固定的,包括快速游戏和每日挑战:快速游戏每个难度包含了 10000 道题,如果 10000 道刷完了会从头再循环(我是不太信有人会刷完的😂),但是会对原题做等价变换,看起来会不一样,所以可以理解成是无限的;每日挑战每个难度有 5000 道题,从 2023 年 1 月 1 日开始,每个难度每天 1 道题,大概可以用 13 年(如果真能有人玩这么久我一定会回来更新题库的😂)

    7 自动补全最后一格这个也会有,但排期的优先级会稍低一些,也不会是默认开启的功能。选中高亮这个我还没确定要不要做,因为跟现在的操作模式确实是冲突的,容我再想想。
    sixg0d
        222
    sixg0d  
       2023-12-17 20:51:50 +08:00
    @andyzhshg 哈哈,看到平均时间加上去了,关于其他几点改动我斗胆提供一下我的想法:
    1. 底部高亮已经有背景的情况下,可以考虑上移突出、放大或上边加个亮杠之类的。
    4. erase all 可以考虑长按 erase 键。
    7. 按打开正确锁定的情况下,焦点在非空格时点击底部数字就成了无效操作了。这么高效的操作浪费了挺可惜的,所以选中底部高亮可以和正确锁定绑定在一起,打开的话就成了选中底部高亮,不打开的话就默认你之前的操作。
    辛苦开发者啦,你的 UI 非常简洁舒服~
    waytin
        223
    waytin  
       339 天前
    开代理,买会员怎么连不上 google play ,不整个微信/支付宝买会员码的链接吗,google play 应该也有很多人没有绑定卡吧。
    andyzhshg
        224
    andyzhshg  
    OP
       339 天前
    @waytin 国内购买确实有些麻烦,我自己 play 商店绑卡也没成功过...

    Google Play 的应用是否可以放第三方支付的购买方式我确实是不太清楚,苹果那边是明确不可以的。现在这个版本因为备案和版号的问题没有上国内的市场,所以想付费确实麻烦一些。我这边正在重构项目,后边应该会单独封装处一个国内版,功能基本一致,尝试上到国内的市场,以游戏的方式上架肯定是没戏的,看能不能上到应用分类里。

    如果需要会员,可以留个邮箱,我免费发你个兑换码。
    waytin
        225
    waytin  
       339 天前
    @andyzhshg 行谢谢,邮箱:YWRmc2Rmc2Rmczg4OEBnbWFpbC5jb20=
    andyzhshg
        226
    andyzhshg  
    OP
       339 天前
    @waytin 兑换码已经发送到邮箱,请查收
    xuelang
        227
    xuelang  
       72 天前
    学习了,你这个设计确实考虑的很多,很不错。

    我最近用 cursor 写了个数独小游戏,比较简单,web 端的,可以玩玩看。

    https://gallery.selfboot.cn/zh/games/sudoku
    1  2  3  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2759 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 08:59 · PVG 16:59 · LAX 00:59 · JFK 03:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.