简单实现java数独游戏-创新互联

本文实例为大家分享了java数独游戏的具体代码,供大家参考,具体内容如下

创新互联2013年至今,是专业互联网技术服务公司,拥有项目成都网站设计、成都做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元崇阳做网站,已为上家服务,为崇阳各地企业和个人服务,联系电话:13518219792

打算把javaFx需要的组件装好以后直接用javaFx的,但似乎eclipse的版本不对,安装了也不能用...
数独代码是在之前寒假受命写的,学了一个月java的成果,现在看来有些不足但毕竟是第一个程序,就直接放上来,数独终盘的实现直接用了暴力,时间复杂度有点高,懒得改了直接放代码


终盘实现:


import java.util.Random; 
 
public class SudokuPuzzleGenerator { 
 private Random random = new Random(); 
  
 private static final int MAX_CALL_RANDOM_ARRAY_TIMES = 220; 
  
 private int currentTimes = 0; 
 
 public int[][] generatePuzzleMatrix() { 
 
  int[][] randomMatrix = new int[9][9]; 
 
  for (int row = 0; row < 9; row++) { 
   if (row == 0) { 
    currentTimes = 0; 
    randomMatrix[row] = buildRandomArray(); 
 
   } else { 
    int[] tempRandomArray = buildRandomArray(); 
 
    for (int col = 0; col < 9; col++) { 
     if (currentTimes < MAX_CALL_RANDOM_ARRAY_TIMES) { 
      if (!isCandidateNmbFound(randomMatrix, tempRandomArray, row, col)) { 
        
       resetValuesInRowToZero(randomMatrix,row); 
       row -= 1; 
       col = 8; 
       tempRandomArray = buildRandomArray(); 
      } 
     } else {  
      row = -1; 
      col = 8; 
      resetValuesToZeros(randomMatrix); 
      currentTimes = 0; 
     } 
    } 
   } 
  } 
  return randomMatrix; 
 } 
  
 private void resetValuesInRowToZero(int[][] matrix, int row) 
 { 
  for (int j = 0; j < 9; j++) { 
   matrix[row][j] = 0; 
  } 
   
 } 
 
 private void resetValuesToZeros(int[][] matrix) { 
  for (int row = 0; row < 9; row++) { 
   for (int col = 0; col < 9; col++) { 
    matrix[row][col] = 0; 
   } 
  } 
 } 
 
 private boolean isCandidateNmbFound(int[][] randomMatrix, int[] randomArray, int row, int col) { 
  for (int i = 0; i < 9; i++) { 
   randomMatrix[row][col] = randomArray[i]; 
   if (noConflict(randomMatrix, row, col)) { 
    return true; 
   } 
  } 
  return false; 
 } 
 
 private boolean noConflict(int[][] candidateMatrix, int row, int col) { 
  return noConflictInRow(candidateMatrix, row, col)&&noConflictInColumn(candidateMatrix, row, col) && noConflictInBlock(candidateMatrix, row, col); 
 } 
 
 private boolean noConflictInRow(int[][] candidateMatrix, int row, int col) { 
   
  int currentValue = candidateMatrix[row][col]; 
 
  for (int colNum = 0; colNum < col; colNum++) { 
   if (currentValue == candidateMatrix[row][colNum]) { 
    return false; 
   } 
  } 
 
  return true; 
 } 
 
 private boolean noConflictInColumn(int[][] candidateMatrix, int row, int col) { 
 
  int currentValue = candidateMatrix[row][col]; 
 
  for (int rowNum = 0; rowNum < row; rowNum++) { 
   if (currentValue == candidateMatrix[rowNum][col]) { 
    return false; 
   } 
  } 
 
  return true; 
 } 
 
 private boolean noConflictInBlock(int[][] candidateMatrix, int row, int col) { 
 
  int baseRow = row / 3 * 3; 
  int baseCol = col / 3 * 3; 
 
  for (int rowNum = 0; rowNum < 8; rowNum++) { 
   if (candidateMatrix[baseRow + rowNum / 3][baseCol + rowNum % 3] == 0) { 
    continue; 
   } 
   for (int colNum = rowNum + 1; colNum < 9; colNum++) { 
    if (candidateMatrix[baseRow + rowNum / 3][baseCol + rowNum % 3] == candidateMatrix[baseRow 
      + colNum / 3][baseCol + colNum % 3]) { 
     return false; 
    } 
   } 
  } 
  return true; 
 
 }  
 private int[] buildRandomArray() { 
  currentTimes++; 
  int[] array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 
  int randomInt = 0;  
  for (int i = 0; i < 20; i++) { 
   randomInt = random.nextInt(8) + 1; 
   int temp = array[0]; 
   array[0] = array[randomInt]; 
   array[randomInt] = temp; 
  } 
 
  return array; 
 } 
  
 public int getCurrentTimes() { 
  return currentTimes; 
 } 
  
 public void setCurrentTimes(int currentTimes) { 
  this.currentTimes = currentTimes; 
 } 
  
} 

分享标题:简单实现java数独游戏-创新互联
网页URL:https://www.cdcxhl.com/article28/hcpcp.html

成都网站建设公司_创新互联,为您提供用户体验云服务器品牌网站设计面包屑导航搜索引擎优化标签优化

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

搜索引擎优化