Hodoku 汉化和结构改造
Hodoku 是一个零几年诞生的数独软件,来自一位德国工程师使用java语言独自开发。上次更新停留在2012年,距今已过去11年了。它非常稳定和强大,只占用不到2M的磁盘空间,但却是我到目前为止见过最强悍的数独工具软件,我非常喜爱这个软件。 我本着学习的想法,下载了它的源码,面对庞大的代码我却无从下手,于是选择汉化的方式渐渐深入了解我爱的这个它。 目前的这个汉化版本有小几百人在使用,在一个sudoku的群里面,是一个数独老师和学员们的群,年龄小到八九岁,大到72岁的奶奶,奶奶是个很厉害的大佬,在数独圈里小有名气。 而我只是在这个群里面提供汉化后的软件支持,回答一些使用疑问,交流一些数独的玩法和技巧。我做着两份我喜爱的事情,这要感谢Java让我有机会学习和试着改变它,感谢数独让我与他们相处在一起,感谢Hodoku作者将两者带给了我。
概览
AboutDialog.java
AboutDialog.form
AllStepsPanel.java
AllStepsPanel.form
AlsInSolutionStep.java
BackdoorSearchDialog.java
BackdoorSearchDialog.form
Candidate.java
CellZoomPanel.java
CellZoomPanel.form
Chain.java
CheckNode.java
CheckRenderer.java
ClipboardMode.java
ColorKuImage.java
ConfigColorkuPanel.java
ConfigColorkuPanel.form
ConfigColorPanel.java
ConfigColorPanel.form
ConfigDialog.java
ConfigDialog.form
ConfigFindAllStepsPanel.java
ConfigFindAllStepsPanel.form
ConfigGeneralPanel.java
ConfigGeneralPanel.form
ConfigGeneratorPanel.java
ConfigGeneratorPanel.form
ConfigLevelFontPanel.java
ConfigLevelFontPanel.form
ConfigProgressPanel.java
ConfigProgressPanel.form
ConfigSolverPanel.java
ConfigSolverPanel.form
ConfigStepPanel.java
ConfigStepPanel.form
ConfigTrainigPanel.java
ConfigTrainigPanel.form
ConfigTrainingDialog.form
DifficultyLevel.java
Entity.java
ExtendedPrintDialog.java
ExtendedPrintDialog.form
ExtendedPrintProgressDialog.java
ExtendedPrintProgressDialog.form
FindAllSteps.java
FindAllStepsProgressDialog.java
FindAllStepsProgressDialog.form
FishChooseCandidatesDialog.java
FishChooseCandidatesDialog.form
GameMode.java
GenerateSudokuProgressDialog.java
GenerateSudokuProgressDialog.form
GeneratorPatternPanel.java
GeneratorPatternPanel.form
GuiState.java
HistoryDialog.java
HistoryDialog.form
KeyboardLayoutFrame.java
KeyboardLayoutFrame.form
ListDragAndDrop.java
ListDragAndDropChange.java
Main.java
MainFrame.java
MainFrame.form
MyBrowserLauncher.java
MyFontChooser.java
MyFontChooser.form
NumbersOnlyDocument.java
Options.java
PrintSolutionDialog.java
PrintSolutionDialog.form
ProgressChecker.java
RegressionTester.java
RestoreSavePointDialog.java
RestoreSavePointDialog.form
SetGivensDialog.java
SetGivensDialog.form
SolutionCategory.java
SolutionPanel.java
SolutionPanel.form
SolutionStep.java
SolutionType.java
SolverProgressDialog.java
SolverProgressDialog.form
SplitPanel.java
SplitPanel.form
StatusColorPanel.java
StatusColorPanel.form
StepConfig.java
Sudoku.java
Sudoku2.java
SudokuCell.java
SudokuConsoleFrame.java
SudokuConsoleFrame.form
SudokuPanel.java
SudokuPanel.form
SudokuSet.java
SudokuSetBase.java
SudokuSetShort.java
SudokuSinglesQueue.java
SudokuStatus.java
SudokuUtil.java
SummaryPanel.java
SummaryPanel.form
WriteAsPNGDialog.java
WriteAsPNGDialog.form
根据文件的名称,初步分析可以将这些文件重新组织到不同的包中。以下是一个新的组织方式:
sudoku
的顶级包。sudoku
包下创建以下子包:
dialog
:用于存放与对话框相关的类文件。entity
:用于存放与实体相关的类文件。panel
:用于存放与面板相关的类文件。util
:用于存放与工具类相关的类文件。progress
:用于存放与进度相关的类文件。config
:用于存放与配置相关的类文件。solver
:用于存放与求解器相关的类文件。generator
:用于存放与生成器相关的类文件。step
:用于存放与步骤相关的类文件。singles
:用于存放与单元格相关的类文件。status
:用于存放与状态相关的类文件。test
:用于存放测试相关的类文件。根据上述组织方式,文件重新分组情况如下:
sudoku
├── dialog
│ ├── AboutDialog.java
│ ├── BackdoorSearchDialog.java
│ ├── ConfigDialog.java
│ ├── ConfigTrainingDialog.java
│ ├── ExtendedPrintDialog.java
│ ├── ExtendedPrintProgressDialog.java
│ ├── FindAllStepsProgressDialog.java
│ ├── FishChooseCandidatesDialog.java
│ ├── HistoryDialog.java
│ ├── KeyboardLayoutFrame.java
│ ├── PrintSolutionDialog.java
│ ├── RestoreSavePointDialog.java
│ └── SetGivensDialog.java
├── entity
│ ├── Candidate.java
│ ├── Chain.java
│ ├── CheckNode.java
│ ├── CheckRenderer.java
│ ├── ColorKuImage.java
│ ├── DifficultyLevel.java
│ ├── DifficultyType.java
│ ├── Entity.java
│ ├── GuiState.java
│ ├── SolutionCategory.java
│ ├── SolutionStep.java
│ └── SolutionType.java
├── panel
│ ├── AllStepsPanel.java
│ ├── CellZoomPanel.java
│ ├── ConfigColorkuPanel.java
│ ├── ConfigColorPanel.java
│ ├── ConfigFindAllStepsPanel.java
│ ├── ConfigGeneralPanel.java
│ ├── ConfigGeneratorPanel.java
│ ├── ConfigLevelFontPanel.java
│ ├── ConfigProgressPanel.java
│ ├── ConfigSolverPanel.java
│ ├── ConfigStepPanel.java
│ ├── ConfigTrainigPanel.java
│ ├── GeneratorPatternPanel.java
│ ├── HistoryDialog.java
│ ├── MainFrame.java
│ ├── SolutionPanel.java
│ ├── SplitPanel.java
│ └── StatusColorPanel.java
├── util
│ ├── ClipboardMode.java
│ ├── MyBrowserLauncher.java
│ ├── MyFontChooser.java
│ ├── NumbersOnlyDocument.java
│ ├── Options.java
│ ├── SudokuUtil.java
│ └── WriteAsPNGDialog.java
├── progress
│ ├── GenerateSudokuProgressDialog.java
│ ├── SolverProgressDialog.java
│ └── SummaryPanel.java
├── config
│ ├── ConfigDialog.java
│ ├── ConfigTrainingDialog.java
│ └── ConfigTrainigPanel.java
├── solver
│ ├── AlsInSolutionStep.java
│ ├── FindAllSteps.java
│ ├── ProgressChecker.java
│ └── RegressionTester.java
├── generator
│ ├── GenerateSudokuProgressDialog.java
│ ├── GeneratorPatternPanel.java
│ └── SudokuGenerator.java
├── step
│ └── StepConfig.java
├── singles
│ ├── SudokuCell.java
│ ├── SudokuSet.java
│ ├── SudokuSetBase.java
│ ├── SudokuSetShort.java
│ └── SudokuSinglesQueue.java
├── status
│ ├── SudokuStatus.java
│ └── SudokuStatusPanel.java
└── test
└── Main.java
MainFrame类是一个主窗口的类,是Hodoku整个应用程序的主要界面和逻辑的交互中心。在类中,有许多成员变量和方法。以下是其中一些比较核心的方法名称功和实际处理的功能:
但这个类存在这四千多行的代码,经过初步了解和分析我计划使用设计模式对这四千多行的类进行拆分重构。以下是结构改造后的结构: