#1、 需求分析javascript
- 1.玩家輸入一個數字,數字的範圍在1~100之間,系統自動隨機獲取。
- 2.對玩家輸入的數字進行判斷大小,若是不是正確答案,則系統給出或大或小提示,用戶繼續進行猜想。
- 3.玩家猜中時系統對於所猜次數給出不一樣的評語,並把猜想過程所用時間記錄於一個文本中。
- 4.每次猜想系統自動統計猜想次數並顯示。
- 5.猜中後可自動進行下一輪遊戲。
#2、 課題及本人任務java
- 課題:猜數遊戲
- 本人任務:整個程序
#3、 整體設計 遊戲隨機給出一個1~100(包括100)之間的數字,而後用戶猜想是什麼數字。用戶能夠隨便猜想一個數字,遊戲會提示太大仍是過小,從而縮小範圍。通過幾回猜想與提示後,最終推出答案。(系統設計以下圖)dom
遊戲界面:採用圖形界面顯示。 遊戲開始後,由計算機產生一個1~100的隨機數。用戶只需輸入所猜測的數字,打印在輸入框內,按Enter鍵表示肯定,遊戲返回提示語句並清空輸入框,直到遊戲結束。同時計算機計算猜想次數並顯示,計算遊戲時間並存入一個文檔。能夠經過按窗體關閉符直接結束遊戲。 #4、 主要功能展現與代碼分析佈局
-
功能展現:測試
-
初始界面:設計
輸入一個數字後:系統給出提示並清空輸入框code
猜對後給出評語:orm
繼續則進行下一輪遊戲:遊戲
用於存儲猜想時間的文件:ip
該文件存儲遊戲時間(毫秒):
- 代碼分析:
package KESHE; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.awt.BorderLayout; import static java.awt.BorderLayout.*; public class Finish extends JFrame { int number,random,counter; //猜的數,答案,次數 long time;//時間 JLabel welcomeJLabel;//定義一個組件 JLabel hintJLabel; //提示顯示框 JTextField guessField; //輸入框 JPanel panel;//顯示背景色 public Finish() { //佈局 super("猜數字"); //窗體名 panel=new JPanel(); panel.setBackground(Color.PINK); //定義背景色 welcomeJLabel= new JLabel("已隨機生成一個1到100的整數,來猜猜看吧"); add(welcomeJLabel,NORTH); guessField=new JTextField(25); //容乃字符長度 panel.add(guessField); add(panel); //默認添加到中間 hintJLabel= new JLabel(""); //初始換提示框 add(hintJLabel,SOUTH); TextFieldHandler handler=new TextFieldHandler(); guessField.addActionListener(handler); //監聽 random=(int)(1+100*Math.random()); //產生隨機數 } long begintime=System.currentTimeMillis();//開始計時 private class TextFieldHandler implements ActionListener { public void actionPerformed (ActionEvent event) { while(true){ number=Integer.parseInt(guessField.getText()); //獲取猜想的數值 while(number!=random) { number=Integer.parseInt(guessField.getText()); if(number>random) { hintJLabel.setText("猜高了,再試試吧。已試錯"+(++counter)+"次"); guessField.setText(""); //置空輸入框 } else{ hintJLabel.setText("猜低了,請繼續!已試錯"+(++counter)+"次"); guessField.setText(""); } } long endtime=System.currentTimeMillis();//結束計時 time=endtime-begintime;//總時間 //猜中後的用戶提示 File f= new File("d:" + File.separator + "課設測試") ;//新建一個文件夾 Writer out = null ; try { String con=String.valueOf(time);//把time轉換成字符串 con+="\r\n";//換行 out = new FileWriter(f,true); out.write(con) ;// 將內容輸出,保存文件 out.close() ;// 關閉文件 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (counter<3) JOptionPane.showMessageDialog(null, "恭喜您,猜中了,真厲害!"); else if (counter==6) JOptionPane.showMessageDialog(null, "終於猜中了!"); else JOptionPane.showMessageDialog(null, "您終於猜中了╮(╯▽╰)╭,您其實能夠作得更好的!"); //開始下一輪猜數字遊戲前的初始化工做 guessField.setText(""); random=(int)(1+100*Math.random()); counter=0; } } } public static void main(String[] args) { Finish f = new Finish(); // create ListFrame f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(400,300); f.setVisible(true); } }
5、 測試與改進
- 把背景色改爲了粉色
- 對於每次猜想給出提示和已經猜的次數,用戶體驗比較直觀
- 一次遊戲結束以後能夠直接進行下一輪,無需再從新啓動程序
- 生成jar文件,更方便使用。
6、 附錄 源代碼:
package KESHE; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.awt.BorderLayout; import static java.awt.BorderLayout.*; public class Finish extends JFrame { int number,random,counter; //猜的數,答案,次數 long time;//時間 JLabel welcomeJLabel;//定義一個組件 JLabel hintJLabel; //提示顯示框 JTextField guessField; //輸入框 JPanel panel;//顯示背景色 public Finish() { //佈局 super("猜數字"); //窗體名 panel=new JPanel(); panel.setBackground(Color.PINK); //定義背景色 welcomeJLabel= new JLabel("已隨機生成一個1到100的整數,來猜猜看吧"); add(welcomeJLabel,NORTH); guessField=new JTextField(25); //容乃字符長度 panel.add(guessField); add(panel); //默認添加到中間 hintJLabel= new JLabel(""); //初始換提示框 add(hintJLabel,SOUTH); TextFieldHandler handler=new TextFieldHandler(); guessField.addActionListener(handler); //監聽 random=(int)(1+100*Math.random()); //產生隨機數 } long begintime=System.currentTimeMillis();//開始計時 private class TextFieldHandler implements ActionListener { public void actionPerformed (ActionEvent event) { while(true){ number=Integer.parseInt(guessField.getText()); //獲取猜想的數值 while(number!=random) { number=Integer.parseInt(guessField.getText()); if(number>random) { hintJLabel.setText("猜高了,再試試吧。已試錯"+(++counter)+"次"); guessField.setText(""); //置空輸入框 } else{ hintJLabel.setText("猜低了,請繼續!已試錯"+(++counter)+"次"); guessField.setText(""); } } long endtime=System.currentTimeMillis();//結束計時 time=endtime-begintime;//總時間 //猜中後的用戶提示 File f= new File("d:" + File.separator + "課設測試") ;//新建一個文件夾 Writer out = null ; try { String con=String.valueOf(time);//把time轉換成字符串 con+="\r\n";//換行 out = new FileWriter(f,true); out.write(con) ;// 將內容輸出,保存文件 out.close() ;// 關閉文件 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (counter<3) JOptionPane.showMessageDialog(null, "恭喜您,猜中了,真厲害!"); else if (counter==6) JOptionPane.showMessageDialog(null, "終於猜中了!"); else JOptionPane.showMessageDialog(null, "您終於猜中了╮(╯▽╰)╭,您其實能夠作得更好的!"); //開始下一輪猜數字遊戲前的初始化工做 guessField.setText(""); random=(int)(1+100*Math.random()); counter=0; } } } public static void main(String[] args) { Finish f = new Finish(); // create ListFrame f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(400,300); f.setVisible(true); } }