gpt4 book ai didi

java - 这种 MVC 方法是编写数独游戏的好方法吗?

转载 作者:行者123 更新时间:2023-11-29 04:53:12 25 4
gpt4 key购买 nike

我正在构建一个数独游戏。我来这里是为了寻求帮助,因为我完全被困在我的代码中了。我不是要你完成我的代码,我知道那不是你的工作。只需提示下一步该怎么做就很棒!

我使用 MVC 和 Swing Components for GUI 来简化代码。我对每个领域和方法进行了划分,以便了解下一步该做什么,但我很困惑。我特别难以理解如何执行以下方法:

  • 初始化网格

  • 选择游戏难度

  • 移动

  • 取消移动

模型

public class GameSudokuModel {



// states -- fields
Scanner userInput = new Scanner (System.in); // accept user input

// int levelDifficulty = 0; // level of difficulties

int [] gridSize ; // Sudoku 9x9 == 81 cells -- used to initialize grid or solve puzzle --

int [] subGridSize ; // a sub-grid = 9 cells

int gameMove = 0; // calculate the total number of moves per game // ++makeMove and --cancelMove
int [] gameCell = {1, 2, 3, 4, 5, 6, 7, 8, 9}; // a cell contain a list of choices numbers 1-9

int currentGameTime = 0; // calculates the total time to complete a puzzle

String currentPlayerName = userInput.nextLine(); // player name
// end of fields





//behaviors -- methods

/******************************************************
*
* Method calculateGameTime (initialiserGrille)
*
*
* Calculates time
*
* The stopwatch starts when the player makes ​​his first move
*
*
*
******************************************************/



public class calculateGameTime{

}





/******************************************************
*
* Method initializeGrid (initialiserGrille)
*
*
* Used to initialize a grid
*
* Reset the grid ( back to the original Sudoku grid ) using the list of moves .
*
*
*
*
*
******************************************************/


public class initializeGrid {

}





/******************************************************
*
* Method levelDifficulty
*
*
* Established the parameters of level of difficulty
*
*
* @param beginner
* @param expert
* @return
******************************************************/


public int levelDifficulty (int beginner, int expert){

while(true)
{
int levelDifficulty = 0;

levelDifficulty= userInput.nextInt();
System.out.println (" ");

if(levelDifficulty < beginner || levelDifficulty> expert){
System.out.print (" You must choose 1, 2 or 3." + "Please try again : ");
System.out.println (" ");


}

else

return levelDifficulty;

}


}




/****************************************************
* Method chooseGameDifficulty (chosisirNiveauDifficulte)
*
* The method makes possible to choose the level of complexity of a grid
*
* (1) beginner: the player starts the game with a grid made ​​up to 75% (81 * 0.75)
*
* (2) Intermediate : the player starts the game with a grid made ​​up to 50% (81 * 0.50)
*
* (3) Expert : the player starts the game with a grid made ​​up to 25% (81 * 0.25)
*
* Numbers are set randomly on the grid every new game
*
* @param beginner
* @param intermediate
* @param expert
******************************************************/


public void chooseGameDifficulty(int beginner, int intermediate, int expert){

boolean entreeValide;
int levelDifficulty;
String reponse;
levelDifficulty= levelDifficulty(beginner,expert); // call function levelDifficulty()

if(levelDifficulty==beginner)
//get easy level grid (getter)

//set easy level grid (setter)


if(levelDifficulty==intermediate)
//get intermediate level grid (getter)

//set intermediate level grid (setter)


if(levelDifficulty==expert)
//get expert level grid (getter)

//set easy expert grid (setter)
}



/****************************************************
* Method solvePuzzle (resoudrePuzzle)
*
* This method makes possible to solve the entire grid meaning all the 81 cells
*
******************************************************/


public class solvePuzzle {
}




/****************************************************
* Method makeMove (fairePlacement)
*
* Save a record of the player's actions on the grid.
*
*
*
* (1) make move on the grid ;
* (2) save moves in an array list
*
******************************************************/



public class makeMove {




//choose a cell , enter a number on the cell and confirm the selection



// adds move to the array list
int makeMove = gameMove++;
}




/****************************************************
* Method cancelMove (annulerPlacement)
*
*
*
* (1) retrieve the last instance in the arraylist (using the remove method and the size method to determine the number of elements )
* (2) cancel the move in the grid.
*
******************************************************/


public class cancelMove {


//choose a cell , remove the number on the cell and confirm the cancellation



//substracts move from array list
int cancelMove = gameMove--;

}






}

最佳答案

initializeGridchooseGameDifficulty 并不是该模型的真正特征。该模型维护数据的当前状态,并使用规则来管理它。

从技术上讲,这些功能应该是某种工厂的功能,给定困难级别将返回模型的实例

public class SudokuFactory { 
public enum Difficulty {
HARD,
MODERATE,
EASY
}

public SudokuModel createModel(Difficulty difficult) {
// Make a new model based on the rules for your difficulty
// settings
}
}

然后该模型将只包含管理它的信息和功能

你还应该尽可能避免 static ,它永远不应该用作跨类通信机制,如果你需要共享数据,你应该传递它。 static 只会让整个事情更难管理和调试

View 将从用户那里获取信息(例如难度级别), Controller 将使用这些信息来构建新模型。然后该模型将被传递给一个新的 Controller ,该 Controller 将生成一个新 View ,该 View 应显示模型的当前状态。

然后 Controller 将响应 View 中的更改,更新模型, Controller 将响应模型中的更改并更新 View 。

您还应该更喜欢使用 interfaces over implementation

因此,根据我对数独的(相当可悲的)理解,您可以使用像...这样简单的模型

public interface SudokuModel {
public void setValueAt(int value, int row, int col) throws IllegalArgumentException;
public int getValueAt(int row, int col);
}

现在,就我个人而言,我有一个具有两个缓冲区的实现,一个代表实际游戏/解决方案,另一个代表玩家数据(根据难度级别预填充),现在您可以拥有单个缓冲区,但你会不断扫描网格以查看新值是否有效,我只是太懒了;)

关于java - 这种 MVC 方法是编写数独游戏的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34669335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com