写了个网页版数独游戏 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
mara1
V2EX    分享创造

写了个网页版数独游戏

  •  1
     
  •   mara1 2019-09-07 22:47:28 +08:00 5353 次点击
    这是一个创建于 2226 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在线玩: 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     Solana     2541 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 01:58 PVG 09:58 LAX 18:58 JFK 21:58
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86