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

下載本文檔

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

文檔簡介

1、目 錄前言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.

2、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平臺(tái),綜合運(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é)束后給出評語

3、并計(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ù)”按

4、鈕,系統(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對玩家

5、輸入的數(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è)級工作平臺(tái)(eclipse enterprise workbench ,簡稱eclipse)是對eclipse ide的擴(kuò)展,利用它我們可以在數(shù)據(jù)庫和javaee的開發(fā)、發(fā)布,以及服務(wù)器的整合方面極大的提高工作效率。它是功能豐富

6、的javaee,包括了完備的編碼、調(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ò)展和升級。簡單而言,eclips

7、e是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)將提示您,您

8、輸入的不是數(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)給出的隨

9、機(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ù)猜”儲(chǔ)存記錄這么久才猜出來,有點(diǎn)笨恭喜您,猜對了!

10、您真棒! 結(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ù)

11、字總共花了+(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-start

12、time)/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

13、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.setsiz

14、e(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程序框

15、架。打開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)的概念

16、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ù),并且用直接

17、初始化的方法把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)輸入,更明確一些,就是控制臺(tái)輸入。相反,要從控制臺(tái)輸入,就需要用到system.in。它是一個(gè)純粹的輸入流,而猜數(shù)字游戲主

18、要是通過控制臺(tái)獲取玩家的字符輸入,我們需要把它包裝成一個(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

19、 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 buttongetnu

20、mber,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.addactionlis

21、tener(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

22、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 flow

23、layout(); 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()*

24、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.showmessagedial

25、og(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 mai

26、n(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 = inpu

27、t.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) sy

28、stem.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(真棒!你竟然猜

29、出來了!共用了 + 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)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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

提交評論