文章出處
文章列表
今天確定了思路,大致為以下結構:
1、在Game中定義數據,進行初始化格子的數據。
2、定義觸摸事件。
在View類中,覆寫onTouchEvent(MotionEvent event)方法。
3、繼承Dialog類,自定義一個dialog。
4、做好了上述準備后,我們就可以再View類中,進行游戲的布置,和進行操作了。
5、在主類中調用MyView對象。
預計時間:5天,每天完成一個類的編碼。
今天內容:
Game的類
public class Game { // 準備一個字符串數字 public final String STR = "360000000004230800000004200" + "070460003820000014500013020" + "001900000007048300000000045"; // 一個數組,存儲某個單元格中不可用的數據 private int[] data = new int[9 * 9]; // 定義一個數組,用于存儲所有單元格中,不可用的數據 int[][][] usedAll = new int[9][9][]; public Game() { data = getData(STR); calculateAllUsedTiles(); } // 獲得每個單元格中的數字 private int getTitle(int x, int y) { return data[x + y * 9]; } // 將單元格中的數字轉換為字符串格式 public String getTitleString(int x, int y) { int v = getTitle(x, y); if (v == 0) { return ""; } else { return String.valueOf(v); } } // 定義方法,將字符串常量轉換為數字存入數組中,游戲初始化數據 private int[] getData(String strData) { int[] sudo = new int[strData.length()]; for (int i = 0; i < sudo.length; i++) { sudo[i] = strData.charAt(i) - '0'; } return sudo; } // 取出所有單元各種,不可用的數據 public void calculateAllUsedTiles() { for (int i = 0; i < 9; i++) for (int j = 0; j < 9; j++) { usedAll[i][j] = calculateUsedTile(i, j); } } // 取出某單元格中,不可用的數據 public int[] getUsedTile(int x, int y) { return usedAll[x][y]; } // 計算某一單元格中不可用的數據 public int[] calculateUsedTile(int x, int y) { int[] c = new int[9]; // 計算該單元格縱向(列)不可用數據 for (int i = 0; i < 9; i++) { if (i == y) continue; int t = getTitle(x, i); if (t != 0) { c[t - 1] = t; } } // 計算該單元格橫向(行)不可用數據 for (int i = 0; i < 9; i++) { if (i == x) continue; int t = getTitle(i, y); if (t != 0) c[t - 1] = t; } // 計算小九宮格中不可用的數據 int startx = (x / 3) * 3; int starty = (y / 3) * 3; for (int i = startx; i < startx + 3; i++) for (int j = starty; j < starty + 3; j++) { if (i == x && j == y) continue; int t = getTitle(i, j); if (t != 0) c[t - 1] = t; } int numused = 0; for (int t : c) { if (t != 0) numused++; } int[] c1 = new int[numused]; numused = 0; for (int t : c) { if (t != 0) c1[numused++] = t; } return c1; } //接收KeyDialog中點擊的數字 public boolean setTileIfValid(int x, int y, int value) { int[] tiles = getUsedTiles(x, y);//得到不可用的數據 for(int i = 0; i<tiles.length; i++) Log.i("TAG", "tiles["+i+"]"+tiles[i]); if (value != 0) { for (int t : tiles) { if (t == value) return false; } } setTile(x, y, value);//將對應的值value繪制在xy對應的格子中 calculateAllUsedTiles();//重新計算所有格子的不可用數據 return true; } public int[] getUsedTiles(int x, int y) { return usedAll[x][y]; } public void setTile(int x, int y, int value) { data[y * 9 + x] = value; } }
文章列表
全站熱搜