JAVA数独演示稿.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
JAVA数独演示稿

游戏控制的实现 2.谜题的产生 swapCols()方法将根据getShuffledArray()方法产生的交换方法,进行指定九宫格内部的列交换,由字节数组ba保存交换方式,变量b指定所交换的九宫格,范围0到2。swapCols()方法代码如下: protected String swapCols(String s, byte[] ba, byte b) //交换列 { char[] caReturn = s.toCharArray();//谜题字符串 byte i, j; for (j = 0; j ba.length; j++) if (j != ba[j]) for (i = 0; i 9; i++) caReturn[9 * i + 3 * b + j] = s.charAt(9 * i + 3 * b + ba[j]); return new String(caReturn);//返回发生列交换后的题目 } 游戏控制的实现 2.谜题的产生 同理,与交换列的方法类似,依旧提供了交换行的方法swapRows(),代码省略。 除了行,列交换之外,还提供了交换数字的方法。注意:在交换时要注意区分谜题数字和非谜题数字。 protected String swapNumbers(String sOrig, byte[] ba){ StringBuffer sbReturn = new StringBuffer(sOrig.length()); byte yNum, yCiS; for (byte i = 0; i sOrig.length(); i++) { yNum = (byte) (sOrig.charAt(i) - 0); yCiS = (byte) (yNum / 10); //查看是否是谜题数字 yNum = (byte) (yNum % 10); //取余 sbReturn.append( (char) (0 + ba[yNum - 1] + 1 + 10 * yCiS)); } return sbReturn.toString(); } 数独逻辑SuDoKuLogic类 1.填充和 清空宫格 当玩家按下键盘时,SuDoKuModel类处理键盘事件,并判断是否可以输入以及输入的内容,如果玩家输入合法则调用SuDoKuLogic类的setValueWithoutCheck()方法,修改幕后的单元格内容,数字的绘制由画布类实现。 注意:如果单元格属性isCarved为true,表示该单元格是谜题的一部分,是不可更改的,则该位置的数字不发生变化。如果修改成功,并且原位置为空白,则writtenCnt计算器增1;如果在已填区域按下0,则该位置清空,并且writtenCnt计算器减1。 public void setValueWithoutChecks (byte i, byte j, byte n) { byte old = board[i][j]; board[i][j] = n; if (!isCarved[i][j]) //如果为可修改区域 if ((n 0) (old == 0)) writtenCnt++; //修改空白单元格 else if ((n == 0) (old 0)) writtenCnt--; //清空已填单元格 } 数独逻辑SuDoKuLogic类 2.检测填 充结果 根据数独游戏的规则,玩家填充81个宫格之后,要满足所有行,所有列和所有小九宫格内不能出现重复的数字,并以此为条件进行检测。 ①列检测 首先对各列进行检测,提供了检测列内9个数字是否有重复数据的方法 isValidColumn(),该方法以此遍历列中的9个数字,当遍历到某个数字时,检测该数字后面的数字是否出现重复。比如,当检测到第3个数字是7时,则检测第4-9个数字是否出现7,如果出现重复则停止检测,只有既可以避免重复检测,又可以避免遗漏。 protected boolean isValidColumn (byte j){//检测指定列的数字是否符合条件 byte b, k; for (byte i = 0; i 8; i++){ //依次遍历列中的数据 b = board[i][j]; for

文档评论(0)

laolingdao1a + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档