国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Java > 正文

簡單實現(xiàn)java數(shù)獨游戲

2024-07-13 10:14:53
字體:
供稿:網(wǎng)友

本文實例為大家分享了java數(shù)獨游戲的具體代碼,供大家參考,具體內(nèi)容如下

打算把javaFx需要的組件裝好以后直接用javaFx的,但似乎eclipse的版本不對,安裝了也不能用...
數(shù)獨代碼是在之前寒假受命寫的,學(xué)了一個月java的成果,現(xiàn)在看來有些不足但畢竟是第一個程序,就直接放上來,數(shù)獨終盤的實現(xiàn)直接用了暴力,時間復(fù)雜度有點高,懶得改了直接放代碼

終盤實現(xiàn):

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;  }   } 

界面及判斷:
用swing寫的

import javax.swing.*;  import java.awt.*; import java.awt.event.*; import java.util.Random;  public class ShuD extends JFrame{  private static final long serialVersionUID = 5952689219411916553L; //序列化字段  private static JTextField a[][] = new JTextField[9][9];  //存儲文本框中的數(shù)字  static int ans[][] = new int[9][9];  //存儲輸入后的兩位數(shù)組  SudokuPuzzleGenerator example = new SudokuPuzzleGenerator();  public int right[][] = example.generatePuzzleMatrix();  public int rightans[][];  private int[][] Wk(int a[][]){    //挖空   Random r = new Random();   int a1, a2;   a1 = r.nextInt(9);   a2 = r.nextInt(9);   for(int i = 0; i < 100; i++)   {    a[a1][a2] = 0;    a1 = r.nextInt(9);    a2 = r.nextInt(9);   }   return a;  }  public ShuD(){   Container c = getContentPane();   c.setLayout(new BorderLayout(2, 1));  //邊框布局   JMenuItem jmiOk = new JMenuItem("提交");  //定義菜單   JMenuItem jmiExplain = new JMenuItem("詳情");   JMenuItem jmiMessage = new JMenuItem("信息");      JPanel panel = new JPanel();  //定義一個容器   panel.add(jmiOk);     //將菜單在容器內(nèi)顯示   panel.add(jmiExplain);   panel.add(jmiMessage);   JPanel p1 = new JPanel(new GridLayout(9, 9, 5, 5));  //定義9行9列的網(wǎng)格布局   add(panel,BorderLayout.NORTH);   //將菜單放置在北面   add(p1,BorderLayout.CENTER);   //將數(shù)字放置在正中間   rightans = Wk(right);   for(int k = 0;k<9; k ++)   {    for(int n=0;n<9;n++)    {     if(rightans[k][n] != 0)     {      a[k][n] = new JTextField("" + rightans[k][n]);      a[k][n].setHorizontalAlignment(JTextField.CENTER);//將數(shù)字水平居中      a[k][n].setEditable(false);   //只可顯示不可修改      p1.add(a[k][n]);     //添加文本框     }     else     {      a[k][n] = new JTextField();       a[k][n].setHorizontalAlignment(JTextField.CENTER);      p1.add(a[k][n]);     }    }   }   add(p1);   //將數(shù)字面板顯示在容器里   jmiOk.addActionListener(new ActionListener(){//匿名創(chuàng)建事件監(jiān)聽器    public void actionPerformed(ActionEvent e)    {     if(gettext() == 1)     {      if(judge() == true)      {       JOptionPane.showMessageDialog(null, "Your answer is right!","Result",JOptionPane.INFORMATION_MESSAGE);      }      else      {       JOptionPane.showMessageDialog(null, "Your answer is wrong!","Result",JOptionPane.INFORMATION_MESSAGE);      }     }    }   });   explainListenerClass listener2 = new explainListenerClass();   jmiExplain.addActionListener(listener2);   messageListenerClass listener3 = new messageListenerClass();   jmiMessage.addActionListener(listener3);  }    static int gettext()   //獲取文本框的文字  {   int i,j;   for(i = 0; i < 9; i++)   {    for(j = 0; j < 9 ; j ++)    {     ans[i][j] = 0;    }   }   for(int k = 0;k < 9; k++)   {    for(int n = 0;n < 9; n++)    {     try   //異常處理     {      ans[k][n] = Integer.parseInt(a[k][n].getText());       //將答案類型轉(zhuǎn)換之后傳給ans     }     catch(NumberFormatException nfe)     {      JOptionPane.showMessageDialog(null,"數(shù)據(jù)中包括非數(shù)字,請重新輸入");      return 0;     }    }   }   return 1;  }  public static boolean judge()   //判斷輸入的答案是否正確  {   int i,j,k;   int [][]answer = ans;         for(i = 0; i < 9; i ++)   {    if(judge9(answer[i]) == false)  //判斷每列是否有重復(fù)數(shù)字     return false;   }   for(j = 0; j < 9; j ++)     //判斷每行是否有重復(fù)數(shù)字   {        int[] newAnswerColumn = new int[9];    for(i = 0; i < 9; i ++)    {     newAnswerColumn[i] = answer[i][j];    }    if(judge9(newAnswerColumn) == false)     return false;   }   for(i = 0; i < 3; i ++)   //判斷每個小九宮格內(nèi)是否有重復(fù)數(shù)字   {    for(j = 0; j < 3; j ++)    {     k = 0;     int[] newAnswer = new int[9];     for(int m = i * 3; m < i * 3 + 3; m ++)     {      for(int n = j * 3; n < j * 3 + 3; n ++)      {       newAnswer[k] = answer[m][n];       k++;      }     }     if(judge9(newAnswer) == false)     {      return false;     }      }   }   return true;  }  public static boolean judge9(int[] answer)  {   int i,j;   for(i = 0; i < 9; i ++)   {    for(j = 0; j < 9; j ++)    {     if(i == j)      continue;     if(answer[i] == answer[j])  //如果有重復(fù)的數(shù)字,返回false     {      return false;     }    }   }   return true;  //沒有重復(fù)數(shù)字,返回true  }    public static void main(String[] args) {   JFrame frame = new ShuD();   frame.setTitle("SuDoku");   frame.setSize(600,900);   frame.setLocationRelativeTo(null);    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   frame.setVisible(true);  } } class explainListenerClass implements ActionListener{  //事件監(jiān)聽器  public void actionPerformed(ActionEvent e){   JOptionPane.showMessageDialog(null, "填入數(shù)字保證每行每列及每個小的九宮格內(nèi)數(shù)字無重復(fù)","Explain",JOptionPane.INFORMATION_MESSAGE);  } } class messageListenerClass implements ActionListener{  public void actionPerformed(ActionEvent e){   JOptionPane.showMessageDialog(null, "made by wyx","Message",JOptionPane.INFORMATION_MESSAGE);  } } 

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到JAVA教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 安西县| 婺源县| 富锦市| 江口县| 榆树市| 邯郸县| 拉孜县| 嘉鱼县| 万荣县| 太保市| 丹东市| 图们市| 沐川县| 白水县| 岗巴县| 称多县| 小金县| 监利县| 浦城县| 游戏| 芜湖市| 赤城县| 巴马| 乐陵市| 宣汉县| 皋兰县| 乌兰县| 霍城县| 武川县| 湟源县| 兰溪市| 横峰县| 徐州市| 诸暨市| 依兰县| 朔州市| 沈丘县| 皮山县| 池州市| 福贡县| 阜新|