数独游戏--弹出Dialog选择数字后刷新表格

来源:互联网 发布:质量好的女装品牌知乎 编辑:程序博客网 时间:2024/06/05 02:38

这最后一步有点多,所以就简单梳理下就好了。
首先,要编写一个KeyDialog继承Dialog类,在构造方法中传入Context,ShuduView,int[] used三个参数。
接着在onCreate方法中完成KeyDialog的布局设置,初始化Dialog里面的按钮,这个时候used数组就有用了,要把不能用的数字按钮设置为不可见。随后为按钮添加监听器,在onClick方法中返回一个信息传给shuduView,这个信息实际上就是按钮的数值。这时候shuduView 对象里面的getSelectedTile方法被调用,这个方法里面有一个判断–如果传回的数值没有被用过,那么invalidate()方法调用刷新表格内的数据。
描述到这里,就该编写前面博客里面说过的Game.java文件了,首先新建一个三维数组,int[][][] usedData=new int[9][9][],用来存储x,y和已经在x,y不能用的数值。
首先要写一个用来判断在表格(x,y)位置不可用的数值,返回一个数组。首先判断纵列,然后横列,最后一个大的3*3单元格内不能用的数字,不要忘记对数组进行压缩。
然后需要初始化usedData数组了,编写一个函数,两个循环相互嵌套,代表循环x轴和y轴,在Game的构造方法中进行调用。
不要忘了重写ShuduView里面的onTouchEvent方法,当点击屏幕的时候,该方法被调用,这里可以使KeyDialog类实现。

自己出现的几个问题:
1、在KeyDialog类的构造函数里面去实现本应该在onCreate方法里面的实现的内容,其实压根没先到去重写Dialog的onCreate方法,忘了。
2、其次构造方法内的参数没有考虑周到,没有意识传入shuduView的对象和used数组。
3、在ShuduView类中,getSelectedTile方法中没有写判断,直接更新Game中的usedData数组,然后不论是否满足条件就执行invalidate方法,结果导致一行可以填入相同的数据。

0 0
原创粉丝点击