国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

Java實現(xiàn)數(shù)獨小游戲

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

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

題目要求:

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

Java實現(xiàn)數(shù)獨小游戲

任務要求:

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

工作流程如下:

Java實現(xiàn)數(shù)獨小游戲

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

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的數(shù)獨 private int[][] shudu; //挖空arry數(shù)組中的數(shù)字 private int[][] answer; //存儲數(shù)獨答案 private int[][] game; //最終數(shù)獨 private int grade; private int[] row; //每一行的個數(shù) private int[] col; //每一列的個數(shù) private int[] places; //每一個九宮格的個數(shù) 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; //初始化數(shù)組 for(int i=0;i<9;i++) row[i]=col[i]=places[i]=9; //調(diào)試 // this.answer=new int[9][9]; //最終答案存儲再arry中 rand();//先產(chǎn)生15個隨機數(shù)加上隨機位置,一定需要隨機生成,不然就會一直都是一個數(shù)組 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);//獲得一個數(shù)組答案d // diger(grade);//挖空數(shù)組 //將100個數(shù)獨寫入文件中 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(); } } } //隨機給數(shù) public void rand(){ int t=0; //t=14不隨機性太高,容易產(chǎn)生沒有解的數(shù)獨,經(jīng)過參考資料發(fā)現(xiàn),當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)){ //判斷數(shù)是否能填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; } //根據(jù)前面放的數(shù)獲得一個正確的答案,dfs獲取 public void dfs(int arry[][],int n){ if(n<81){ if(flag==true) return; int x=n/9;//x第N個數(shù)的橫坐標 int y=n%9;//y第N個數(shù)的縱坐標 if(arry[x][y]==0){//若第N個數(shù)為0,沒有被填過,則判斷0~9是否能被填for(int i=1;i<10;i++){ if(istrue(arry,x,y,i)){ //第N個數(shù)可以填i,填入然后dfs arry[x][y]=i; dfs(arry,n+1); //dfs回溯 arry[x][y]=0; }} } else{dfs(arry,n+1); } } else{ //獲得第一個結(jié)果,flag置true!!!!! flag=true; //將獲得的數(shù)組放入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(); } } } //為了避免數(shù)獨無解,保證數(shù)獨有唯一解 //挖空數(shù)組,分難易程度,,grade為挖空個數(shù) //是否有一個行、列、九宮格已經(jīng)為空 boolean emptyrow=false,emptycol=false,emptyplaces=false; //挖空數(shù)、關(guān)卡 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('以行為單位讀取文件內(nèi)容,一次讀一整行:'); 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為文件結(jié)束 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; } } //獲得最終游戲數(shù)獨 for(int i=0;i<9;i++)for(int j=0;j<9;j++) game[i][j]=shudu[i][j]; } //獲得最終游戲數(shù)獨 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('挖空數(shù)為:'+t); return this.game; } //獲得答案數(shù)獨 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]; //游戲數(shù)獨數(shù)組 int[][] gamearr=new int[9][9]; //游戲答案數(shù)組 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); //挖空數(shù)! private int grade=40; //過去的 private int usedgrade=0; //計時器 Timer time; JLabel timeLabel; TimerTask task; //用標簽表示游戲進展 JLabel labelsc=new JLabel(); //創(chuàng)建字體,之后所有的字體為該字體 Font f=new Font('方正仿宋簡體', Font.BOLD, 25); //選擇九宮格中的格子的坐標 int sx=10; int sy=10; //是否已經(jīng)看過答案 private boolean isanswer; //用戶名 JLabel username=new JLabel(); JLabel usergrade=new JLabel(); private int gamegrade=0;//游戲分數(shù)//登錄 login loger=new login(); User user=loger.user; //讀取文件名 private String filename=new String('C:UsersliaolilanDesktopSuDoKu.txt'); //以前游戲數(shù)組 private int[][] usedgame=new int[9][9]; //以前的游戲時間 private int usedtim=1; //判斷是不是新用戶 //是否為新用戶 private boolean isnew=true; //保存用戶名存在在第幾行 private int act=-1; //關(guān)卡 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('數(shù)獨游戲'); jf.setBounds(400, 0, 1100, 1000); jf.setResizable(false);//不允許窗口最大化 jf.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//不執(zhí)行任何操作;要求程序在已注冊的 WindowListener 對象的 windowClosing 方法中處理該操作 jf.setLocationRelativeTo(null);//居中,不用定位窗口大小 jf.setVisible(true); //打開時,判斷是否上一局游戲jf.addWindowListener(new WindowAdapter() { @Override public void windowOpened(WindowEvent arg0) { //如果是新用戶,保存數(shù)組 //保存記錄,讀取文件,讀出文件,在開始游戲的時候讀出 File file=new File(filename); BufferedReader reader = null; try { System.out.println('以行為單位讀取文件內(nèi)容,一次讀一整行:'); reader = new BufferedReader(new InputStreamReader(new FileInputStream(file),'utf-8')); // reader = new BufferedReader(new FileReader(file)); String tempString = null; int line = 1; // 一次讀入一行,直到讀入null為文件結(jié)束 while ((tempString = reader.readLine()) != null) { // 顯示行號 System.out.println(' line ' + line + ': ' + tempString); if(tempString.equals(user.getUsername())){ act=line; isnew=false; } else if(isnew==false){ //關(guān)卡 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); } }); //關(guān)閉時,保存關(guān)卡記錄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為文件結(jié)束 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(); //用戶名,保存用戶所通過的關(guān)卡? bw.write(data+'rn'); //關(guān)卡 bw.write(levs+'rn'); System.out.println('Done'); bw.flush(); bw.close(); }catch(IOException e){e.printStackTrace(); } System.exit(0); } }); //中間數(shù)獨部分 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); //顯示用戶名和當前分數(shù) username.setText('用戶名: '+user.getUsername()); username.setFont(f); rightPanel.add(username); usergrade.setText('總分數(shù): '+user.getUsergrade()); usergrade.setFont(f); rightPanel.add(usergrade); //顯示當前關(guān)卡 levels.setText('關(guān)卡: '+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));//為難度按鈕加上監(jiān)聽器btn.addActionListener(new funactionListener());rightPanel.add(btn);//加監(jiān)聽器 } //功能按鈕 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('清除'); //加清除的監(jiān)聽器}else{ setNum[i]=new JButton(i+1+''); //加按鈕的監(jiān)聽器}setNum[i].setFont(f);setNum[i].setForeground(Color.WHITE);setNum[i].setBackground(green);setNum[i].setPreferredSize(new Dimension(90,70));setNum[i].setFocusPainted(false); //加下方按鈕監(jiān)聽器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); //循環(huán)設置組件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)); //對每個格子加上監(jiān)聽器 numberFields[i][j].addFocusListener(new textfocusaction());; bodyPanel.add(numberFields[i][j]);} } } //開始新游戲 public void newGame(int grade,int level){ isanswer=false; //顯示總分數(shù) usergrade.setText('總分數(shù): '+user.getUsergrade()); //顯示當前關(guān)卡 levels.setText('關(guān)卡:'+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);//加監(jiān)聽器! } 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); } //將時間轉(zhuǎn)換成分:秒 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; }//重玩該關(guān) 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);//加監(jiān)聽器! } } }//輸出答案!! 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); } } }//清空九宮格!!!重新對獲取新數(shù)獨 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); } } //下面為各事件的處理!!! //右邊處理數(shù)獨按鈕監(jiān)聽器(難度類別監(jiān)聽,換一題,重玩,答案) class funactionListener implements ActionListener{ //難度監(jiān)聽器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; } } } //九宮格數(shù)組的監(jiān)聽器 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); } //格子不為空,使與格子相同的數(shù)顯示粉色 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); } } } //為下方的按鈕增加監(jiān)聽器 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; } } //小九宮格內(nèi)是否有已經(jīng)存在過這個值 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('已有該數(shù)字,請檢查!'); labelsc.setFont(new Font('方正仿宋簡體', Font.BOLD, 21)); labelsc.setForeground(Color.RED); labelsc.setVisible(true); } else{ //挑戰(zhàn)成功后!!! if(isanswer==false&&gamesc()){ //關(guān)卡加一 levs++; time.cancel(); String runtime=new String(); runtime=timeLabel.getText(); System.out.println(runtime); //轉(zhuǎn)換成秒 int tim=((runtime.charAt(0)-48)*10+(runtime.charAt(1))-48)*60+ (runtime.charAt(3)-48)*10+runtime.charAt(4)-48; //計分規(guī)則 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 = { '查看排名', '繼續(xù)挑戰(zhàn)'}; //查看排名是0,繼續(xù)挑戰(zhàn)是1 int x = JOptionPane.showOptionDialog(null, '挑戰(zhàn)成功!分數(shù)為'+gamegrade, '挑戰(zhàn)成功!', 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); } } } } //判斷點完之后數(shù)獨是否成功! 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; }}

