java課程設(shè)計(jì)——猜數(shù)字游戲.doc_第1頁
java課程設(shè)計(jì)——猜數(shù)字游戲.doc_第2頁
java課程設(shè)計(jì)——猜數(shù)字游戲.doc_第3頁
java課程設(shè)計(jì)——猜數(shù)字游戲.doc_第4頁
java課程設(shè)計(jì)——猜數(shù)字游戲.doc_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

目 錄前言1正文11、設(shè)計(jì)任務(wù)與要求11.1 設(shè)計(jì)任務(wù)與要求11.2 選題目的與意義12、需求分析22.1 用戶需求分析22.2 開發(fā)環(huán)境分析23、系統(tǒng)設(shè)計(jì)33.1 系統(tǒng)總體設(shè)計(jì):33.1.1 總體設(shè)計(jì)分析33.1.2 程序結(jié)構(gòu)33.2 功能模塊設(shè)計(jì)53.2.1 功能模塊圖53.2.2 功能模塊詳細(xì)設(shè)計(jì)63.3 類的設(shè)計(jì):74、程序?qū)崿F(xiàn)94.1 程序流程圖94.2 關(guān)鍵算法與技術(shù)實(shí)現(xiàn)104.2.1 隨機(jī)數(shù)的獲取104.2.2 輸入輸出104.2.3 判斷時(shí)間114.2.4 自動(dòng)計(jì)數(shù)114.2.5 結(jié)果輸出124.2.6 圖形界面的實(shí)現(xiàn)124.3 類的實(shí)現(xiàn)135、源程序:146、測試運(yùn)行186.1 系統(tǒng)測試方案186.2 運(yùn)行結(jié)果分析186.3結(jié)論19致謝19參考文獻(xiàn)20 前言Java是一種簡單的,面向?qū)ο蟮模植际降模忉屝偷模寻踩?,結(jié)構(gòu)中立的,可移植的,性能優(yōu)異、多線程的動(dòng)態(tài)語言。猜數(shù)字游戲是一個(gè)簡單,有趣的小游戲。通過設(shè)計(jì)猜數(shù)字游戲,可以進(jìn)一步了解Swing圖形用戶界面設(shè)計(jì),事件處理和異常處理機(jī)制。利用Eclipse平臺,綜合運(yùn)用Java基礎(chǔ)知識,設(shè)計(jì)猜數(shù)字游戲。正文1、設(shè)計(jì)任務(wù)與要求1.1 設(shè)計(jì)任務(wù)與要求功能要求:該程序用圖形界面實(shí)現(xiàn)下面功能:用計(jì)算機(jī)產(chǎn)生一個(gè)100以內(nèi)的隨機(jī)數(shù),游戲者進(jìn)行猜數(shù),猜中即勝,猜不中,提示是大了還是小了,繼續(xù)猜,直至猜對為止。游戲結(jié)束后給出評語并計(jì)算出玩家所用的時(shí)間與所猜的次數(shù)。具體要求:(1) 輸入任意一個(gè)數(shù)字。數(shù)字的要求是1100的自然數(shù)即可。(2) 系統(tǒng)對您輸入的數(shù)字進(jìn)行判斷。如果玩家輸入的數(shù)字與計(jì)算機(jī)隨機(jī)生成數(shù)相比較,輸入的數(shù)字比隨機(jī)生成數(shù)小.系統(tǒng)將提示您,數(shù)字太小請您重新輸入。如果玩家輸入的數(shù)字與計(jì)算機(jī)隨機(jī)生成數(shù)相比較,如果輸入的數(shù)字比隨機(jī)生成數(shù)大。系統(tǒng)將提示您,數(shù)字太大請您重新輸入。如果玩家輸入的字符不是合法字符,系統(tǒng)將提示您,您輸入的數(shù)字不合法,請從新輸入。(3) 每猜測一次,系統(tǒng)會(huì)記錄下來,游戲結(jié)束后,顯示共猜測多少次。(4) 歡迎界面:通過這里提供的選項(xiàng)(或按鈕),進(jìn)入游戲界面。(5) 游戲界面提供“獲取隨機(jī)數(shù)”按鈕,系統(tǒng)獲取到隨機(jī)數(shù),游戲者輸入自己的猜測結(jié)果,通過按“確認(rèn)”按鈕完成輸入。每次提示輸入猜測結(jié)果時(shí),給出猜測的準(zhǔn)確度提示。(6) 按“獲取隨機(jī)數(shù)”按鈕,繼續(xù)游戲。(7) 游戲結(jié)束后給出評語并計(jì)算出玩家所用的時(shí)間與所猜次數(shù)。界面要示:用圖形界面實(shí)現(xiàn)。1.2 選題目的與意義通過猜數(shù)游戲這個(gè)課題我可以學(xué)到文本框、標(biāo)簽框、按鈕、布局、對話框方面的知識和應(yīng)用,達(dá)到設(shè)計(jì)登陸界面、加入圖像顯示功能以及設(shè)計(jì)按鈕的目的,讓我更加的掌握和理解java面向?qū)ο笳Z言的需求分析、系統(tǒng)設(shè)計(jì),所以我選擇猜數(shù)游戲這個(gè)課題。2、需求分析2.1 用戶需求分析1玩家輸入一個(gè)數(shù)字,數(shù)字的范圍在1-100之間,系統(tǒng)獲取隨機(jī)數(shù)。2對玩家輸入的數(shù)字進(jìn)行判斷大小,如果不是系統(tǒng)要求的數(shù)字,系統(tǒng)將提示您,您輸入的不是數(shù)字請重新輸入,給出提醒以便玩家進(jìn)一步選擇。3.玩家猜中時(shí)系統(tǒng)給出所用時(shí)間和游戲水平的判斷,系統(tǒng)給出是否繼續(xù)的提示及判斷。4.系統(tǒng)根據(jù)您猜數(shù)字的次數(shù),自動(dòng)計(jì)數(shù).5.直到用戶猜到數(shù)字為止,提示信息是否繼續(xù)猜數(shù)字,如果繼續(xù)將進(jìn)入下一次游戲,如果退出將退出游戲系統(tǒng).2.2 開發(fā)環(huán)境分析Eclipse企業(yè)級工作平臺(Eclipse Enterprise Workbench ,簡稱Eclipse)是對Eclipse IDE的擴(kuò)展,利用它我們可以在數(shù)據(jù)庫和JavaEE的開發(fā)、發(fā)布,以及應(yīng)用程序服務(wù)器的整合方面極大的提高工作效率。它是功能豐富的JavaEE集成開發(fā)環(huán)境,包括了完備的編碼、調(diào)試、測試和發(fā)布功能,完整支持HTML, Struts, JSF, CSS, Javascript, SQL, Hibernate。在結(jié)構(gòu)上, Eclipse的特征可以被分為7類:1. JavaEE模型2. WEB開發(fā)工具3. EJB開發(fā)工具4. 應(yīng)用程序服務(wù)器的連接器5. JavaEE項(xiàng)目部署服務(wù)6. 數(shù)據(jù)庫服務(wù)7. Eclipse整合幫助 對于以上每一種功能上的類別,在Eclipse中都有相應(yīng)的功能部件,并通過一系列的插件來實(shí)現(xiàn)它們。Eclipse結(jié)構(gòu)上的這種模塊化,可以讓我們在不影響其他模塊的情況下,對任一模塊進(jìn)行單獨(dú)的擴(kuò)展和升級。簡單而言,Eclipse是Eclipse的插件,也是一款功能強(qiáng)大的JavaEE集成開發(fā)環(huán)境,支持代碼編寫、配置、測試以及除錯(cuò)。該程序基于JDK和Eclipse編寫,選用Eclipse是界面設(shè)計(jì)所需。根據(jù)系統(tǒng)范圍隨機(jī)產(chǎn)生一個(gè)數(shù)字,可根據(jù)玩家選擇給出不同的數(shù)字。玩家輸入所猜數(shù)字時(shí)給出與真實(shí)數(shù)字的大小比較。在玩家猜中時(shí),可給出其所用時(shí)間,并給出評價(jià)。最后,游戲的結(jié)束與繼續(xù)可由玩家控制。3、系統(tǒng)設(shè)計(jì)3.1 系統(tǒng)總體設(shè)計(jì):3.1.1 總體設(shè)計(jì)分析1.隨機(jī)數(shù)的獲?。和婕逸斎胍粋€(gè)數(shù)字,數(shù)字的范圍在1-100之間,系統(tǒng)獲取隨機(jī)數(shù)。2. 輸入輸出模塊:對玩家輸入的數(shù)字進(jìn)行判斷和提示。如果玩家輸入的不是系統(tǒng)要求的數(shù)字,系統(tǒng)將提示您,您輸入的不是數(shù)字請重新輸入.。如果玩家輸入的數(shù)字與隨機(jī)生成數(shù)相比較,比隨機(jī)生成數(shù)小.系統(tǒng)提示您,數(shù)字太小請您重新輸入。如果玩家輸入的數(shù)字與隨機(jī)生成數(shù)相比較,比隨機(jī)生成數(shù)大.系統(tǒng)提示您,數(shù)字太大請您重新輸入。3. 判斷模塊:算出所用時(shí)間在玩家猜中時(shí)給出其所用時(shí)間,系統(tǒng)給出對其水平的判斷和是否繼續(xù)的提示;對玩家要求判斷執(zhí)行。4.自動(dòng)計(jì)數(shù)模塊:系統(tǒng)根據(jù)您猜數(shù)字的次數(shù),自動(dòng)計(jì)數(shù).5.結(jié)果輸出模塊:直到用戶猜到數(shù)字為止,提示信息是否繼續(xù)猜數(shù)字,如果繼續(xù)將進(jìn)入下一次游戲,如果退出將退出游戲系統(tǒng).3.1.2 程序結(jié)構(gòu)點(diǎn)擊“獲取隨機(jī)數(shù)”按鈕,系統(tǒng)獲取到一個(gè)隨機(jī)數(shù)。 玩家輸入一個(gè)數(shù),如果玩家輸入的數(shù)比系統(tǒng)給出的隨機(jī)數(shù)小,系統(tǒng)會(huì)提示“您猜的太小了,請繼續(xù)猜!”。如果玩家輸入的數(shù)比系統(tǒng)給出的隨機(jī)數(shù)大,系統(tǒng)提示“您猜的太大了,請繼續(xù)猜!”。 如果玩家猜對了數(shù),但是所用時(shí)間大于十秒,系統(tǒng)會(huì)提示“這么久才猜出來,有點(diǎn)笨!”,并且會(huì)計(jì)算出玩家所用的時(shí)間和所猜的次數(shù)。如果玩家猜對了數(shù),而且所用時(shí)間小于十秒,系統(tǒng)會(huì)提示“恭喜您,猜對了!您真棒,智商真高!”,并且會(huì)計(jì)算出玩家所用的時(shí)間和所猜的次數(shù)。 開 始系統(tǒng)產(chǎn)生一個(gè)隨機(jī)數(shù)X玩家輸入一個(gè)在099范圍內(nèi)的數(shù)Y若XY 輸出“您猜的太小了,請繼續(xù)猜”若XY 輸出“您猜的太小了,請繼續(xù)猜”若XY 猜對輸出“您猜的太大了,請繼續(xù)猜”儲存記錄這么久才猜出來,有點(diǎn)笨恭喜您,猜對了!您真棒! 結(jié) 束 圖6 程序流程圖4.2 關(guān)鍵算法與技術(shù)實(shí)現(xiàn)4.2.1 隨機(jī)數(shù)的獲取num=(int)(Math.random()*100);String answer;Scanner input=new Scanner(System.in);4.2.2 輸入輸出 for(i=1;i=10;i+) if(num2num)lbshow.setText(您猜的太大了,請繼續(xù)猜!);continue;long endTime=System.currentTimeMillis();long t;t=(endTime-startTime)/1000;strshow=您總共猜了+counter+次,您猜數(shù)字總共花了+(endTime-startTime)/1000+秒;if(t10)lbshow.setText(這么久才猜出來,有點(diǎn)笨!+strshow); 4.2.3 判斷時(shí)間startTime=System.currentTimeMillis();long endTime=System.currentTimeMillis();strshow=您猜數(shù)字總共花了+(endTime-startTime)/1000+秒;4.2.4 自動(dòng)計(jì)數(shù) int geust=0; counter+;strshow=您總共猜了+counter+次;4.2.5 結(jié)果輸出 long t;t=(endTime-startTime)/1000;strshow=您總共猜了+counter+次,您猜數(shù)字總共花了+(endTime-startTime)/1000+秒;if(t10)lbshow.setText(這么久才猜出來,有點(diǎn)笨!+strshow);4.2.6 圖形界面的實(shí)現(xiàn) BorderLayout bdmg=new BorderLayout(); Button button1=new Button(獲取隨機(jī)數(shù)); Button button2=new Button(確定); String str=null; String str2=null;long startTime; int num,num2; int counter=0; myGeustNum my1=new myGeustNum(); TextField input; Label lbshow=new Label(); Label lbshow2=new Label(); int i; String strshow; public void init() setLayout(bdmg); add(button1,BorderLayout.NORTH); button1.addActionListener(this); button1.setSize(50,50); Label lb1=new Label( 請輸入); lb1.setSize(50,20); this.add(lb1,BorderLayout.WEST); input=new TextField(10); input.setSize(40,50); add(input,BorderLayout.CENTER); add(button2,BorderLayout.EAST); lb1.setSize(50,20); button2.addActionListener(this); button2.setSize(50,20); add(lbshow,BorderLayout.SOUTH); setSize(450,200); 4.3 類的實(shí)現(xiàn)首先搭建Java程序框架。打開Eclipse,新建名為GuessNumberGame的項(xiàng)目,然后新建名為GuessNumber的Java類。GuessNumber加上合適的javadoc。第一步:隨機(jī)數(shù)的產(chǎn)生我們可以借助Java API提供的Random類來產(chǎn)生一個(gè)隨機(jī)數(shù)。首先在main函數(shù)中加入以下三行代碼:/ 新建一個(gè)隨機(jī)數(shù)產(chǎn)生器,然后生成一個(gè)1到100之間的整數(shù)。 num=(int)(Math.random()*100);String answer;Scanner input=new Scanner(System.in); Eclipse立即在錯(cuò)誤語句處劃出紅線,把鼠標(biāo)移動(dòng)到紅線上。包(Package)的概念Java API中包含了極其豐富、類似于Random這樣由Sun預(yù)先定義好的類。不同包中可以有同名同姓的類,如果沒有包的概念,就會(huì)遇到命名沖突問題。此外,包還能進(jìn)行安全控制。Random類是在java.util這個(gè)包中??梢允謩?dòng)在源程序頂部輸入import java.util.Random;語句來申明該程序?qū)⒁褂胘ava.util包中的Random類,然而有了Eclipse,就不用那么麻煩了把光標(biāo)移動(dòng)到有紅色波浪線的Random上,然后按下CtrlShiftM,Eclipse會(huì)自動(dòng)幫你完成導(dǎo)入的工作了,此時(shí)保存一下源代碼。第二句語句定義一個(gè)整型變量number來保存隨機(jī)產(chǎn)生的整數(shù),并且用直接初始化的方法把random產(chǎn)生的隨機(jī)數(shù)賦給number變量。第二步:標(biāo)準(zhǔn)輸入輸出標(biāo)準(zhǔn)輸入輸出(Standard I/O)是指可以被應(yīng)用程序使用的信息流。應(yīng)用程序可以從標(biāo)準(zhǔn)輸入(Standard input)讀取數(shù)據(jù),向標(biāo)準(zhǔn)輸出(Standard output)寫數(shù)據(jù),把出錯(cuò)信息發(fā)送到標(biāo)準(zhǔn)錯(cuò)誤(Standard error)。通過輸入輸出,應(yīng)用程序和應(yīng)用程序之間可以被串聯(lián)起來使用。雖然標(biāo)準(zhǔn)輸入輸出是從UNIX發(fā)展出來的概念,在Windows中也廣泛應(yīng)用。猜數(shù)字游戲主要用到標(biāo)準(zhǔn)輸入,更明確一些,就是控制臺輸入。相反,要從控制臺輸入,就需要用到System.in。它是一個(gè)純粹的輸入流,而猜數(shù)字游戲主要是通過控制臺獲取玩家的字符輸入,我們需要把它包裝成一個(gè)BufferedReader。 第三步:使用BorderLayout對圖形界面的窗口進(jìn)行設(shè)計(jì)。5、源程序:Package a;import java.awt.Color; import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JTextField; class WindowButton extends JFrame implements ActionListener /* * */ private static final long serialVersionUID = 1L; int number; JTextField inputNumber; JLabel feedBack; JButton buttonGetNumber,buttonEnter; WindowButton(String s) super(猜數(shù)字小游戲); buttonGetNumber=new JButton(得到一個(gè)隨機(jī)數(shù)); feedBack=new JLabel(無反饋信息,JLabel.CENTER); feedBack.setBackground(Color.green); inputNumber=new JTextField(0,5); buttonEnter=new JButton(確定); buttonEnter.addActionListener(this); buttonGetNumber.addActionListener(this); buttonGetNumber.addActionListener(this); Box boxH1=Box.createHorizontalBox(); boxH1.add(new JLabel(獲取1-100之間的隨機(jī)數(shù):); boxH1.add(buttonGetNumber); Box boxH2=Box.createHorizontalBox(); boxH2.add(new JLabel(輸入您的猜測: );boxH2.add(inputNumber); Box boxH3=Box.createHorizontalBox(); boxH3.add(new JLabel(單擊確定按鈕: );boxH3.add(buttonEnter); Box boxH4=Box.createHorizontalBox(); boxH4.add(new JLabel(反饋信息: ); boxH4.add(feedBack); Box baseBox=Box.createVerticalBox(); baseBox.add(boxH1); baseBox.add(boxH2); baseBox.add(boxH3); baseBox.add(boxH4); Container con=getContentPane(); con.setLayout(new FlowLayout(); con.add(baseBox); con.validate(); setBounds(120,125,279,200); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100,100,150,150); setVisible(true); validate(); public void actionPerformed(ActionEvent e) if(e.getSource()=buttonGetNumber) number=(int)(Math.random()*100)+1; else if(e.getSource()=buttonEnter)int guess=0; try guess=Integer.parseInt(inputNumber.getText(); if(guess=number) JOptionPane.showMessageDialog(this,猜對了); else if(guessnumber) JOptionPane.showMessageDialog(this,猜大了); inputNumber.setText(null); else if(guessnumber) JOptionPane.showMessageDialog(this,猜小了); inputNumber.setText(null); catch(NumberFormatException event) JOptionPane.showMessageDialog(this,請輸入數(shù)字字符); public class 猜數(shù)字游戲 public static void main(String args)new WindowButton(猜數(shù)字小游戲); package b;import java.util.Date;import java.util.Scanner;public class test2 public static void main(String args) /給定生成隨機(jī)數(shù)的范圍11000Scanner input = new Scanner(System.in);int num = (int) (Math.random() * 100) + 1;System.out.println(系統(tǒng)已經(jīng)生成數(shù)字,猜猜看這個(gè)數(shù)字是多少?(如果實(shí)在猜不出來,就輸入投降吧);Date d1 = new Date();int gNum = 0;int count = 0;boolean isHandup = false;do count+;System.out.print(第 + count + 次:);try gNum = input.nextInt();if (gNum num) System.out.println(猜大了); catch (Exception ex) if (input.next().trim().equals(投降) isHandup = true;break;System.out.println(輸入數(shù)字格式不正確,請重新輸入。);count-;continue; while (gNum != num);Date d2 = new Date();int time = (int) (d2.getTime() - d1.getTime() / 1000 + 0.5);if (isHandup) System.out.println(悲劇,你投降了!共用了 + time + 秒,猜了 + (count-1)+ 次。);isHandup=false; else if (count * time 10) System.out.println(太棒了!你運(yùn)氣真好!共用了 + time + 秒,猜了 + count+ 次。); else if (count * time 50) System.out.println(你真聰明!共用了 + time + 秒,猜了 + count + 次。); else if (count * time 1000) System.out.println(真棒!你竟然猜出來了!共用了 + time + 秒,猜了 + count+ 次。); else System.out.println(終于猜對了,你也太笨 了吧。共用了 + time + 秒,猜了 + count+ 次。);6、測試運(yùn)行6.1 系統(tǒng)測試方案1.點(diǎn)擊運(yùn)行程序后,顯示出圖形界面。2.點(diǎn)擊“獲取隨機(jī)數(shù)”按鈕,系統(tǒng)獲取到一個(gè)隨機(jī)數(shù)。3 .玩家輸入一個(gè)數(shù),點(diǎn)擊“確定”按鈕。如果玩家輸入的數(shù)比系統(tǒng)給出的隨機(jī)數(shù)小,系統(tǒng)會(huì)提示“您猜的太小了,請繼續(xù)猜!”。如果玩家輸入的數(shù)比系統(tǒng)給出的隨機(jī)數(shù)大,系統(tǒng)提示“您猜的太大了,請繼續(xù)猜!”。4 .如果玩家猜對了數(shù),但是所用時(shí)間大于十秒,系統(tǒng)會(huì)提示“這么久才猜出來,有點(diǎn)笨!”,并且會(huì)計(jì)算出玩家所用的時(shí)間和所猜的次數(shù)。如果玩家猜對了數(shù),而且所用時(shí)間小于十秒,系統(tǒng)會(huì)提示“恭喜您,猜

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論