freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

j2me手機(jī)游戲—sudoku數(shù)獨(dú)畢業(yè)論文-資料下載頁(yè)

2025-06-24 02:32本頁(yè)面
  

【正文】 Y) = level。 }游戲每關(guān)提供了 40 個(gè)謎題,共 80 個(gè)基礎(chǔ)謎題。每個(gè)基礎(chǔ)謎題可以通過(guò)變形產(chǎn)生新的謎題,這些謎題存儲(chǔ)在字符串中。 protected static final byte NUM = 40。//每個(gè)等級(jí)的謎題數(shù)量 protected static final String[][] strPuzzles = //謎題字符串{ { 。9=?@87684179523=A5B26。4C579。48=6B。65329A937@82?16C45A3。B45168379273BC。6?, 。=795648697831?485@。97=9@=75818?914A=6731?6BC446。BC357?A82=6419319457B@, 。98=675?72813@936?9A1B221C83?768?=762C。464A9。53831@589A9@517B42=7B43C65。, //后面省略SuDoKuModel 類(lèi)的一個(gè)重要功能是生成謎題,前面給出基本題型,但通過(guò)交換同一九宮格內(nèi)的行列,以及對(duì) 9 個(gè)數(shù)字進(jìn)行任意排列,會(huì)產(chǎn)生新的謎題,這樣極大地減少了出線同樣謎題的可能。對(duì)謎題進(jìn)行交換的方法 shuffle()代碼如下:protected String shuffle(String s) //用給定的字符串產(chǎn)生新的數(shù)獨(dú)謎題{ String sReturn = s。 byte[] ba。 byte b, t, i, j。 for (b = 0。 b 3。 b++) { ba = getShuffledArray( (byte) 3)。//隨機(jī)產(chǎn)生同一九宮格內(nèi)列的交換方式 sReturn = swapCols(s, ba, b)。//交換列 ba = getShuffledArray( (byte) 3)。//隨機(jī)產(chǎn)生同一九宮格內(nèi)行的交換方式 sReturn = swapRows(s, ba, b)。//交換行 } ba = getShuffledArray( (byte) 9)。//隨機(jī)產(chǎn)生 9 個(gè)數(shù)字的交換方式 sReturn = swapNumbers(sReturn, ba)。//交換九宮格內(nèi)的數(shù)字 return sReturn。 //返回處理后的字符串 }getShuffledArray()方法產(chǎn)生 0 到 n1 數(shù)字內(nèi)的任意排列,例如 0、2 的排列可能是 0、1 和 0 具體排列方式由隨機(jī)數(shù)產(chǎn)生。所得的排列方式用來(lái)對(duì)數(shù)獨(dú)單元格的行、列及九宮格進(jìn)行交換。protected byte[] getShuffledArray(byte n) { byte[] baReturn = new byte[n]。 byte b, t, i, j。 for (b = 0。 b n。 b++) baReturn[b] = b。 for (b = 0。 b 2 * n。 b++) { i = (byte) ((()) % n)。//產(chǎn)生隨機(jī)數(shù),發(fā)生交換的位置 j = (byte) ((()) % n)。//產(chǎn)生隨機(jī)數(shù),發(fā)生交換的位置 t = baReturn[i]。 //交換 i,j 位置的數(shù)字 baReturn[i] = baReturn[j]。 baReturn[j] = t。 } return baReturn。 //返回交換后的結(jié)果 }swapCols()方法將根據(jù) getShuffledArray()方法產(chǎn)生的交換方法,進(jìn)行指定九宮格內(nèi)部的列交換,由字節(jié)數(shù)組 ba 保存交換方式,變量 b 指定所交換的九宮格,范圍 0 到 2。swapCols()方法代碼如下:protected String swapCols(String s, byte[] ba, byte b) //交換列{ char[] caReturn = ()。//謎題字符串 byte i, j。 for (j = 0。 j 。 j++) if (j != ba[j]) for (i = 0。 i 9。 i++) caReturn[9 * i + 3 * b + j] = (9 * i + 3 * b + ba[j])。 return new String(caReturn)。//返回發(fā)生列交換后的題目 }同理,與交換列的方法類(lèi)似,依舊提供了交換行的方法 swapRows(),代碼省略。除了行,列交換之外,還提供了交換數(shù)字的方法。注意:在交換時(shí)要注意區(qū)分謎題數(shù)字和非謎題數(shù)字。protected String swapNumbers(String sOrig, byte[] ba) { StringBuffer sbReturn = new StringBuffer(())。 byte yNum, yCiS。 for (byte i = 0。 i ()。 i++) { yNum = (byte) ((i) 39。039。)。 yCiS = (byte) (yNum / 10)。 //查看是否是謎題數(shù)字 yNum = (byte) (yNum % 10)。 //取余 ( (char) (39。039。 + ba[yNum 1] + 1 + 10 * yCiS))。 } return ()。 }玩家在游戲過(guò)程中可以隨時(shí)保存游戲,保存的內(nèi)容為難度級(jí)別,當(dāng)前單元格內(nèi)容,答案字符串,背景索引,持續(xù)時(shí)間和輸入方式。saveGame()方法通過(guò)調(diào)用 SuDoKuStore 類(lèi)得 save()方法完成了游戲的保存。和保存游戲相反,loadGame()方法完成了游戲的加載。如果加載失敗,則隨機(jī)產(chǎn)生新的謎題。加載謎題后,將新的謎題填充到單元格中。當(dāng)然,SuDoKuModel 類(lèi)除了提供保存和加載游戲的方法外,還可以隨機(jī)產(chǎn)生新的謎題,開(kāi)始新游戲方法為 startNewGame()方法。public void startNewGame() //開(kāi)始新游戲{ logic = (shuffle(strPuzzles[level][(()) % NUM]))。//創(chuàng)建游戲邏輯對(duì)象 xCursor = 4。 //起始填充格 yCursor = 4。 //起始填充格 writeAllNumbers()。 //寫(xiě)入所有數(shù)字 (xCursor, yCursor, (yCursor, xCursor), (byte) ( | ((yCursor, xCursor) ? //繪制輸入光標(biāo)的數(shù)字 : )))。 } SuDoKuLogic 類(lèi)SuDoKulogic 類(lèi)將 SuDoKuModel 類(lèi)給出的謎題字符串轉(zhuǎn)換為數(shù)組,并用布爾數(shù)組 isCarved 來(lái)區(qū)分謎題數(shù)字和答案數(shù)字。該類(lèi)還負(fù)責(zé)檢測(cè)謎題是否完成,并以字符串的形式提供當(dāng)前單元格的狀態(tài)和謎題答案用以保存。該類(lèi)完成了整個(gè)游戲的數(shù)據(jù)處理和邏輯判斷功能。當(dāng)玩家按下鍵盤(pán)時(shí),SuDoKuModel 類(lèi)處理鍵盤(pán)事件,并判斷是否可以輸入以及輸入的內(nèi)容,如果玩家輸入合法則調(diào)用 SuDoKuLogic 類(lèi)的setValueWithoutCheck()方法,修改幕后的單元格內(nèi)容,數(shù)字的繪制由畫(huà)布類(lèi)實(shí)現(xiàn)。注意:如果單元格屬性 isCarved 為 true,表示該單元格是謎題的一部分,是不可更改的,則該位置的數(shù)字不發(fā)生變化。如果修改成功,并且原位置為空白,則 writtenCnt 計(jì)算器增 1;如果在已填區(qū)域按下 0,則該位置清空,并且writtenCnt 計(jì)算器減 1。public void setValueWithoutChecks (byte i, byte j, byte n) { byte old = board[i][j]。 board[i][j] = n。 if (!isCarved[i][j]) //如果為可修改區(qū)域 if ((n 0) amp。amp。 (old == 0)) writtenCnt++。 //修改空白單元格 else if ((n == 0) amp。amp。 (old 0)) writtenCnt。 //清空已填單元格 }根據(jù)數(shù)獨(dú)游戲的規(guī)則,玩家填充 81 個(gè)宮格之后,要滿足所有行,所有列和所有小九宮格內(nèi)不能出現(xiàn)重復(fù)的數(shù)字,并以此為條件進(jìn)行檢測(cè)。列檢測(cè)首先對(duì)各列進(jìn)行檢測(cè),提供了檢測(cè)列內(nèi) 9 個(gè)數(shù)字是否有重復(fù)數(shù)據(jù)的方法isValidColumn(),該方法以此遍歷列中的 9 個(gè)數(shù)字,當(dāng)遍歷到某個(gè)數(shù)字時(shí),檢測(cè)該數(shù)字后面的數(shù)字是否出現(xiàn)重復(fù)。比如,當(dāng)檢測(cè)到第 3 個(gè)數(shù)字是 7 時(shí),則檢測(cè)第 49 個(gè)數(shù)字是否出現(xiàn) 7,如果出現(xiàn)重復(fù)則停止檢測(cè),只有既可以避免重復(fù)檢測(cè),又可以避免遺漏。 protected boolean isValidColumn (byte j) { //檢測(cè)指定列的數(shù)字是否符合條件 byte b, k。 for (byte i = 0。 i 8。 i++) //依次遍歷列中的數(shù)據(jù) { b = board[i][j]。 for (k = (byte) (i + 1)。 k 9。 k++)//遍歷此數(shù)之后的數(shù)據(jù) if (b == board[k][j]) //檢查是否有重復(fù)數(shù)字出現(xiàn) return false。 //出現(xiàn)重復(fù)則返回 false } return true。 //檢測(cè)完畢,返回 true}行檢測(cè)類(lèi)似于對(duì)列數(shù)據(jù)的檢測(cè),還需要對(duì)每行進(jìn)行檢測(cè),因此程序提供了對(duì)行數(shù)據(jù)的檢測(cè)方法 isValidRow(),該方法代碼如下:protected boolean isValidRow (byte i) { byte b, k。 for (byte j = 0。 j 8。 j++) { b = board[i][j]。 for (k = (byte) (j + 1)。 k 9。 k++) if (b == board[i][k]) return false。 }小九宮格檢測(cè)除了對(duì)行和列的重復(fù)數(shù)據(jù)檢測(cè)之外,還需要對(duì)小九宮格內(nèi)的所有數(shù)字進(jìn)行檢測(cè),避免出現(xiàn)重復(fù)現(xiàn)象。檢測(cè)原理與行,列檢測(cè)相同,但需要計(jì)算九宮格內(nèi)數(shù)字的位置。iRow 和 jCol 指定了檢測(cè)九宮格的位置,數(shù)獨(dú)單元格中一共有33 個(gè)九宮格,iRow 和 jCol 的范圍為 0 到 2。用以下程序完成九宮格內(nèi)重復(fù)數(shù)字的檢測(cè)。 protected boolean isValidSquare (byte iRow, byte jCol) { byte b, k。 for (byte n = 0。 n 8。 n++) { b = board[iRow * 3 + (n / 3)][jCol * 3 + (n % 3)]。//取出九宮格內(nèi)的各個(gè)數(shù)字 for (k = (byte) (n + 1)。 n 9。 n++) if (b == board[iRow * 3 + (k / 3)][jCol * 3 + (k % 3)])//判斷是否出現(xiàn)重復(fù)數(shù)字 return false。//出現(xiàn)重復(fù)數(shù)字則返回 false } return true。}最終結(jié)果檢測(cè)根據(jù)游戲規(guī)則,需要對(duì) 9 行 9 列檢測(cè)是否存在重復(fù)數(shù)字,并且對(duì) 9 個(gè)九宮格內(nèi)的數(shù)字進(jìn)行檢測(cè),這些檢測(cè)包含在 isSolved()方法中。 public boolean isSolved() { if (writtenCnt 81)//如果單元格尚未填滿則直接返回 return false。 for (byte i = 0。 i 9。 i++) { if (!isValidColumn (i)) return false。 //檢測(cè)
點(diǎn)擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1