자바 게임 생 성

3995 단어 자바


/**
 *     
 */
public class ShuDu {
	/**         */
	static int[][] n = new int[9][9];

	/**           ,            */
	static int[] num = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

	public static void main(String[] args) {
		//     
		for (int i = 0; i < 9; i++) {
			//          
			int time = 0;
			//     
			for (int j = 0; j < 9; j++) {
				//     
				n[i][j] = generateNum(time);
				//       0,     ,    
				//         :       ,        ,             
				if (n[i][j] == 0) {
					//      ,     
					if (j > 0) {
						j -= 2;
						continue;
					} else {//     ,            
						i--;
						j = 8;
						continue;
					}
				}
				//     
				if (isCorret(i, j)) {
					//    time,         
					time = 0;
				} else { //     
					//     1
					time++;
					//        
					j--;
				}
			}
		}
		//     
		for (int i = 0; i < 9; i++) {
			for (int j = 0; j < 9; j++) {
				System.out.print(n[i][j] + "  ");
			}
			System.out.println();
		}
	}

	/**
	 *      、  3X3        
	 * 
	 * @param row
	 *              
	 * @param col
	 *              
	 * @return true      
	 */
	public static boolean isCorret(int row, int col) {
		return (checkRow(row) & checkLine(col) & checkNine(row, col));
	}

	/**
	 *          
	 * 
	 * @param row
	 *                 
	 * @return true      
	 */
	public static boolean checkRow(int row) {
		for (int j = 0; j < 8; j++) {
			if (n[row][j] == 0) {
				continue;
			}
			for (int k = j + 1; k < 9; k++) {
				if (n[row][j] == n[row][k]) {
					return false;
				}
			}
		}
		return true;
	}

	/**
	 *          
	 * 
	 * @param col
	 *                 
	 * @return true      
	 */
	public static boolean checkLine(int col) {
		for (int j = 0; j < 8; j++) {
			if (n[j][col] == 0) {
				continue;
			}
			for (int k = j + 1; k < 9; k++) {
				if (n[j][col] == n[k][col]) {
					return false;
				}
			}
		}
		return true;
	}

	/**
	 *   3X3        
	 * 
	 * @param row
	 *                 
	 * @param col
	 *                 
	 * @return true      
	 */
	public static boolean checkNine(int row, int col) {
		//         
		int j = row / 3 * 3;
		int k = col / 3 * 3;
		//     
		for (int i = 0; i < 8; i++) {
			if (n[j + i / 3][k + i % 3] == 0) {
				continue;
			}
			for (int m = i + 1; m < 9; m++) {
				if (n[j + i / 3][k + i % 3] == n[j + m / 3][k + m % 3]) {
					return false;
				}
			}
		}
		return true;
	}

	/**
	 *   1-9          :            8-time     ,  time   ,              
	 *   :              ,             ,    ,        ,                 ,       
	 *            
	 * 
	 * @param time
	 *                 ,0       
	 * @return
	 */
	public static int generateNum(int time) {
		//       ,          
		if (time == 0) {
			for (int i = 0; i < 9; i++) {
				num[i] = i + 1;
			}
		}
		//  10   ,         ,   0,        
		if (time == 9) {
			return 0;
		}
		//        
		//       ,         ,   num              
		int ranNum = (int) (Math.random() * (9 - time));
		//            time   ,
		int temp = num[8 - time];
		num[8 - time] = num[ranNum];
		num[ranNum] = temp;
		//     
		return num[8 - time];
	}
}


좋은 웹페이지 즐겨찾기