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

写了个网页版数独游戏

  •  1
     
  •   mara1 · 2019-09-07 22:47:28 +08:00 · 4919 次点击
    这是一个创建于 1899 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在线玩: https://emilytimer.github.io/sudoku/
    代码在这: https://github.com/emilytimer/sudoku

    欢迎大佬来瞅瞅
    35 条回复    2019-09-10 10:14:24 +08:00
    steley
        1
    steley  
       2019-09-07 23:03:18 +08:00
    挺好玩的,要是支持左右上下键就好了
    tuding
        2
    tuding  
       2019-09-07 23:04:46 +08:00 via Android
    滋瓷,我手机上有个数独游戏 APP 都待了几年了
    rekulas
        3
    rekulas  
       2019-09-07 23:05:20 +08:00
    加上错误检测体验更好点
    caNoN2019
        4
    caNoN2019  
       2019-09-07 23:07:50 +08:00 via Android
    这个随机留空不能保证最终答案只有一个,而你最后验算是根据玩家的 81 个格子与你设定的 81 个格子是否完全一致。这样是不是会导致 如果玩家的答案正确,却不符合你的设定答案,你会判定为玩家错误?
    caNoN2019
        5
    caNoN2019  
       2019-09-07 23:15:26 +08:00 via Android
    @caNoN2019 又想了下,随机留空能否保证只有唯一的正确答案,还得仔细思考下。我上面的说法不一定正确。
    rekulas
        6
    rekulas  
       2019-09-07 23:16:44 +08:00
    如上所说 问题还很严重
    caNoN2019
        7
    caNoN2019  
       2019-09-07 23:20:53 +08:00 via Android
    @caNoN2019 刚搜索了一下,生成数独的唯一解算法还是个挺好玩的事,又长见识了。
    newtype0092
        8
    newtype0092  
       2019-09-07 23:26:44 +08:00
    随便做了一个就不给通过。。。数独校验只有加法你是怎么算错的?
    newtype0092
        9
    newtype0092  
       2019-09-07 23:31:25 +08:00
    @caNoN2019 好像目前没有能批量生成唯一解的,全集空间太大,只能像挖素数一样一点点算,有一个够大的已验证样本集之后,用几种模式变换矩阵,可以把一个变型成多个。
    Building
        10
    Building  
       2019-09-08 00:23:15 +08:00
    @caNoN2019 只要有 17 个已知数,数独的解就是唯一的,不存在第二个解。
    rekulas
        11
    rekulas  
       2019-09-08 01:07:36 +08:00
    做游戏不需要考虑唯一解的问题,遍历检查就行了 1ms 都不用
    digimoon
        12
    digimoon  
       2019-09-08 02:01:17 +08:00
    第 81 个空里边,值 GoogleCN 不对
    xiri
        13
    xiri  
       2019-09-08 03:02:13 +08:00 via Android
    @Building 你搞错了哦,被证明的是小于 17 个已知数的数独必定有多解,但这是充分不必要条件,并不意味着大于等于 17 个已知数的数独必定有唯一解。

    最简单的情况,已知数都集中在两行中,第一行 123456789,第二行 456789123 (这里有 18 个数了,要 17 个的话随便删掉一个就行),你自己看看有多少个解吧
    caNoN2019
        14
    caNoN2019  
       2019-09-08 07:11:02 +08:00 via Android
    @rekulas 所以我上面的说法是,作者没有生成唯一解,但是校验却用的唯一解的检验方法
    VEEX6
        15
    VEEX6  
       2019-09-08 08:39:51 +08:00 via Android
    @caNoN2019 n 年前我也写过一个安卓版的,生成随机盘用的回溯法,然后随机遮掉几个,挺好玩的
    zycojamie
        16
    zycojamie  
       2019-09-08 09:46:59 +08:00 via Android
    适配下移动端,样式完全乱了。。
    mara1
        17
    mara1  
    OP
       2019-09-08 10:10:35 +08:00
    大家主要争论唯一解的问题,这个我写完的时候也想过,去查了下,跟 @Build 得到的结果一样,只要你写填上大于 17 个数字,就会只有 1 个答案。
    我这个难度设置最难的概率说 0.3,大概率会填上 0.3*81 = 24 个,所以,基本都会>17 个,我就当只有唯一解了(不要打我)。
    @zycojamie ,移动端不想适配了,本来想写 ios 的,但是苹果开发者要 99 美元才能开通,算了,我还是写个小程序吧。
    mara1
        18
    mara1  
    OP
       2019-09-08 10:11:11 +08:00
    @steley ,房间键是个好想法,我加上。
    mara1
        19
    mara1  
    OP
       2019-09-08 10:11:26 +08:00
    方向键
    mara1
        20
    mara1  
    OP
       2019-09-08 10:12:01 +08:00
    @rekulas , 错误检测也挺好,我也加上。
    mara1
        21
    mara1  
    OP
       2019-09-08 11:19:04 +08:00
    @rekulas ,错误检测功能已上线,欢迎体验
    具体做法:
    1. 加了个 check 按钮,当空格都填上时,检查和答案是否一样,如果不一样,把下标记下来(即 81 个空格中的顺序)
    2. 根据顺序,转换到对应的输入框,给输入框加类名,对应添加样式
    november
        22
    november  
       2019-09-08 11:36:39 +08:00


    我这也不知道错在哪啊。。。。
    mara1
        23
    mara1  
    OP
       2019-09-08 11:43:19 +08:00
    @november ,大佬,我大概知道你是怎么整出来的,第一把你检测出错,直接点重开了,已修复。
    我已经流汗了,感谢你。
    mara1
        24
    mara1  
    OP
       2019-09-08 12:16:45 +08:00
    @steley ,方向键加上了,吃饭去了。
    steley
        25
    steley  
       2019-09-08 15:01:45 +08:00
    第一次玩用了 180 秒,现在 90 秒了
    sinv
        26
    sinv  
       2019-09-08 18:43:12 +08:00
    我浏览器的问题么?总是 147、258、369
    mara1
        27
    mara1  
    OP
       2019-09-08 19:07:19 +08:00
    @steley 是不是感觉良好,偷偷告诉你,我把难度调低了哈哈。
    @sinv ,不是你浏览器的锅,随机生成的,多玩几把就发现乱序了。
    kiddyu
        28
    kiddyu  
       2019-09-08 21:17:55 +08:00

    检查了好几遍也没发现错- -
    mara1
        29
    mara1  
    OP
       2019-09-08 21:42:32 +08:00
    @kiddyu , 是个 bug,我刚改好,您再试试?
    cenx
        30
    cenx  
       2019-09-09 10:33:09 +08:00
    前不久用 TS+React 版实现的塑料数独
    https://cenxky.github.io/sudoku-react
    代码: https://github.com/cenxky/sudoku-react
    mara1
        31
    mara1  
    OP
       2019-09-09 11:16:49 +08:00
    @cenx , 你的生成思路可否简单讲一下,看看我的还有没有优化的地方
    cenx
        32
    cenx  
       2019-09-09 18:10:31 +08:00
    @mara1 其实我生成的也不是标准的数独,还是有多个解,先生成 17 个随机分布在格子上,然后解出来,接下来挖洞,随机挖 41 ~ 64 个洞,完成。参考代码: https://github.com/cenxky/sudoku-react/blob/master/src/lib/sudoku.ts#L15
    caNoN2019
        33
    caNoN2019  
       2019-09-09 21:36:01 +08:00 via Android
    @mara1 “只要你写填上大于 17 个数字,就会只有 1 个答案” 真的吗?
    mara1
        34
    mara1  
    OP
       2019-09-09 22:21:37 +08:00
    @cenx ,为什么要用框架啊哈哈
    @caNoN2019 不确定,我也是 google 出来的
    cenx
        35
    cenx  
       2019-09-10 10:14:24 +08:00
    @caNoN2019 明显是假的

    @mara1 你说 antd? 随手拿的撸 UI 的而已
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1000 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:36 · PVG 05:36 · LAX 13:36 · JFK 16:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.