久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Java實現數獨小游戲

瀏覽:3日期:2022-08-11 18:37:50

本文實例為大家分享了Java實現數獨小游戲的具體代碼,供大家參考,具體內容如下

題目要求:

制作一個數獨游戲。數據游戲拼圖由一個3*3的九宮格組成,每個格式又分成一個小九宮格,共九九八十一個小格子。游戲規則:游戲開始前會有一些格式了寫好了1-9的數,在剩下的格式里填寫1-9的數,直到把所有格式填滿,要求任何一行或一列或者任一個小九宮中沒有相同的數字。拼圖示例如下:

Java實現數獨小游戲

任務要求:

(1) 可以根據在九宮格中初始給出的數字個數設定游戲難度,如初始給出30個數設定為難、35個數設定為中等難度、40個數設定為容易。(2) 對于初始給出的數據要能驗證題目的合法性(即驗證給出數據本身是否符合游戲規則,行、列及小九宮中不能出現重復數字1-9),對玩游戲中填入的數字在提交后要能驗證其正確性(任何一行或一列或者任一個小九宮中沒有相同的數字)。(3) 程序能保存玩家的信息、游戲記錄以及成績(最高分),并能夠在游戲結束時查看玩家排名。

工作流程如下:

Java實現數獨小游戲

該數獨游戲需要連接數據庫,登錄用戶和保存數據記錄,連接數據庫創建表等暫不作顯示。主要數獨游戲部分(除去登錄頁面,注冊頁面,查看排名頁面不做顯示)分為Main(生成數獨,將生成100個數獨保存在文件中,也可以不保存,每次生成數獨都為一次新的數獨不做記錄,效率較差)和Play(數獨顯示頁面,同時包括填寫數獨和判斷數獨是否正確)兩類。

1、Main類

