erlang wx图形界面学习-5

  之前已经讲了empty_table(#s)的生成,和#s分别代表什么,现在继续看下sudoku_game:init/1做了什么.
  Add = fun({Butt,Val},SN) ->
    validate(rcm(Butt),Val,false,SN) end,
一个fun函数,后面会使用lists:foldl/3,将Game的值全部传给它执行.
  Butt ->坐标index: row 1-9 , col 1-9
   Val ->具体的值
  这两个从Game =test()中可以得出{init,Game}向GUI 发送初始化,GUI会根据Game的值显示相应数字.
  rcm/1:根据坐标index ={Row,Col} 或者Poss=Integer(1-81),得到相应的坐标和所在的mat.如:rcm({1,9}) ->{1,9,3} ; rcm({2,6}) ->{2,6,2}
validate/4:
   Value等于0为clear该格子
   Value !=0时,poss/2 :得到该点坐所有的可能值.
index/2 :根据坐标,获得具体的poss位置(值为1-81)
element/2:或者#s.v中对应poss的值,
midx/2:在erlang wx图形界面学习-4中,讲述了mr和mc分别是什么,而mindx就是获取对应的mr,mc的位置:如:RCM = {1,9,3}时,对应的RM值为3,为#s.mr坐标为3的值,对应的Cm为9,#s.mc中坐标为9的值.
gb_sets:intersection/2:百度了一下,intersection是交集,该段代码便获取到了该点可能存在的值,当size=1的时候,没的说,就肯定是那个值了,当size!=1的时候get_nots/3,返回一个gb_sets,包含已经拥有的数字.gb_sets:difference(Set1,Set2):获得Set1中减去Set2的值.
现在回来S = poss/2之后,获得该点所有的可能值,之后判断Val是否属于该值,做相应的处理.
add/3:
   Ri = mindx(R,M), 获得mr中对应的位置
   CI= mindx(M,C),获得mc中对应的位置
  delete/3,删除对应mr,mc的value值
一系列操作就是删除相应p,m,mr,mc的值,然后赋值v,最后check_must(#s)
check_must/1:以mat为单位,核对mr,mc的值,选择(1-9这些值)是否要添加到mr,mc中; PS:在初始化的时候,empty_tables给must赋的值是空的gb_sets,在这里的时候,就会给mr,mc添加他们可能存在的值.
    sudoku就差不多是这样,只要理解了#s的属性那么就能够顺着逻辑看下去了.现在看来,这个sudoku的demo最难的地方反而是game这一块,基本上是连猜带蒙搞定的.本来打算把输入数字后的逻辑,new game 的逻辑这些都写一下的,感觉意义不大,自己看就行了.
    end,要说一下写博客这个事,希望我能坚持下去.虽然写的龊了点,但是.....如果没写博客我怎么可能看的懂这个sudoku啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值