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

下載本文檔

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

文檔簡(jiǎn)介

1、課程設(shè)計(jì)(論文)題 目 名 稱 猜數(shù)游戲 課 程 名 稱 java 程序設(shè)計(jì)課程設(shè)計(jì) 學(xué) 生 姓 名 學(xué) 號(hào) 系 、專 業(yè) 信息工程系、07網(wǎng)絡(luò)工程專業(yè) 指 導(dǎo) 教 師 2010年 1 月 3 日摘 要 本程序是一個(gè)游戲程序,程序讓計(jì)算機(jī)自動(dòng)生成一個(gè)隨機(jī)數(shù),讓玩家猜,猜的數(shù)比隨機(jī)數(shù)大則提示“大了”,比隨機(jī)數(shù)小則提示“小了”,再讓玩家重新猜,直到猜對(duì)為止,猜對(duì)了以后會(huì)表揚(yáng)玩家,并算出玩家共猜了多少次。關(guān)鍵詞: 游戲、隨機(jī)數(shù)、猜數(shù)目 錄1 問題描述.12 需求分析.13 概要設(shè)計(jì).13.1 自定義類說明.13.2 程序流程分析 . 14 詳細(xì)設(shè)計(jì).44.1 game類的實(shí)現(xiàn).45 測(cè)試分析.66

2、課程設(shè)計(jì)總結(jié).8參考文獻(xiàn)9附錄(部分源程序清單)101 問題描述計(jì)算機(jī)產(chǎn)生隨機(jī)數(shù),猜中即勝,猜不中,提示是大了還是小了,繼續(xù)猜,直至猜到,給出所用次數(shù)和評(píng)語。2 需求分析 需要?jiǎng)?chuàng)建一個(gè)game類,該類實(shí)現(xiàn)產(chǎn)生隨機(jī)數(shù)、提示出錯(cuò)信息、計(jì)算猜錯(cuò)次數(shù)、給出玩家游戲信息等功能。其中包括一個(gè)循環(huán)函數(shù),玩家猜的不對(duì)就提示“大了”或“小了”要求玩家再次輸入,不斷循環(huán),直到玩家猜對(duì)。還包括提示出錯(cuò)程序,即玩家輸入不是數(shù)字或不輸入時(shí)會(huì)提示出錯(cuò)。還有計(jì)數(shù)函數(shù),計(jì)算玩家共猜了多少次。最后是猜對(duì)表揚(yáng)函數(shù),即玩家猜對(duì)后表揚(yáng)玩家,同時(shí)給出玩家共猜了多少次的信息。3 概要設(shè)計(jì)31自定義類說明3.1.1類名: game類(1)

3、作用: 主類,用來(2)繼承的父類: 沒有(3)實(shí)現(xiàn)的接口: 沒有 (4)成員變量說明: 整型變量rnd:計(jì)算機(jī)產(chǎn)生的隨機(jī)數(shù) 整型變量counter:存放猜數(shù)次數(shù)的變量 字符串變量str:存放輸入字符串(5)成員方法說明: math.random():隨機(jī)產(chǎn)生一個(gè)數(shù) joptionpane.showinputdialog:產(chǎn)生一個(gè)輸入消息對(duì)話框 joptionpane.showmessagedialog:產(chǎn)生一個(gè)輸出消息對(duì)話框 integer.parseint:強(qiáng)制類型轉(zhuǎn)換32 程序流程分析開始顯示“小了”irnd不能為空,錯(cuò)誤輸入錯(cuò)誤輸入!inti=integer.parseint(str)

4、;str.equals()不是數(shù)字c+crndcounter5顯示“大了”成功,你只猜了counter次,你真是太棒了 恭喜你猜對(duì)了,你猜了counter次import java.awt.event.*;import javax.swing.*;import java.io.*;import java.security.*;import javax.crypto.*;import javax.crypto.spec.*;public class fileencryptert extends jframe package key;final jbutton jbe=new jbutton(加密)