package shudu;import java.awt.BorderLayout;import java.awt.Button;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.GridLayout;import java.awt.SystemColor;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;import java.util.Random;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;public class Main { private int[][] Arry; //得到一個9*9的數獨 private int[][] shudu; //挖空arry數組中的數字 private int[][] answer; //存儲數獨答案 private int[][] game; //最終數獨 private int grade; private int[] row; //每一行的個數 private int[] col; //每一列的個數 private int[] places; //每一個九宮格的個數 private boolean flag=false; //讀取文件名 private String filename=new String('C:UsersliaolilanDesktopshudu.txt'); public static void main(String[] args){ Main mainer=new Main(); // mainer.UI(); } public void UI(){ for(int k=0;k<100;k++){ this.Arry=new int[9][9]; this.shudu=new int[9][9]; this.game=new int[9][9]; this.answer=new int[9][9]; this.row=new int[9]; this.col=new int[9]; this.places=new int[9]; this.grade=grade; flag=false; //初始化數組 for(int i=0;i<9;i++) row[i]=col[i]=places[i]=9; //調試 // this.answer=new int[9][9]; //最終答案存儲再arry中 rand();//先產生15個隨機數加上隨機位置,一定需要隨機生成,不然就會一直都是一個數組 for(int i=0;i<9;i++){ for(int j=0;j<9;j++)System.out.print(Arry[i][j]); System.out.println(); } dfs(Arry,0);//獲得一個數組答案d // diger(grade);//挖空數組 //將100個數獨寫入文件中 try{ String data = ''; File file =new File(filename); //if file doesnt exists, then create it if(!file.exists()){ file.createNewFile(); } //true = append file FileWriter fileWritter = new FileWriter(filename,true); BufferedWriter bufferWritter = new BufferedWriter(fileWritter); bufferWritter.write(k+1+'rn'); for(int i=0;i<9;i++){ data=''; for(int j=0;j<9;j++){ data=data+answer[i][j]+''; } System.out.println(data); bufferWritter.write(data+'rn'); } bufferWritter.close(); System.out.println('Done'); }catch(IOException e){ e.printStackTrace(); } } } //隨機給數 public void rand(){ int t=0; //t=14不隨機性太高,容易產生沒有解的數獨,經過參考資料發現,當t=6的時候,幾乎100%有解 while(t<6){ int x=new Random().nextInt(9); int y=new Random().nextInt(9); int i=new Random().nextInt(9)+1; if(Arry[x][y]==0){ if(istrue(Arry,x,y,i)){ //判斷數是否能填Arry[x][y]=i;t++; } } } } //判斷在arry[x][y]上是否能放num public boolean istrue(int arry[][],int x,int y,int num){ //橫豎是否有num for(int i=0;i<9;i++){ if(arry[x][i]==num||arry[i][y]==num) return false; } for(int i=(x/3)*3;i<(x/3+1)*3;i++) for(int j=(y/3)*3;j<(y/3+1)*3;j++) if(arry[i][j]==num) return false; return true; } //根據前面放的數獲得一個正確的答案,dfs獲取 public void dfs(int arry[][],int n){ if(n<81){ if(flag==true) return; int x=n/9;//x第N個數的橫坐標 int y=n%9;//y第N個數的縱坐標 if(arry[x][y]==0){//若第N個數為0,沒有被填過,則判斷0~9是否能被填for(int i=1;i<10;i++){ if(istrue(arry,x,y,i)){ //第N個數可以填i,填入然后dfs arry[x][y]=i; dfs(arry,n+1); //dfs回溯 arry[x][y]=0; }} } else{dfs(arry,n+1); } } else{ //獲得第一個結果,flag置true!!!!! flag=true; //將獲得的數組放入shudu中然后再挖空 //if(all==false){for(int i=0;i<9;i++) for(int j=0;j<9;j++) shudu[i][j]=answer[i][j]=arry[i][j];System.out.println('###################');for(int i=0;i<9;i++){ for(int j=0;j<9;j++) System.out.print(arry[i][j]); System.out.println(); } } } //為了避免數獨無解,保證數獨有唯一解 //挖空數組,分難易程度,,grade為挖空個數 //是否有一個行、列、九宮格已經為空 boolean emptyrow=false,emptycol=false,emptyplaces=false; //挖空數、關卡 public void diger(int grade,int level){ this.shudu=new int[9][9]; this.game=new int[9][9]; this.answer=new int[9][9]; this.row=new int[9]; this.col=new int[9]; this.places=new int[9]; this.grade=grade; File file=new File(filename); BufferedReader reader = null; try { System.out.println('以行為單位讀取文件內容,一次讀一整行:'); reader = new BufferedReader(new InputStreamReader(new FileInputStream(file),'utf-8')); // reader = new BufferedReader(new FileReader(file)); String tempString = null; int line = 1,k=0; boolean flag=false; // 一次讀入一行,直到讀入null為文件結束 while ((tempString = reader.readLine()) != null&&k<9) { // 顯示行號 System.out.println(' line ' + line + ': ' + tempString); if(tempString.equals(level+'')){ flag=true; continue; } if(flag==true){ for(int i=0;i<9;i++) answer[k][i]=tempString.charAt(i)-48; k++; } line++; } reader.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e1) { } } } for(int i=0;i<9;i++) for(int j=0;j<9;j++) shudu[i][j]=answer[i][j]; int t=grade; while(t>0){ //隨機抽到x,y int x=new Random().nextInt(9); int y=new Random().nextInt(9); //若x,y沒有被挖空則挖空x,y if(shudu[x][y]!=0){row[x]--;col[y]--;places[(y/3)*3+x/3]--;if((row[x]==0&&emptyrow)||(col[y]==0&&emptycol)||(places[(y/3)*3+x/3]==0&&emptyplaces)){ System.out.println(x+' '+y+' 不可以'); continue;}else{shudu[x][y]=0;t=t-1;}if(row[x]==0) emptyrow=true;if(col[y]==0) emptycol=true;if(places[(y/3)*3+x/3]==0) emptyplaces=true; } } //獲得最終游戲數獨 for(int i=0;i<9;i++)for(int j=0;j<9;j++) game[i][j]=shudu[i][j]; } //獲得最終游戲數獨 public int[][] getArr(){ int t=0; for(int i=0;i<9;i++){ for(int j=0;j<9;j++){System.out.print(game[i][j]);if(game[i][j]==0) t++;}System.out.println(); } System.out.println('###################'); System.out.println('挖空數為:'+t); return this.game; } //獲得答案數獨 public int[][] getAnswer(){ for(int i=0;i<9;i++){for(int j=0;j<9;j++) System.out.print(answer[i][j]); System.out.println();} System.out.println('###################'); return this.answer; }}

2、Play類

package shudu;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.GridLayout;import java.awt.SystemColor;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.FocusEvent;import java.awt.event.FocusListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.util.ArrayList;import java.util.List;import java.util.Timer;import java.util.TimerTask;import javax.swing.BorderFactory;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.border.Border;import SQLconnect.UserDao;import shudu.Main;import vo.User;//游戲界面的設計public class Play { //設置全局變量,九宮格 JTextField[][] numberFields=new JTextField[9][9]; //游戲數獨數組 int[][] gamearr=new int[9][9]; //游戲答案數組 int[][] answerarr=new int[9][9]; //灰色 Color green=new Color(93, 200, 138); Color lightGray = new Color(217, 217, 217); Color blue = new Color(102, 183, 255); //挖空數! private int grade=40; //過去的 private int usedgrade=0; //計時器 Timer time; JLabel timeLabel; TimerTask task; //用標簽表示游戲進展 JLabel labelsc=new JLabel(); //創建字體,之后所有的字體為該字體 Font f=new Font('方正仿宋簡體', Font.BOLD, 25); //選擇九宮格中的格子的坐標 int sx=10; int sy=10; //是否已經看過答案 private boolean isanswer; //用戶名 JLabel username=new JLabel(); JLabel usergrade=new JLabel(); private int gamegrade=0;//游戲分數//登錄 login loger=new login(); User user=loger.user; //讀取文件名 private String filename=new String('C:UsersliaolilanDesktopSuDoKu.txt'); //以前游戲數組 private int[][] usedgame=new int[9][9]; //以前的游戲時間 private int usedtim=1; //判斷是不是新用戶 //是否為新用戶 private boolean isnew=true; //保存用戶名存在在第幾行 private int act=-1; //關卡 JLabel levels=new JLabel(); int levs=1; //窗口 private JFrame jf ; public Play(){ //制作游戲界面 System.out.println(user.getUsername()+' '+user.getUserpwd()+' '+user.getUsergrade()); jf = new JFrame(); jf.setTitle('數獨游戲'); jf.setBounds(400, 0, 1100, 1000); jf.setResizable(false);//不允許窗口最大化 jf.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//不執行任何操作;要求程序在已注冊的 WindowListener 對象的 windowClosing 方法中處理該操作 jf.setLocationRelativeTo(null);//居中,不用定位窗口大小 jf.setVisible(true); //打開時,判斷是否上一局游戲jf.addWindowListener(new WindowAdapter() { @Override public void windowOpened(WindowEvent arg0) { //如果是新用戶,保存數組 //保存記錄,讀取文件,讀出文件,在開始游戲的時候讀出 File file=new File(filename); BufferedReader reader = null; try { System.out.println('以行為單位讀取文件內容,一次讀一整行:'); reader = new BufferedReader(new InputStreamReader(new FileInputStream(file),'utf-8')); // reader = new BufferedReader(new FileReader(file)); String tempString = null; int line = 1; // 一次讀入一行,直到讀入null為文件結束 while ((tempString = reader.readLine()) != null) { // 顯示行號 System.out.println(' line ' + line + ': ' + tempString); if(tempString.equals(user.getUsername())){ act=line; isnew=false; } else if(isnew==false){ //關卡 levs=Integer.valueOf(tempString); System.out.println(levs); break; } line++; } reader.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e1) { } } } newGame(grade,levs); } }); //關閉時,保存關卡記錄jf.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent arg0) { BufferedReader reader = null; //保存記錄,讀取文件,讀出文件,在開始游戲的時候讀出 File file=new File(filename); int num=0;//第幾行 boolean flag=false; System.out.println('act:'+act); List list = new ArrayList(); try{ reader = new BufferedReader(new InputStreamReader(new FileInputStream(file),'utf-8'));// reader = new BufferedReader(new FileReader(file)); String str = null; // 一次讀入一行,直到讀入null為文件結束 while ((str = reader.readLine())!= null) { ++num; System.out.println(num+'行:'+str); if(isnew==false&&(num==act||num==act+1)){ System.out.println(str); continue; } list.add(str); } }catch(IOException e){ e.printStackTrace(); } System.out.println('list size:'+list.size()); System.out.println('刪除成功'); //重新寫入 try{ FileWriter fileWritter = new FileWriter(filename); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filename), 'utf-8')); //BufferedWriter bw= new BufferedWriter(fileWritter); for( int i=0;i<list.size();i++ ){ System.out.println('list['+i+']'+list.get(i)); bw.write(list.get(i).toString()); bw.newLine(); } String data = user.getUsername(); //用戶名,保存用戶所通過的關卡? bw.write(data+'rn'); //關卡 bw.write(levs+'rn'); System.out.println('Done'); bw.flush(); bw.close(); }catch(IOException e){e.printStackTrace(); } System.exit(0); } }); //中間數獨部分 JPanel bodyPanel=new JPanel(); bodyPanel.setBackground(lightGray); jf.add(bodyPanel,BorderLayout.CENTER); bodyPanel.setLayout(new GridLayout(9,9,0,0)); //右邊布局,難易程度,計時,重新開始,換一題等選擇按鈕 JPanel rightPanel=new JPanel(); //寬度大小設置 rightPanel.setPreferredSize(new Dimension(200, 789)); jf.add(rightPanel, BorderLayout.EAST); //顯示用戶名和當前分數 username.setText('用戶名: '+user.getUsername()); username.setFont(f); rightPanel.add(username); usergrade.setText('總分數: '+user.getUsergrade()); usergrade.setFont(f); rightPanel.add(usergrade); //顯示當前關卡 levels.setText('關卡: '+levs); levels.setFont(f); rightPanel.add(levels); //難度選擇,默認為容易 JLabel label1=new JLabel('請選擇模式'); label1.setFont(f); rightPanel.add(label1); //容易,中等,難 String[] btnstr={'容易','中等','難'}; for(int i=0;i<3;i++){JButton btn=new JButton(btnstr[i]);btn.setFont(f);btn.setBackground(lightGray);btn.setPreferredSize(new Dimension(120,60));//為難度按鈕加上監聽器btn.addActionListener(new funactionListener());rightPanel.add(btn);//加監聽器 } //功能按鈕 JLabel label2=new JLabel('功能按鈕 '); label2.setFont(f); rightPanel.add(label2); //換一題 JButton changebtn=new JButton('換一題'); changebtn.setFont(f); changebtn.setPreferredSize(new Dimension(120,60)); changebtn.setBackground(lightGray); changebtn.setForeground(Color.black); changebtn.addActionListener(new funactionListener()); rightPanel.add(changebtn); //重做 JButton newbtn=new JButton('重玩'); newbtn.setFont(f); newbtn.setPreferredSize(new Dimension(120,60)); newbtn.setBackground(lightGray); newbtn.setForeground(Color.BLACK); newbtn.addActionListener(new funactionListener()); rightPanel.add(newbtn); //答案 JButton answerbtn=new JButton('答案'); answerbtn.setFont(f); answerbtn.setPreferredSize(new Dimension(120,60)); answerbtn.setBackground(Color.red); answerbtn.setForeground(Color.WHITE); answerbtn.addActionListener(new funactionListener()); rightPanel.add(answerbtn); //計時 JLabel label3=new JLabel(' 計時 '); label3.setFont(f); rightPanel.add(label3); timeLabel=new JLabel('00:00'); timeLabel.setFont(f); rightPanel.add(timeLabel); //放一個游戲進展 rightPanel.add(labelsc); labelsc.setVisible(false); //下面布局 JPanel lastPanel=new JPanel(); jf.add(lastPanel,BorderLayout.SOUTH); lastPanel.setPreferredSize(new Dimension(1333, 100)); lastPanel.setLayout(new GridLayout(0, 10, 0, 0)); //放選擇按鈕 JButton[] setNum=new JButton[10]; for(int i=0;i<10;i++){if(i==9){ setNum[i]=new JButton('清除'); //加清除的監聽器}else{ setNum[i]=new JButton(i+1+''); //加按鈕的監聽器}setNum[i].setFont(f);setNum[i].setForeground(Color.WHITE);setNum[i].setBackground(green);setNum[i].setPreferredSize(new Dimension(90,70));setNum[i].setFocusPainted(false); //加下方按鈕監聽器setNum[i].addActionListener(new buttonaction());lastPanel.add(setNum[i]); } //對中間布局進行控制 //組件邊框 Border centernBorder = BorderFactory.createMatteBorder(1, 1, 1, 1, Color.GRAY); Border rightAndBottomBorder = BorderFactory.createMatteBorder(1, 1, 4, 4, Color.GRAY); Border bottomBorder = BorderFactory.createMatteBorder(1, 1, 4, 1, Color.GRAY); Border rightBorder = BorderFactory.createMatteBorder(1, 1, 1, 4, Color.GRAY); //循環設置組件JTextField,九宮格 //numberFields = new JTextField[9][9]; for (int i = 0; i < 9; i++) {for (int j = 0; j < 9; j++) { //System.out.println(i+j+''); numberFields[i][j] = new JTextField(); //不可編輯 numberFields[i][j].setEditable(false); numberFields[i][j].setFont(new Font('微軟雅黑', Font.BOLD, 35)); numberFields[i][j].setHorizontalAlignment(JTextField.CENTER); numberFields[i][j].setBackground(Color.WHITE); numberFields[i][j].setForeground(Color.BLACK); //加邊框! if (i == 2 && j == 2 || i == 2 && j == 5 || i == 5 && j == 2 || i == 5 && j == 5) { numberFields[i][j].setBorder(rightAndBottomBorder); } else if (j == 2 || j == 5) { numberFields[i][j].setBorder(rightBorder); } else if (i == 2 || i == 5) { numberFields[i][j].setBorder(bottomBorder); } else { numberFields[i][j].setBorder(centernBorder); } //對每個格子加上名稱來標識 numberFields[i][j].setName(Integer.toString(i) + Integer.toString(j)); //對每個格子加上監聽器 numberFields[i][j].addFocusListener(new textfocusaction());; bodyPanel.add(numberFields[i][j]);} } } //開始新游戲 public void newGame(int grade,int level){ isanswer=false; //顯示總分數 usergrade.setText('總分數: '+user.getUsergrade()); //顯示當前關卡 levels.setText('關卡:'+levs+''); Main maker=new Main(); maker.diger(grade, level); gamearr=maker.getArr(); answerarr=maker.getAnswer(); for(int i=0;i<9;i++){for(int j=0;j<9;j++) System.out.print(answerarr[i][j]); System.out.println();} System.out.println('###################'); //先清空九宮格 for(int i=0;i<9;i++) for(int j=0;j<9;j++){ if(gamearr[i][j]!=0){numberFields[i][j].setText(gamearr[i][j]+'');numberFields[i][j].setBackground(lightGray);numberFields[i][j].setForeground(Color.BLACK);//加監聽器! } else{numberFields[i][j].setText('');numberFields[i][j].setBackground(Color.WHITE);numberFields[i][j].setForeground(Color.BLACK); } } //開始計時 startTime(); }//游戲開始計時 public void startTime(){ //游戲開始計時! time = new Timer(); task = new TimerTask() { int count = usedtim; @Override public void run() { timeLabel.setText(gettime(count)); count++; } }; time.schedule(task, 1000L, 1000L); // 開始游戲時自動計時 }//時間重新計時 public void restartTime(){ //刪除time記錄,要使用過才能刪除 time.cancel(); time=new Timer(); timeLabel.setText('00:00'); task = new TimerTask() { int count = 1; @Override public void run() { timeLabel.setText(gettime(count)); count++; } }; time.schedule(task, 1000L, 1000L); } //將時間轉換成分:秒 public String gettime(int count){ String second = null; String minute = null; if (count / 60 < 10) { minute = '0' + (count / 60); } else { minute = '' + (count / 60); } if (count % 60 < 10) { second = ':0' + count % 60; } else { second = ':' + count % 60; } return minute + second; }//重玩該關 public void again(){ //重新設置 for(int i=0;i<9;i++) for(int j=0;j<9;j++){ if(gamearr[i][j]!=0){numberFields[i][j].setText(gamearr[i][j]+'');numberFields[i][j].setBackground(lightGray);//加監聽器! } } }//輸出答案!! public void answer(){ //gamearr中為0的地方放答案!! for(int i=0;i<9;i++) for(int j=0;j<9;j++){ if(gamearr[i][j]==0){numberFields[i][j].setText(answerarr[i][j]+'');numberFields[i][j].setForeground(Color.RED); } } }//清空九宮格!!!重新對獲取新數獨 public void resetfields(){ for(int i=0;i<9;i++) for(int j=0;j<9;j++){ numberFields[i][j].setText(''); numberFields[i][j].setBackground(Color.WHITE); } } //下面為各事件的處理!!! //右邊處理數獨按鈕監聽器(難度類別監聽,換一題,重玩,答案) class funactionListener implements ActionListener{ //難度監聽器String btnstr; @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub btnstr=e.getActionCommand(); if(btnstr.equals('容易')){ grade=40; //若選擇按鈕難度為容易,重新開始游戲 resetfields(); newGame(grade,levs); restartTime(); } else if(btnstr.equals('中等')){ grade=45; //若選擇按鈕難度為中等,重新開始游戲 resetfields(); newGame(grade,levs); restartTime(); } else if(btnstr.equals('難')){ //同上 grade=50; resetfields(); newGame(grade,levs); restartTime(); } else if(btnstr.equals('換一題')){ resetfields(); newGame(grade,levs); restartTime(); } //重新開始計分 else if(btnstr.equals('重玩')){ resetfields(); again(); restartTime(); } //將分歸零 else if(btnstr.equals('答案')){ answer(); time.cancel(); isanswer=true; } } } //九宮格數組的監聽器 class textfocusaction implements FocusListener{ //該各自獲得焦點 @Override public void focusGained(FocusEvent e) { // TODO Auto-generated method stub JTextField jt=(JTextField) e.getSource(); //點擊之前還原顏色 replace(); sameNumber(jt); } //該格子失去焦點,將顏色還原 @Override public void focusLost(FocusEvent e) { // TODO Auto-generated method stub labelsc.setVisible(false); replace(); } } //處理獲得焦點的文本格子 public void sameNumber(JTextField jt){ String name=jt.getName(); System.out.println(name); int x=Integer.parseInt(name.substring(0,1)); int y=Integer.parseInt(name.substring(1)); String number=jt.getText(); //System.out.println(x+' '+y);if(gamearr[x][y]!=0){ sx=10; sy=10;}else{ sx=x; sy=y; System.out.println(sx+' '+sy); //格子為空 if(number.equals('')){ //使該行該列和該小九宮格的顏色置blue,提醒用戶 for(int i=0;i<9;i++){ numberFields[i][sy].setBackground(blue); numberFields[sx][i].setBackground(blue); } for(int i=(sx/3)*3;i<((sx/3)+1)*3;i++) for(int j=(sy/3)*3;j<((sy/3)+1)*3;j++) numberFields[i][j].setBackground(blue); numberFields[sx][sy].setBackground(green); } //格子不為空,使與格子相同的數顯示粉色 else{ for(int i=0;i<9;i++) for(int j=0;j<9;j++) if(numberFields[i][j].getText().equals(number)) numberFields[i][j].setBackground(Color.pink); }} } //使格子顏色還原 public void replace(){ if(sx<10&&sy<10){ for(int i=0;i<9;i++){ if(gamearr[i][sy]!=0) numberFields[i][sy].setBackground(lightGray); else numberFields[i][sy].setBackground(Color.WHITE); if(gamearr[sx][i]!=0) numberFields[sx][i].setBackground(lightGray); else numberFields[sx][i].setBackground(Color.WHITE); } for(int i=(sx/3)*3;i<((sx/3)+1)*3;i++) for(int j=(sy/3)*3;j<((sy/3)+1)*3;j++) if(gamearr[i][j]!=0)numberFields[i][j].setBackground(lightGray); else numberFields[i][j].setBackground(Color.WHITE); for(int i=0;i<9;i++) for(int j=0;j<9;j++) if(numberFields[i][j].getText().equals(numberFields[sx][sy].getText())&&!(i==sx&&j==sy)){ if(gamearr[i][j]!=0) numberFields[i][j].setBackground(lightGray); elsenumberFields[i][j].setBackground(Color.WHITE); } } } //為下方的按鈕增加監聽器 class buttonaction implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub String btnstr; btnstr=e.getActionCommand(); replace(); //如果按鈕為清除,則將格子置空 if(btnstr.equals('清除')&&(sx<10&&sy<10)){ numberFields[sx][sy].setText(''); numberFields[sx][sy].setBackground(Color.white); } //若為其他的,在格子中放入值 else if(sx<10&&sy<10){ numberFields[sx][sy].setText(btnstr); numberFields[sx][sy].setForeground(Color.blue); numberFields[sx][sy].setBackground(Color.white);//判斷值放的是否正確,若不正確,則將該值和相沖突的格子背景顏色置為紅色jugewrong(btnstr); } } } //判斷值放的是否正確,若不正確,則將該值和相沖突的格子背景顏色置為紅色 public void jugewrong(String number){ boolean flag=false; //該值是否正確 //行列是否有相同的 for(int i=0;i<9;i++){ if(i!=sy&&(numberFields[sx][i].getText().equals(number))){ numberFields[sx][i].setBackground(Color.red); flag=true; } if(i!=sx&&(numberFields[i][sy].getText().equals(number))){ numberFields[i][sy].setBackground(Color.red); flag=true; } } //小九宮格內是否有已經存在過這個值 for(int i=(sx/3)*3;i<((sx/3)+1)*3;i++) for(int j=(sy/3)*3;j<((sy/3)+1)*3;j++){ if(!(i==sx&&j==sy)&&(numberFields[i][j].getText().equals(number))){ numberFields[i][j].setBackground(Color.red); flag=true; } } if(flag){ labelsc.setText('已有該數字,請檢查!'); labelsc.setFont(new Font('方正仿宋簡體', Font.BOLD, 21)); labelsc.setForeground(Color.RED); labelsc.setVisible(true); } else{ //挑戰成功后!!! if(isanswer==false&&gamesc()){ //關卡加一 levs++; time.cancel(); String runtime=new String(); runtime=timeLabel.getText(); System.out.println(runtime); //轉換成秒 int tim=((runtime.charAt(0)-48)*10+(runtime.charAt(1))-48)*60+ (runtime.charAt(3)-48)*10+runtime.charAt(4)-48; //計分規則 System.out.println(tim); if(grade==40){ if(tim<=180) gamegrade=80; else if(tim<=600) gamegrade=70; else if(tim<=1800) gamegrade=60; else gamegrade=50; } else if(grade==45){ if(tim<=180) gamegrade=90; else if(tim<=600) gamegrade=85; else if(tim<=1800) gamegrade=75; else gamegrade=65; } else{ if(tim<=180) gamegrade=100; else if(tim<=600) gamegrade=90; else if(tim<=1800) gamegrade=85; else gamegrade=80; } user.setUsergrade(user.getUsergrade()+gamegrade); System.out.println(user.getUsergrade()); UserDao dao=new UserDao(); dao.modifyuser(user); //彈出一個成功的對話框! Object[] options = { '查看排名', '繼續挑戰'}; //查看排名是0,繼續挑戰是1 int x = JOptionPane.showOptionDialog(null, '挑戰成功!分數為'+gamegrade, '挑戰成功!', JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, options, options[0]); System.out.println(x); if(x==0){ rank ranker; ranker=new rank(); //newGame(grade); } else{ newGame(grade,levs); } } } } //判斷點完之后數獨是否成功! public boolean gamesc(){ for(int i=0;i<9;i++) for(int j=0;j<9;j++){ System.out.println(numberFields[i][j].getText()); System.out.println('點擊!'); if(numberFields[i][j].getText().equals('')){ // System.out.println('111失敗!'); return false; } for(int k=0;k<9;k++) if((k!=j&&numberFields[i][k].getText().equals(numberFields[i][j].getText()))||(k!=i&&numberFields[k][j].getText().equals(numberFields[i][j].getText()))){ numberFields[i][j].setBackground(Color.RED); numberFields[i][k].setBackground(Color.red); return false; } for(int m=(i/3)*3;m<(i/3+1)*3;m++) for(int n=(j/3)*3;n<(j/3+1)*3;n++) if(!(m==i&&n==j)&&(numberFields[m][n].getText().equals(numberFields[i][j].getText()))) { return false; } } System.out.println('成功!'); return true; }}

最后生成數獨頁面的效果如下:

Java實現數獨小游戲

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 一级做a毛片 | 免费在线精品视频 | 男女免费视频 | 九九免费观看全部免费视频 | 欧美日韩午夜 | 亚洲午夜在线 | 免费99精品国产自在在线 | 欧美国产精品久久久 | 国产一区二区在线观看视频 | 亚洲精品一区二区三区在线 | 亚洲国产精品成人 | 欧美日韩在线综合 | 久久爱综合网 | 国产午夜精品一区二区三区 | 五月天电影网 | 久久青| 亚洲91精品 | 欧美一区在线视频 | 国产精品亚洲精品日韩已方 | 九九热精| av一区二区在线观看 | 高清国产一区 | 久久影院国产 | 日韩视频中文 | 羞羞视频在线免费 | 国内精品三级 | www嫩草 | 国产免费一区二区三区 | 狠狠躁夜夜躁人人爽天天天天97 | 欧美成人小视频 | 欧美久久视频 | 北条麻妃99精品青青久久主播 | 亚洲精品中文字幕中文字幕 | 久久久久久久久久久久久久av | 久久综合99re88久久爱 | 伊人超碰 | 欧美精品三区 | 一区二区色 | 国产精品久久久久久久久免费高清 | 成人深夜在线 | 一区二区毛片 | 五月激情综合网 | 91精品综合久久久久久五月天 | 国产精品一区二区无线 | 中文字幕在线第一页 | 成人二区 | a成人在线| 欧洲一级毛片 | 国产精品国产三级国产aⅴ中文 | 综合在线视频 | 一区二区三区成人 | 国产伦一区 | 国产在线一区二区 | 欧美视频在线播放 | 欧美性v| 国产精品网站在线观看 | 成人免费福利视频 | 久久噜噜噜精品国产亚洲综合 | av毛片免费 | 99精品电影| 一级毛片免费看 | 中文字幕日韩欧美一区二区三区 | 国产精品久久精品 | 亚洲欧洲一区二区三区 | 亚洲精品国产偷自在线观看 | 亚洲一区二区三区在线播放 | 成人情趣视频 | 亚洲在线观看免费视频 | 中文字幕一二三区 | 精品国产一区二区三区四 | 91亚洲日本aⅴ精品一区二区 | 超碰天堂 | 午夜久久网站 | 草草网| 在线看亚洲 | 欧美日韩国产一区二区三区 | 午夜不卡一区二区 | 成人欧美一区二区三区在线播放 | 视频精品一区二区三区 | 亚洲精品视频网 | 国产激情午夜 | 成人精品免费视频 | 国产精品久久久久久妇女6080 | 日日操夜 | 国产精品欧美一区二区三区不卡 | 精品国产乱码一区二区三区 | 色婷婷综合久久久久中文一区二区 | 日本欧美久久久久 | 国产精品久久久久影院色老大 | 在线91 | 日韩中文字幕一区二区 | 亚洲欧美一区二区三区久久 | 中文字幕日韩一区二区 | 97人人干| 一区二区国产精品 | 亚洲成人精品一区 | 日本黄色毛片 | 日韩成人在线观看视频 | 国产精品久久久久久婷婷天堂 | 国产精品久久久久久久久久久久久久 | 亚洲精品麻豆 | 91免费视频观看 | 久草久草久草 | 大象一区 | 天天影视网色香欲综合网无拦截 | 国内外成人在线视频 | 欧美在线观看禁18 | 综合一区二区三区 | 国产精品视频一二三区 | 亚洲精品在线播放 | 免费毛片视频 | 欧美xxxⅹ性欧美大片 | 欧美日韩电影一区二区三区 | 亚洲精品日韩激情欧美 | 久久久久一区二区 | 久久社区 | 国产精品国色综合久久 | 91久久精品国产亚洲a∨麻豆 | 日韩视频在线观看中文字幕 | 日韩欧美一区二区三区免费观看 | 亚洲欧美一区二区三区在线 | 亚洲一区二区三区在线免费观看 | 自拍小电影 | 亚洲国产成人精品女人 | 玖玖国产精品视频 | 中文字幕亚洲一区 | 国产精品一区在线观看你懂的 | 欧美一区二区另类 | 黄色短视频在线观看 | 欧美日韩中文 | 综合色久| 有码一区 | 在线免费观看黄 | 国产精品伊人影院 | 日韩av在线一区 | 久久狠狠| 伊人久久精品久久亚洲一区 | 成人国产在线观看 | 91日日夜夜 | 欧美成人精品一区二区男人看 | 久草在线免费福利资源 | 欧美中文一区 | 欧美成人手机在线 | 天堂一区二区三区 | 九一视频在线观看 | 国产精品乱码一区二区三区 | 天堂av一区| 国产精品福利在线观看 | 成人免费淫片aa视频免费 | 日韩精品久久 | 蜜桃视频麻豆女神沈芯语免费观看 | 一区二区免费在线视频 | 国产艳妇av视国产精选av一区 | 色综久久 | 日韩中文字幕在线播放 | 在线免费观看黄 | 欧美成人激情视频 | 日韩视频一区 | 欧美一区二区三区视频 | 三级成人在线 | 91影院在线观看 | 欧美中文字幕一区二区 | 亚洲免费一区二区 | 亚洲视频自拍 | 亚洲电影一区二区三区 | 欧美日韩国产中文 | 国产精品视频播放 | 99re视频在线观看 | 色av一区| 黄色一级网站 | 99亚洲 | 在线看片日韩 | 国产一区二区三区在线视频 | 国产最新视频 | 精品欧美乱码久久久久久1区2区 | 天天操天天色天天 | 亚洲一区二区视频在线播放 | 亚洲综合第一页 | 永久精品| 亚洲一区视频在线 | 91精品福利| 久草视频在线看 | 一区二区三区亚洲视频 | www.久草.com | 在线观看www | 黄色一级片免费播放 | 久久久久久国产精品 | 国产一区二区电影 | 免费成人av| 99精品欧美一区二区三区综合在线 | caoporn免费| 久久91精品久久久久久9鸭 | 91精品国产91久久久久久吃药 | 久久久久国产一区二区三区 | 激情小说综合网 | 欧美一区二区三区精品 | 99re热精品视频国产免费 | 亚洲国产高清视频 | 欧美一区二区激情三区 | 久久成人精品 | 精品视频在线播放 | 免费大片在线观看网站 | 国产毛片毛片 | 黑人巨大精品欧美一区免费视频 | 国产精品原创巨作av | 国产精品视频久久久 | 国产日韩欧美一区二区在线观看 | 久久久网 | 久久精品这里热有精品 | 日韩精品一区在线 | 99热首页 | 日韩欧美综合 | 不卡av电影在线观看 | 久久久久免费精品视频 | 欧美第一页 | 日韩中文字幕三区 | 二区视频| 国产精品毛片 | 91亚洲成人 | 嫩草视频免费在线观看 | 欧洲一级毛片 | 性色爽爱 | 亚洲第一区在线 | 国产精品一区二区在线 | 亚洲欧美在线观看 | 国产视频福利一区 | 精品国产乱码久久久久久久软件 | 一区二区三区av | 99热手机在线观看 | 国产一区91 | 国产精品久久免费看 | 精品免费视频 | 国产免费av在线 | 国产高清视频在线观看 | 国产精品欧美一区二区三区 | 精品99免费| 一级毛片一级毛片一级毛片 | av网站在线播放 | 色一色视频 | 杏导航aⅴ福利网站 | 中文字幕日本视频 | 国产妇女乱码一区二区三区 | 一区二区三区在线免费观看 | 国产精品久久久久久一级毛片 | 国产精品中文字幕在线观看 | 国产精品免费一区二区三区四区 | caoporn国产精品免费公开 | 青青草久久 | 婷婷av在线| 久久99操 | 国产欧美日韩综合精品一区二区 | 91看片淫黄大片一级在线观看 | 国产在线拍揄自揄拍视频 | 麻豆精品一区二区 | 中文字幕一区二区三区不卡 | 亚洲男人的天堂在线观看 | 国产三级视频 | 91精品国产欧美一区二区 | 国产老女人精品毛片久久 | 久久精品网| 91成人免费在线视频 | 妞干网国产 | 精品久久久久久国产三级 | 亚洲aⅴ | 性处破╳╳╳高清欧美 | 亚洲欧美在线观看 | 国内精品一区二区三区视频 | 日韩在线中文 | 成人综合社区 | 欧美精品一区二区三区四区五区 | 一a毛片| 国产欧精精久久久久久久 | www婷婷av久久久影片 | av动漫一区二区 | 日本激情视频一区二区三区 | 美女国产精品 | 日韩素人一区二区三区 | 日韩免费一区二区 | 黄色一级免费观看 | 日韩一区二区三区视频 | 成人免费视频网站在线观看 | 免费观看羞羞视频网站 | 久久久久国产一区 | 国产欧美日韩 | 天天干狠狠 | 精品久久网 | 视频一区二区中文字幕日韩 | a成人| 精品国产91亚洲一区二区三区www | 精品一区二区三区三区 | 国偷自产一区二区免费视频 | 男人久久天堂 | 国产.com| 毛片网站免费在线观看 | 久久99精品久久久久子伦 | 精品国产成人 | 狠狠干美女 | 国产色片在线 | 日韩亚洲视频在线观看 | 涩涩导航 | 草草视频免费 | 一区二区三区在线免费观看 | 中文字幕亚洲欧美日韩在线不卡 | 97天堂| 精品国产乱码久久久久久1区2区 | 欧洲精品在线视频 | 日本在线观看视频一区 | 福利视频二区 | 久久国产精品视频一区 | 一区二区日韩精品 | 艳妇荡乳豪妇荡淫 | 中文字幕第一页在线 | 在线一区二区三区做爰视频网站 | 中文字幕国产 | 亚洲精品一区二区三区 | 午夜影院免费观看 | 欧美成人综合在线 | 欧美a区| 久久成人高清 | 天天操网 | 一级黄色录象片 | 粉嫩高清一区二区三区精品视频 | 99这里只有精品视频 | 成人h动漫免费观看网站 | 欧美视频网站 | 9l蝌蚪porny中文自拍 | 九九热视频在线 | 在线亚洲观看 | 国产欧美日韩综合精品 | 欧美日韩亚洲视频 | 91在线精品一区二区 | 999在线观看精品免费不卡网站 | 久久91 | 成人免费淫片aa视频免费 | 日本久久精品一区 | 免费午夜视频 | 欧美男人天堂 | av不卡电影在线观看 | 一区二区三区精品 | 太子妃好紧皇上好爽h | av在线免费观看网站 | 午夜亚洲一区 | 成人tv| 久久99精品国产.久久久久 | 男女午夜网站 | 精品亚洲国产成av人片传媒 | 色吧一区 | 亚洲成人国产精品 | 国产一区二区三区精品久久久 | 亚洲欧美一区二区三区在线 | 中文字幕精品三区 | 日韩中文字幕视频 | www.国产高清| 精品久久久久久久人人人人传媒 | 中文字幕av亚洲精品一部二部 | 成人国产精品一级毛片视频 | 久久精品亚洲一区 | 亚洲欧美激情在线 | 欧美日韩h | 日本欧美久久久久免费播放网 | 中文学幕专区 | 国产精品久久久久久久久久久久久 | av日韩在线播放 | 国产剧情一区二区三区 | 久久久久久久久一区二区 | 九九热精品视频 | 欧美成人一区二免费视频软件 | 欧美日韩一区在线 | 国产精品国产精品国产专区不片 | 91短视频版在线观看免费大全 | 久久久久久九九九九九九 | 欧美日韩电影一区二区三区 | www色婷婷 | 99在线观看| 国产精品无码永久免费888 | 国产精品一区二区在线 | 91视频在线播放视频 | 男女视频免费看 | 久久99深爱久久99精品 | 香蕉久久夜色精品国产使用方法 | 毛片com | 久久综合久久受 | 激情五月婷婷综合 | 成人在线小视频 | 密室大逃脱第六季大神版在线观看 | 一区二区三区四区在线 | 国产精品毛片久久久久久 | 国产偷国产偷精品高清尤物 | 亚洲视频一区在线 | 黄色影片网址 | 国产精品久久久久久亚洲调教 | 另类免费视频 | 午夜成人在线视频 | 黄色短视频在线观看 | 国产精品美女 | 午夜视频福利在线观看 | 午夜99| 国产精品毛片久久久久久久 | 可以免费看黄视频的网站 | 一二三四在线视频观看社区 | 九九亚洲 | 午夜视频大全 | 日韩精品免费在线观看 | aaa在线| 午夜精品久久 | 女同久久另类99精品国产 | 国产真实精品久久二三区 | 亚洲一区二区三区高清 | 亚洲啊v | 精品一区二区三区国产 | 欧美性猛交一区二区三区精品 | 成人国产精品视频 | 国产激情网址 | 五月婷婷天 | 日韩免费在线观看视频 | 北条麻妃国产九九九精品小说 | 日本韩国欧美一区 | 美女在线视频一区二区 | 爱爱视频在线观看 | 亚洲 中文 欧美 日韩 在线观看 | 久久免费精品 | 美女一级a毛片免费观看97 | 亚洲欧美日韩在线 | 天天天天综合 | 一级色网站| 天天噜天天干 | 国产欧美精品区一区二区三区 | 国产精品久久久久久久久久久久久 | 欧美激情在线精品一区二区三区 | 99国产精品视频免费观看一公开 | 狠狠干天天干 | 欧美午夜视频 | 欧美激情精品久久久久 | 日本妇人成熟免费视频 | 综合一区 | 中文字幕av亚洲精品一部二部 | 在线观看国产小视频 | 97人人草 | 性大毛片视频 | 亚洲午夜精品视频 | 国产精品无码专区在线观看 | 欧美一级小视频 | 精品国产乱码久久久久久丨区2区 | 久久免费视频国产 | 国产ts余喵喵和直男多体位 | 在线看国产 | 成人av在线网 | 中文字幕日韩专区 | 久久国产精品一区二区 | 欧美视频网站 | 99热在线精品播放 | 欧美精品一区二区三区四区在线 | 久久精品| 奇米色777欧美一区二区 | 国产欧美精品一区二区色综合朱莉 | 久久国产欧美日韩精品 | 成人午夜免费视频 | 国产一级纯肉体一级毛片 | 国产欧美日韩综合精品一区二区 | 91精品久久久久久久99 | 99精品一区二区三区 | 美女午夜影院 | 青青草久 | 欧美一级欧美三级在线观看 | 成人午夜视频在线观看 | 欧美在线视频一区 | 欧美一区二区三区成人 | 欧美日韩电影一区 | 龙珠z国语291集普通话 | 亚洲成人精品网 | 另类综合在线 | 国产精品久久久久久久一区探花 | 日日干夜夜骑 | 日韩欧美综合在线 | 亚洲国产精品人人爽夜夜爽 | 欧美激情在线免费观看 | 亚洲欧美日韩在线一区 | 久草天堂 | 亚洲国产情侣自拍 | 国产精品欧美日韩在线观看 | 午夜精品一区二区三区免费视频 | 欧美一区在线看 | 日韩免费网站 | av天空 | 日韩成人视屏 | 日本精品国产 | www.福利视频 | 欧美日韩在线一区二区三区 | 国产成人av一区二区三区 | 亚洲视频免费 | 国产一区二区三区免费看 | 后进极品白嫩翘臀在线视频 | 激情欧美一区二区三区中文字幕 | 国产高潮呻吟久久渣男片 | 久久精品小视频 | 国产精品福利一区 | 日韩精品视频在线观看一区二区 | 成人av在线播放 | 成人一区二区三区久久精品嫩草 | 日韩成人在线观看 | 午夜在线| 九九九九九九精品任你躁 | 亚洲一区二区三区视频免费观看 | 国产免费一区二区 | 国产91综合一区在线观看 | 日韩一区二区在线观看 | 四虎影院在线 | 久久国产精品一区 | 日本一区二区精品视频 | 欧美精品欧美精品系列 | 日韩久久精品电影 | 久久精彩| 国产成人久久精品一区二区三区 | 成人久久18| 色婷婷av一区二区三区软件 | 久久人操 | 亚洲 欧美日韩 国产 中文 | 最近的中文字幕在线看视频 | 在线日韩欧美 | 亚洲一区免费观看 | 亚洲成人av| 国产精品二区三区 | 国产一区二区三区四区在线观看 | 蜜桃免费视频 | 日韩在线不卡 | 不卡的毛片 | 久色91| 国产精品久久久久久久久免费 | 在线视频中文字幕 | 黄色国产 | 求av网站 | 四虎网址 | 日韩一区二区在线免费观看 | 91精品久久久久久久久久入口 | www.国产一区 | 日韩精品一区在线 | 国产精品伦一区二区三级视频 | 九色91视频 | 中文一区 | 精品久久中文 | 日韩专区视频 | 中文字幕天堂在线 | 三级视频在线 | 97高清国语自产拍 | 欧美亚洲另类丝袜综合网动图 | 中文字幕 国产精品 | 国产精品毛片久久久久久 | 九九只有精品 | 日韩电影免费在线观看中文字幕 | 国产欧美精品一区二区 | 精品久久久久久久久久久久 | 国产在线欧美 | 91精品久久久久久久久久入口 | 亚洲视频在线观看一区二区三区 | 97视频久久 | 中文字幕av亚洲精品一部二部 | 日韩一区二区精品 | 有码在线 | 亚洲综合中文 | 国产精品一区二区三区在线播放 | 精品一区二区三区免费 | 国产九九av | 青青久久久 | 久久久精品 | 精品久久久久久一区二区 | 欧美污污 | 97伦理在线 | 国产午夜久久 | 精品久久久久久久久久久久久久久久久久 | 国产一区二区三区视频在线观看 | 亚洲成人第一区 | 日韩在线亚洲 | 日韩第一区 | 国产免费拔擦拔擦8x高清在线人 | 中文字幕视频二区 | 综合网激情 | 欧美一区二区三区视频 | 欧美a在线 | 中文字幕一区二区三区在线视频 | 国产午夜精品久久久久久久 | 久久va | 亚洲欧美在线观看 | 国产精品一区一区三区 | 91亚洲一区| 成人在线视频免费观看 | 精品国产一区二区三区久久 | 日本久久网 | 天天操网 | 精品国产一区二区三区久久久蜜月 | 国产成人精品999在线观看 | 久久亚洲天堂 | 国产精品18 | 久久久蜜桃 | 国产精品亚洲a | 日本免费一区二区在线观看 | 日韩色在线 | 亚洲国产二区三区 | 国产69久久 | 欧美精品三区 | 看黄网址 | 伊人激情av一区二区三区 | 欧美成人一区二区三区片免费 | 黄色免费高清视频 | eeuss国产一区二区三区四区 | 黄色高清视频在线观看 | 国产丝袜视频 | 亚洲精品一二三 | 夜夜夜久久久 | 夜夜爽99久久国产综合精品女不卡 | 久久青青视频 | 免费观看一级特黄欧美大片 | 日韩资源在线 | 国产日韩欧美精品一区二区 | 日韩av免费 | 日韩一区精品 |