<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-14  評論-25  文章-1  trackbacks-0
    這個小的project是前一個階段,待業在家的時候,迷戀sudoku的時候,自己寫來玩的。
    正好當時在看Uncle Bob的《Agile Software Development: Principles, Patterns, and Practices》 (敏捷軟件開發:原則、模式與實踐),所以就按照自己對書中的一些概念和方法的理解,結合自己之前的開發經驗寫出來一段小的代碼。

    代碼行數: < 900
    類的個數: 18
    抽象類的個數:2
    工廠類的個數:1
    包的個數:5

    一些關于類和包作用的說明:
    1.Cell:表示一個Cell,是一個游戲中的一個單元格。
    ? Cell主要由3個部分組成,Point,Value,Status.
    2.Point:表示一個坐標,主要格式為:(2,3).
    ? !!!注意:由于個人比較懶,所以開始的錯誤被貫徹了下來。
    ? 這個錯誤就是(2,3)表示的是由最左上的位置為坐標原點,第二行和第三列所確定的那個單元格。也就是縱坐標在前,橫坐標在后了。
    3.Value:表示一個值
    4.Status:表示Cell的狀態,只有兩個狀態,一個是NotSure,另一個是Sure.

    5.AbstractCells:表示一些cell的集合,主要有三個子類
    ???? BlockCells:表示一個由多個Cell組成的塊,例如一個2*2由4個Cell組成的塊,或者一個2*3由6個Cell組成的塊
    ???? HorizonCells:表示一個橫行,即:從(0,0)到(0,n)坐標確定的所有Cell的集合。
    ???? VerticalCells:表示一個縱行,即:從(0,0)到(n,0)坐標確定的所有Cell的集合。
    6.AbstractPolicy:就是游戲的策略。
    ?? 這個主要表示的是:4*4的游戲,還是9*9的游戲。
    ?? 可以在以后對此類進行繼承和擴展,例如16*16的游戲我就沒有實現。
    ?? 主要擴展3個方法:
    ????????????????? 1)getValueRange,返回當前policy的value的個數。4*4的游戲的getValueRange返回的就應該是4。
    ??? ??? ? 2)getStep:表示當前policy中相鄰的兩個BlockCells的坐標差。
    ??? ??? ? 3)getIncrease:說不明白了:)(只可意會不可言傳。)
    7.Game:進行Policy的場所(我一直想拋棄這個類)
    8.TestGame:游戲運行的地方,包括從PolicyFactory取得指定的Policy,設置輸入輸出文件的路徑。
    9.PolicyFactory:取得Policy的工廠。
    ??? getPolicy(int x) :這個方法獲得的是正方形的sudoku的策略。例如:4*4的,9*9,16*16。
    ??? getPolicy(int x, int y):這個方法獲得的是長方形的Sudoku的策略。例如:9*12的。


    雖然是盡量避免bad code smell,但是由于能力有限,還是出現了一些不好的地方。
    例如:之間的關聯關系還是很多,而且很強;抽象的方法和抽象類的個數偏少等等。

    里面實現了三個解決sudoku的方法:
    1.在一個Cell中出現的Value,不會在和這個Cell處在同一個AbstractCells中的所有Cell中出現;
    2.如果一個Cell中,所有可能出現的Value的個數為1,那么Cell的Value必然是這個最后的Value;
    2.如果一個Value,如果在當前AbstractCells的所有其他的Cell中都不可能出現,那么它必然是最后一個Cell的Value。

    附件1:src code
    http://www.tkk7.com/Files/GandofYan/sudoku.rar
    附件2:輸入輸出文件的example
    http://www.tkk7.com/Files/GandofYan/temp.rar

    posted on 2006-07-13 16:19 混沌中立 閱讀(2171) 評論(4)  編輯  收藏 所屬分類: about java & j2ee

    評論:
    # re: 一個Sudoku的java求解算法 2007-08-12 17:11 | dreamstone
    寫的不錯啊  回復  更多評論
      
    # re: 一個Sudoku的java求解算法 2007-08-13 10:38 | GandofYan
    @dreamstone


    謝謝夸獎

    去年在迷sudoku的時候寫的

      回復  更多評論
      
    # re: 一個Sudoku的java求解算法 2008-07-15 18:17 | 和尚
    想學習下,但似乎您的連接下載不了的說  回復  更多評論
      
    # re: 一個Sudoku的java求解算法 2008-07-15 18:19 | 和尚
    不好意思,ok了,
    感謝!  回復  更多評論
      
    主站蜘蛛池模板: 国产精品亚洲综合一区| 岛国av无码免费无禁网站| 亚洲AV网站在线观看| 色欲aⅴ亚洲情无码AV| 在线观看视频免费国语| 亚洲色无码专区一区| 最近免费中文字幕视频高清在线看| 国产成人精品日本亚洲专一区| 一个人免费观看视频www| 亚洲国产精品一区二区三区在线观看| 歪歪漫画在线观看官网免费阅读| 亚洲综合色一区二区三区| 国产美女无遮挡免费视频网站| 国产亚洲Av综合人人澡精品| 久久99亚洲综合精品首页| 最近免费字幕中文大全| 亚洲成AV人片在线观看ww| 无码人妻一区二区三区免费看 | 亚洲av无码乱码国产精品| 青青青国产手机频在线免费观看 | 亚洲熟妇av一区二区三区| 免费人成网站在线观看不卡| 亚洲电影唐人社一区二区| 性感美女视频在线观看免费精品| 亚洲成a∧人片在线观看无码| 亚洲国产成人久久一区WWW| 国内永久免费crm系统z在线| 亚洲国产成人久久三区| 国产免费观看网站| 免费无码一区二区三区蜜桃| 亚洲中文久久精品无码1| 一本色道久久88亚洲综合| 国产午夜无码精品免费看动漫| 亚洲六月丁香六月婷婷蜜芽| 韩国欧洲一级毛片免费| 最新久久免费视频| 亚洲GV天堂无码男同在线观看| 日韩一卡2卡3卡4卡新区亚洲| 91麻豆最新在线人成免费观看 | 曰批全过程免费视频在线观看无码| 亚洲福利视频网站|