5、;final jbutton jbd=new jbutton(解密);fileencryptert()super(文件加密器(trides);setbounds(100,100,600,380);this.setresizable(false);container c=getcontentpane();c.setlayout(new flowlayout();final filepanel fp = new filepanel(文件選擇);c.add(fp);final keypanel pp=new keypanel(輸入key);c.add(pp);jbe.addactionlistene

6、r(new actionlistener()public void actionperformed(actionevent event)file file = new file(fp.getfilename();if (file.exists()encrypt(file.getabsolutefile(),pp.getkey();elsejoptionpane.showmessagedialog( null,請(qǐng)選擇文件!,提示,joptionpane.ok_option););jbd.addactionlistener(new actionlistener()public void actio

7、nperformed(actionevent event)file file = new file(fp.getfilename();if (file.exists()decrypt(file.getabsolutefile(),pp.getkey();elsejoptionpane.showmessagedialog(null,請(qǐng)選擇文件!,提示,joptionpane.ok_option););getcontentpane().add(jbe);getcontentpane().add(jbd);public static void main(string args) fileencryp

8、tert fe=new fileencryptert();fe.show();private void encrypt(file filein,string skey)try if(skey.length() = 48) byte bytk1 = getkeybystr(skey.substring(0,16); byte bytk2 = getkeybystr(skey.substring(16,32); byte bytk3 = getkeybystr(skey.substring(32,48); fileinputstream fis = new fileinputstream(file

9、in); byte bytin = new byte(int)filein.length(); for(int i = 0;ifilein.length();i+) bytini = (byte)fis.read(); byte bytout = encryptbydes(encryptbydes( encryptbydes(bytin,bytk1),bytk2),bytk3); string fileout = filein.getpath() + .tdes; fileoutputstream fos = new fileoutputstream(fileout); for(int i =

10、 0;ibytout.length;i+) fos.write(int)bytouti);fos.close();joptionpane.showmessagedialog(this,加密成功!,提示,joptionpane.ok_option);elsejoptionpane.showmessagedialog(this,“密碼長(zhǎng)度必須等于48!”,“錯(cuò)誤信息”joptionpane.error_message); catch(exception e)e.printstacktrace();private void decrypt(file filein,string skey)try if

11、(skey.length() = 48) string strpath = filein.getpath();if(strpath.substring(strpath.length()-5).tolowercase().equals(.tdes) strpath = strpath.substring(0,strpath.length()-5);else joptionpane.showmessagedialog(this,不是合法的加密文件!,提示,joptionpane.ok_option);return;jfilechooser chooser = new jfilechooser();

12、chooser.setcurrentdirectory(new file(.);chooser.setselectedfile(new file(strpath);int ret = chooser.showsavedialog(this);if(ret=jfilechooser.approve_option)byte bytk1 = getkeybystr(skey.substring(0,16);byte bytk2 = getkeybystr(skey.substring(16,32);byte bytk3 = getkeybystr(skey.substring(32,48);file

13、inputstream fis = new fileinputstream(filein);byte bytin = new byte(int)filein.length();for(int i = 0;ifilein.length();i+)bytini = (byte)fis.read();byte bytout = decryptbydes(decryptbydes(decryptbydes(bytin,bytk3),bytk2),bytk1); file fileout = chooser.getselectedfile();fileout.createnewfile();fileou

14、tputstream fos = new fileoutputstream(fileout);for(int i = 0;ibytout.length;i+)fos.write(int)bytouti);fos.close();joptionpane.showmessagedialog(this,解密成功!,提示,joptionpane.ok_option);elsejoptionpane.showmessagedialog(this,密碼長(zhǎng)度必須等于48!,錯(cuò)誤信息 ,joptionpane.error_message);catch(exception e)joptionpane.showm

15、essagedialog(this,解密失敗,請(qǐng)核對(duì)密碼!,提示,joptionpane.ok_option);private byte encryptbydes(byte bytp,byte bytkey) throws exception deskeyspec desks = new deskeyspec(bytkey); secretkeyfactory skf = secretkeyfactory.getinstance(des); secretkey sk = skf.generatesecret(desks); cipher cip = cipher.getinstance(des

16、); cip.init(cipher.encrypt_mode,sk); return cip.dofinal(bytp);private byte decryptbydes(byte byte,byte bytkey) throws exception deskeyspec desks = new deskeyspec(bytkey); secretkeyfactory skf = secretkeyfactory.getinstance(des); secretkey sk = skf.generatesecret(desks); cipher cip = cipher.getinstan

17、ce(des); cip.init(cipher.decrypt_mode,sk); return cip.dofinal(byte);private byte getkeybystr(string str)byte bret = new bytestr.length()/2;for(int i=0;istr.length()/2;i+)integer itg= newinteger(16*getchrint(str.charat(2*i)getchrint(str.charat(2*i+1);breti = itg.bytevalue();return bret;private int ge

18、tchrint(char chr)int iret=0;if(chr=0.charat(0) iret = 0;if(chr=1.charat(0) iret = 1;if(chr=2.charat(0) iret = 2;if(chr=3.charat(0) iret = 3;if(chr=4.charat(0) iret = 4;if(chr=5.charat(0) iret = 5;if(chr=6.charat(0) iret = 6;if(chr=7.charat(0) iret = 7;if(chr=8.charat(0) iret = 8;if(chr=9.charat(0) i

19、ret = 9;if(chr=a.charat(0) iret = 10;if(chr=b.charat(0) iret = 11;if(chr=c.charat(0) iret = 12;if(chr=d.charat(0) iret = 13;if(chr=e.charat(0) iret = 14;if(chr=f.charat(0) iret = 15;return iret; system.exit(0);counter+;結(jié)束 圖3.1 主程序流程圖程序運(yùn)行時(shí)計(jì)算機(jī)產(chǎn)生一個(gè)隨機(jī)數(shù),并把這個(gè)隨機(jī)數(shù)賦值給rnd,再進(jìn)入while循環(huán),程序要求玩家輸入一個(gè)數(shù)字,不為數(shù)字或輸入為空時(shí),彈出

20、對(duì)話框,提示輸入為空和錯(cuò)誤輸入。當(dāng)輸入的數(shù)比隨機(jī)數(shù)小時(shí)彈出對(duì)話框提示“小了”,當(dāng)輸入的數(shù)比隨機(jī)數(shù)大時(shí)彈出對(duì)話框提示“大了”,要求玩家再次輸入數(shù)字直到輸入的數(shù)和隨機(jī)數(shù)一樣時(shí)退出循環(huán),并彈出成功對(duì)話框,給出評(píng)語“恭喜你猜對(duì)了,你猜了counter 次”或“你只猜了 counter 次,你真是太棒了!”如圖3.1所示。4 詳細(xì)設(shè)計(jì)41game類的實(shí)現(xiàn)/創(chuàng)建game類public class game public static void main(string args) /rnd是計(jì)算機(jī)產(chǎn)生的隨機(jī)數(shù) int rnd=(int)(math.random()*100)+1; /counter用來統(tǒng)計(jì)玩

21、家猜數(shù)次數(shù) int counter=1; while(true) /輸入對(duì)話框,用showinputdialog方法 string str=javax.swing.joptionpane.showinputdialog(請(qǐng)輸入數(shù)據(jù):); /定義一個(gè)字符數(shù)組,將str轉(zhuǎn)換后的值賦給它 char sarray =str.tochararray(); for(int c=0;csarray.length;c+) /判斷是否為數(shù)字,若不是則提示錯(cuò)誤 if(!character.isdigit(sarrayc) javax.swing.joptionpane.showmessagedialog(null

22、,錯(cuò)誤輸入!); system.exit(0); /判斷是否空if (str.equals() /單純顯示信息,用showmessagedialog方法 joptionpane.showmessagedialog(null, 不能為空!,錯(cuò)誤, joptionpane.error_message); /把str的值強(qiáng)制轉(zhuǎn)換為整型并賦給i int i=integer.parseint(str); /判斷玩家輸入值與隨機(jī)數(shù)大小,小了則給出對(duì)話框提示“小了”,大了則提示“大了” if(irnd) javax.swing.joptionpane.showmessagedialog(null,大了);

23、else /猜對(duì)后,根據(jù)猜測(cè)次數(shù)給出相應(yīng)的評(píng)價(jià) if(counter5) javax.swing.joptionpane.showmessagedialog(null,恭喜你猜對(duì)了!n你猜了 + counter + 次!); else joptionpane.showmessagedialog(null,成功!n你只猜了 + counter + 次!n你真是太棒了!); system.exit(0); counter+; 5 測(cè)試分析程序運(yùn)行界面如下:(1)輸入對(duì)話框:當(dāng)程序運(yùn)行時(shí)自動(dòng)彈出的對(duì)話框,要求輸入一個(gè)數(shù)字(2)輸入不是數(shù)字時(shí):當(dāng)輸入的不是數(shù)字是會(huì)彈出錯(cuò)誤輸入的對(duì)話框(3)輸入為空時(shí):

24、沒有輸入按了確定時(shí),彈出不能為空的對(duì)話框(4)輸入的數(shù)比隨機(jī)數(shù)大或小時(shí):當(dāng)輸入的數(shù)比計(jì)算機(jī)產(chǎn)生的隨機(jī)數(shù)大了時(shí)彈出對(duì)話框,提示“大了”或“小了”,按確定后再重新輸入直到猜對(duì)(5)輸入正確時(shí):當(dāng)輸入數(shù)字跟計(jì)算機(jī)產(chǎn)生的隨機(jī)數(shù)相同時(shí),給出對(duì)話框,提示成功,并給出評(píng)語6 課程設(shè)計(jì)總結(jié)這次課程設(shè)計(jì)的成功來之不易,一路艱辛坎坷,由最初接到課題時(shí)的茫然不知如何動(dòng)手,到后來和幫我的同學(xué)鉆研探討后一步步接近成功,有喜有猶,有了新的思路時(shí)興奮得拍手,發(fā)現(xiàn)思路行不通或發(fā)現(xiàn)編寫程序出的一個(gè)個(gè)錯(cuò)誤時(shí)愁眉苦臉,真讓我痛并快樂著這種努力鉆研剔除一個(gè)個(gè)錯(cuò)誤后一步步接近成功的經(jīng)驗(yàn),是我最大的收獲,讓我有了屢敗屢戰(zhàn)的優(yōu)秀品質(zhì)。通過這次課程設(shè)計(jì)我的jave編程熟練了很多,我想感謝我的指導(dǎo)老師許老師,感謝老師的細(xì)心認(rèn)真的輔導(dǎo),他的幫助讓我從開始的一片茫然到后來的豁然開朗。這次課程設(shè)計(jì)能夠順利的完成,除了我個(gè)人的努力,還有同學(xué)的幫助,同時(shí)也離不開指導(dǎo)老師的答疑解惑。參考文獻(xiàn)1 李尊朝,蘇軍java語言程序設(shè)計(jì)(第二版)北京:中國(guó)鐵道出版社,20072 印昊java與面向?qū)ο蟪绦蛟O(shè)計(jì)教程北京:高等教育出版社,19993 耿祥義,張躍平j(luò)ava2 實(shí)用教程(第二版)北京:清華大學(xué)出版社,20064 黃同成,黃俊民,董

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論