最后生成數(shù)獨頁面的效果如下:

Java實現(xiàn)數(shù)獨小游戲

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

標簽: Java
相關(guān)文章:
主站蜘蛛池模板: 91久久国产综合精品女同国语 | 亚洲精品资源网在线观看 | 99久久精品6在线播放 | 成人免费ā片 | 日本一区二区免费在线观看 | 亚洲精品国产精品国自产 | 久久久免费观看 | 国产呦系列免费 | 成人性视频免费网站 | 香港一级纯黄大片 | 亚洲精品综合欧美一区二区三区 | 亚洲午夜在线观看 | 欧美成人黄色 | 99久久久久国产精品免费 | 欧美综合另类 | 国产欧美一区二区三区沐欲 | 国产亚洲精品一区二区在线观看 | 久久免视频 | 国产一级做a爱片久久毛片a | 毛片直接看 | 亚洲另类激情综合偷自拍图 | 国产精品久久网 | 欧美另类视频在线观看 | 午夜国产 | 久久精品视频3 | 波多野结衣在线播放视频 | 99久久精品免费看国产免费软件 | 亚洲精品国产成人专区 | 国产一级毛片网站 | 免费看欧美一级特黄a大片一 | 亚洲一区中文字幕 | 日本欧美一区二区三区高清 | 亚洲韩国欧美一区二区三区 | 国产在线a不卡免费视频 | 国产午夜精品不卡视频 | 欧美三级欧美一级 | 久在线观看 | 草草影院www色欧美极品 | 精品视频在线免费看 | 国产亚洲一区二区在线观看 | 人与拘一级a毛片 |