一. 題目簡介:
功能要求:該程式用圖形界面實作下面功能:用計算機産生一個100以内的随機數,遊戲者進行猜數,猜中即勝,猜不中,提示是大了還是小了,繼續猜,直至猜對為止。遊戲結束後給出評語并計算出玩家所用的時間與所猜的次數。
具體要求:
(1) 輸入任意一個數字。數字的要求是1—100的自然數即可。
(2) 系統對您輸入的數字進行判斷。如果玩家輸入的數字與計算機随機生成數相比較,輸入的數字比随機生成數小.系統将提示您,數字太小請您重新輸入。如果玩家輸入的數字與計算機随機生成數相比較,如果輸入的數字比随機生成數大。系統将提示您,數字太大請您重新輸入。如果玩家輸入的字元不是合法字元,系統将提示您,您輸入的數字不合法,請從新輸入。
(3) 每猜測一次,系統會記錄下來,遊戲結束後,顯示共猜測多少次。
(4) 歡迎界面:通過這裡提供的選項(或按鈕),進入遊戲界面。
(5) 遊戲界面提供“擷取随機數”按鈕,系統擷取到随機數,遊戲者輸入自己的猜測結果,通過按“确認”按鈕完成輸入。每次提示輸入猜測結果時,給出猜測的準确度提示。
(6) 按“擷取随機數”按鈕,繼續遊戲。
(7) 遊戲結束後給出評語并計算出玩家所用的時間與所猜次數。
界面要示:用圖形界面實作。
二. 結對分工及過程
在本次作業中,我劉效玲負責寫代碼,文麗君負責測試代碼。
github連結:http://github.com/wenlijun/
設計過程:
(1)随機數的擷取
功能描述:玩家輸入一個數字,數字的範圍在1-100之間,系統擷取随機數。
(2)輸入輸出子產品
功能描述:對玩家輸入的數字進行判斷和提示。如果玩家輸入的不是系統要求的數字,系統将提示您,您輸入的不是數字請重新輸入.。如果玩家輸入的數字與随機生成數相比較,比随機生成數小.系統提示您,數字太小請您重新輸入。如果玩家輸入的數字與随機生成數相比較,比随機生成數大.系統提示您,數字太大請您重新輸入。
輸入輸出子產品 |
對玩家輸入的數字進行判斷和提示 |
您輸入的不是數 字 |
您輸入的太 小 |
您輸入的太 大 |
猜對了 |
圖3 輸入輸出子產品圖
(3) 判斷子產品
功能描述:算出所用時間在玩家猜中時給出其所用時間,系統給出對其水準的判斷和是否繼續的提示;對玩家要求判斷執行。
判斷子產品 |
時間計算功 能 |
系統對玩家的水準做出 判斷 |
提示玩家是否繼 續 |
圖4 判斷子產品圖
(4) 自動計數子產品
功能描述:系統根據您猜數字的次數,自動計數.
玩家猜數字,若猜錯 |
計數器加1 |
圖5 自動計數子產品圖
(5) 結果輸出子產品
功能描述:直到使用者猜到數字為止,提示資訊是否繼續猜數字,如果繼續将進入下一次遊戲,如果退出将退出遊戲系統.
類的設計:
表1類的分類
類名 | 屬性 |
Math.random | 數學中的随機數。 |
BorderLayout | 圖形界面視窗的設計與調整 |
Concurrent | concurrent 在并發程式設計中很常用的實用工具類。 |
從使用者的角度看,Java 源程式中的類分為兩種:
系統定義的類:即 Java 類庫,它是系統定義好的類。Java 語言由文法規則和類庫兩部分組成,文法規則确定 Java 程式的書寫規範;類庫則提供了 Java 程式與運作它的系統軟體(Java 虛拟機)之間的接口。
使用者自定義類:系統定義的類雖然實作了許多常見的功能,但是使用者程式仍然需要針對特定問題的特定邏輯來定義自己的類。
在 Java 程式中,使用者自定義類的一般格式如下:
class 類名
資料成員
成員方法
類的結構是由類說明和類體兩部分組成的。
類的說明部分由關鍵字 class 與類名組成,類名的命名遵循 Java 辨別符的定義規則。
類體是類聲明中花括号所包括的全部内容,它又是由資料成員(屬性)和成員方法(方法)兩部分組成。
資料成員描述對象的屬性;成員方法則刻畫對象的行為或動作,每一個成員方法确定一個功能或操作。
首先搭建Java程式架構。打開Eclipse,建立名為GuessNumberGame的項目,然後建立名為GuessNumber的Java類。GuessNumber加上合适的javadoc。
第一步:随機數的産生
我們可以借助Java API提供的Random類來産生一個随機數。
首先在main函數中加入以下三行代碼:
// 建立一個随機數産生器,然後生成一個1到100之間的整數。
num=(int)(Math.random()*100);
String answer;
Scanner input=new Scanner(System.in);
第二步:标準輸入輸出
标準輸入輸出(Standard I/O)是指可以被應用程式使用的資訊流。應用程式可以從标準輸入(Standard input)讀取資料,向标準輸出(Standard output)寫資料,把出錯資訊發送到标準錯誤(Standard error)。通過輸入輸出,應用程式和應用程式之間可以被串聯起來使用。雖然标準輸入輸出是從UNIX發展出來的概念,在Windows中也廣泛應用。
猜數字遊戲主要用到标準輸入,更明确一些,就是控制台輸入。相反,要從控制台輸入,就需要用到System.in。它是一個純粹的輸入流,而猜數字遊戲主要是通過控制台擷取玩家的字元輸入,我們需要把它包裝成一個BufferedReader。
第三步:使用BorderLayout對圖形界面的視窗進行設計。
三.程式實作
1 程式流程圖
點選“擷取随機數”按鈕,系統擷取到一個随機數。 玩家輸入一個數,如果玩家輸入的數比系統給出的随機數小,系統會提示“您猜的太小了,請繼續猜!”。如果玩家輸入的數比系統給出的随機數大,系統提示“您猜的太大了,請繼續猜!”。 如果玩家猜對了數,但是所用時間大于十秒,系統會提示“這麼久才猜出來,有點笨!”,并且會計算出玩家所用的時間和所猜的次數。如果玩家猜對了數,而且所用時間小于十秒,系統會提示“恭喜您,猜對了!您真棒,智商真高!”,并且會計算出玩家所用的時間和所猜的次數。
系統産生一個随機數X |
玩家輸入一個在0~99範圍内的數Y |
若X>Y |
輸出“您猜的太小了,請繼續猜” |
若X<Y |
輸出“您猜的太大了,請繼續猜” |
猜對 |
這麼久才猜出來,有點笨 |
儲存記錄 |
恭喜您,猜對了! 您真棒! |
結 束 |
圖6 程式流程圖
2 關鍵算法與技術實作
package 軟體個人作業;
import java.util.InputMismatchException;
import java.util.Scanner;
public class R {
public static void main(String[] args) {
// 産生一個随機數
int number = (int) (Math.random() * 100) + 1;
// 加入count
int count = 0;
// 在這裡加入最大值,和最小值
int max = 100;
int min = 1;
while (true) {
// 鍵盤錄入資料
Scanner sc = new Scanner(System.in);
System.out.println("請輸入你要猜的資料:(" + min + "~" + max + ")");
try {
count++;
int guessNumber = sc.nextInt();
// 判斷
if (guessNumber > number) {
max = guessNumber;
System.out.println("您輸入的太大");
} else if (guessNumber < number) {
min = guessNumber;
System.out.println("您輸入的太小");
} else {
System.out.println("恭喜你,花了" + count + "次就猜中了");
// 問是否繼續
System.out.println("請問還要繼續嗎?(yes)");
sc = new Scanner(System.in);
String str = sc.nextLine();
if ("yes".equals(str)) {
// 重寫指派随機數
number = (int) (Math.random() * 100) + 1;
count = 0;
max = 100;
min = 1;
} else {
break;
}
}
} catch (InputMismatchException e) {
System.out.println("你輸入的不是數字");
}
}
}
}
3 類的實作
num=(int)(Math.random()*100);
String answer;
Eclipse立即在錯誤語句處劃出紅線,把滑鼠移動到紅線上。
包(Package)的概念
Java API中包含了極其豐富、類似于Random這樣由Sun預先定義好的類。不同包中可以有同名同姓的類,如果沒有包的概念,就會遇到命名沖突問題。此外,包還能進行安全控制。Random類是在java.util這個包中。可以手動在源程式頂部輸入import java.util.Random;語句來申明該程式将要使用java.util包中的Random類,然而有了Eclipse,就不用那麼麻煩了—把光标移動到有紅色波浪線的Random上,然後按下Ctrl+Shift+M,Eclipse會自動幫你完成導入的工作了,此時儲存一下源代碼。
第二句語句定義一個整型變量number來儲存随機産生的整數,并且用直接初始化的方法把random産生的随機數賦給number變量。
第三步:使用BorderLayout對圖形界面的視窗進行設計。
四.測試運作
1 系統測試方案
1.點選運作程式後,顯示出圖形界面。
2.點選“擷取随機數”按鈕,系統擷取到一個随機數。
3 .玩家輸入一個數,點選“确定”按鈕。如果玩家輸入的數比系統給出的随機數小,系統會提示“您猜的太小了,請繼續猜!”。如果玩家輸入的數比系統給出的随機數大,系統提示“您猜的太大了,請繼續猜!”。
4 .如果玩家猜對了數,但是所用時間大于十秒,系統會提示“這麼久才猜出來,有點笨!”,并且會計算出玩家所用的時間和所猜的次數。如果玩家猜對了數,而且所用時間小于十秒,系統會提示“恭喜您,猜對了!您真棒,智商真高!”,并且會計算出玩家所用的時間和所猜的次數。
5. 如果玩家想重新再玩一次,點選“擷取随機數”按鈕即可繼續玩下一輪遊戲。
2 運作結果分析
開始運作程式時圖形界面的顯示

五.心得與問題
這是第一次結對程式設計,覺得很新奇,同時也有些問題,比方說分工,交流方面,因為平時時間較少,交流的還是不夠多,經過幾天的時間,終于弄完了,但是架構圖沒出來,看起來不友善,也請評論者諒解,以後會改進的。通過這次實踐,把理論用到了實驗中,使我更加認識了java的功能,隻希望以後,老師能更加了解我們,跟我們一同進步。