




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
工學(xué)院Java語(yǔ)言與面向?qū)ο笳n程設(shè)計(jì)報(bào)告(2014年秋學(xué)期)記憶測(cè)試系統(tǒng)學(xué)院:專業(yè)班級(jí):**:**:指導(dǎo)教師:永平2015年1月24日目錄題目簡(jiǎn)介…………12.設(shè)計(jì)的容、要求和目標(biāo)…………………23.總體設(shè)計(jì)…………44.詳細(xì)設(shè)計(jì)…………75.運(yùn)行調(diào)試…………76.總結(jié)………………7附錄………21一、題目簡(jiǎn)介記憶測(cè)試系統(tǒng)通過(guò)回憶法測(cè)試記憶能力測(cè)試手段分為初級(jí)中級(jí)高級(jí)三個(gè)級(jí)別。二、設(shè)計(jì)的容、要求和目標(biāo)我設(shè)計(jì)的記憶測(cè)試系統(tǒng)除了要編寫的6個(gè)java文件所給的類外還需在添加一些功能如添加圖標(biāo)改良測(cè)試條件添加音樂(lè)功能使程序有翻開(kāi)一樣的圖標(biāo)是播放一段音樂(lè)同時(shí)播放另一段音樂(lè)等。列出菜單有選擇級(jí)別選擇圖標(biāo)成績(jī)記憶榜在菜單下有M*N個(gè)圖標(biāo)隨機(jī)分布點(diǎn)擊一個(gè)圖標(biāo)被保存下來(lái)點(diǎn)擊下一個(gè)圖標(biāo)時(shí)與上一個(gè)圖標(biāo)比圖標(biāo)一樣而方塊不同則success加1反之則不變當(dāng)點(diǎn)擊六個(gè)一樣的圖標(biāo)時(shí)記錄所需的時(shí)間保存在成績(jī)記憶排行榜中點(diǎn)擊成績(jī)排行榜可登陸成績(jī)且會(huì)給成績(jī)排行由高到低。設(shè)計(jì)要求如下:1.單擊“選擇級(jí)別〞菜單可以選擇初級(jí)中級(jí)高級(jí)。2.單擊“查看排行榜〞菜單可以查看記憶榜通過(guò)記憶榜存儲(chǔ)每個(gè)級(jí)別的成績(jī)。3.選擇級(jí)別后將出項(xiàng)相應(yīng)級(jí)別的測(cè)試區(qū)。測(cè)試區(qū)由M*N個(gè)方塊組成程序通過(guò)設(shè)置M和N的值來(lái)確定相應(yīng)的測(cè)試級(jí)別例如對(duì)于初級(jí)級(jí)別M=5N=6.每個(gè)方塊上都有一個(gè)圖標(biāo)但該圖標(biāo)默認(rèn)不可見(jiàn)。用鼠標(biāo)當(dāng)即測(cè)試區(qū)中的任何一個(gè)方塊則計(jì)時(shí)器開(kāi)場(chǎng)啟動(dòng)同時(shí)該方塊上的圖標(biāo)將顯示出來(lái)。4.M*N個(gè)方塊組成的測(cè)試區(qū)中有M個(gè)圖標(biāo)每個(gè)圖標(biāo)重復(fù)出現(xiàn)N次并且隨機(jī)分布在測(cè)試區(qū)中的M*N個(gè)方塊上。用戶必須用鼠標(biāo)連續(xù)單擊出N個(gè)圖標(biāo)一樣的方塊也就是說(shuō)如果用戶已經(jīng)用鼠標(biāo)連續(xù)單擊出P個(gè)圖標(biāo)一樣的方塊當(dāng)再單擊另一個(gè)方塊時(shí)如果該方塊的圖標(biāo)和上一個(gè)的一樣則該方塊的圖標(biāo)和前P次單擊出的方塊的圖標(biāo)仍然可見(jiàn)否則前P次單擊出的方塊的圖標(biāo)全都變得不可見(jiàn)只有當(dāng)前單擊的方塊的圖標(biāo)可見(jiàn)。5.測(cè)試區(qū)能顯示用戶的用時(shí)并根據(jù)級(jí)別的不同提示用戶必須用鼠標(biāo)連續(xù)單擊出多少個(gè)圖標(biāo)一樣的方塊。6.測(cè)試區(qū)有提示圖標(biāo)所在位置的功能。用戶單擊測(cè)試區(qū)中的“提示〞按鈕后測(cè)試區(qū)將持續(xù)1.2秒為用戶顯示全部方塊上的圖標(biāo)。用戶每單擊一次“提示〞按鈕用戶的用時(shí)將增加10秒。7.連續(xù)單擊出級(jí)別所要求的假設(shè)干個(gè)圖標(biāo)一樣的方塊后將彈出保存成績(jī)的對(duì)話框用戶可以通過(guò)該對(duì)話框選擇是否將自己的成績(jī)保存到成績(jī)表中。8.單擊“選擇圖標(biāo)〞菜單可重新選擇方塊的圖標(biāo)樣式即可以重新選擇M個(gè)圖標(biāo)。設(shè)計(jì)目標(biāo)可以選擇級(jí)別圖標(biāo)當(dāng)用戶游戲完畢后可以選擇是否保存成績(jī)連續(xù)點(diǎn)擊六個(gè)一樣的圖標(biāo)可見(jiàn)連續(xù)一樣的圖標(biāo)播放一段音樂(lè)同播放另一段音樂(lè)。當(dāng)用戶不清楚一樣圖標(biāo)的位置時(shí)可以按“提示〞按鈕將會(huì)對(duì)用戶進(jìn)展提示信息。設(shè)計(jì)目標(biāo):可以選擇級(jí)別圖標(biāo)當(dāng)用戶游戲完畢后可以選擇是否保存成績(jī)連續(xù)點(diǎn)擊六個(gè)一樣的圖標(biāo)可見(jiàn)連續(xù)一樣的圖標(biāo)播放一段音樂(lè)不同播放另一段音樂(lè)。當(dāng)用戶不清楚一樣圖標(biāo)的位置時(shí)可以按“提示〞按將會(huì)對(duì)用戶進(jìn)展提示信息。三、總體設(shè)計(jì)測(cè)試系統(tǒng)中可以編寫6個(gè)java源文件MenoryGame.java,MenoryTestArea.java,Block,java,People.java,Record.java和ShowRecordDialog.java。記憶測(cè)試系統(tǒng)除了上述7個(gè)Java源文件產(chǎn)生的類外還需要Java系統(tǒng)提供的一些重要的類。記憶測(cè)試系統(tǒng)所用到的一些重要的類以及之間的組合關(guān)系如圖1所示。MemoryGameMemoryGameStringFileMemoryTestAreaShowRecordDialogFlieTreeSet<people>ArrayList<Blosck>StringRecordTimerFileThread圖1以下是六個(gè)源文件的總體設(shè)計(jì)1.MenoryGame類責(zé)創(chuàng)立記憶測(cè)試系統(tǒng)的主窗口該類含有main方法記憶測(cè)試系統(tǒng)從該類開(kāi)場(chǎng)執(zhí)行。MenoryGame類有四種重要類型的對(duì)象分別是String,F(xiàn)lie,MenoryTestArea和ShowRecordDialog對(duì)象。MenoryGame類創(chuàng)立的窗口對(duì)象以及其中的主要成員對(duì)象。MenoryGame類的主要成員的作用將在后面的詳細(xì)設(shè)計(jì)中闡述。2.MenoryTestArea.javaMenoryTestArea類是主類MenoryGame窗口中的一個(gè)Jpanel容器所創(chuàng)立的對(duì)象稱為測(cè)試區(qū)這個(gè)測(cè)試區(qū)被添加到MenoryGame窗口的中心。MenoryTestArea類主要有六個(gè)種類型的成員ArrayList<Block>,String,Record,Timer,File和Thread對(duì)象MenoryTestArea類的主要成員的作用將在后面的詳細(xì)的設(shè)計(jì)中闡述。3.Block.javaBlock類是utton的子類負(fù)責(zé)為MenoryTestArea類中ArrayList<Block>數(shù)組表提供Block對(duì)象。4.Record.javaRecord類是java*.swing包中Jdialog對(duì)話框的子類當(dāng)用戶成功單擊出相應(yīng)的級(jí)別所要求的圖標(biāo)一樣的方塊后Record創(chuàng)立的對(duì)象負(fù)責(zé)保存用戶的名字和成績(jī)到相應(yīng)的級(jí)別文件中。5.ShowRecordDialog.javaShowRecordDialog類java*.swing包中Jdialog對(duì)話框的子類當(dāng)用戶單擊“查看排行榜〞時(shí)ShowRecordDialog創(chuàng)立負(fù)責(zé)顯示用戶的成績(jī)。6.People.javaPeople對(duì)象封裝用戶的名字和成績(jī)以便ShowRecordDialog對(duì)象可以按成績(jī)的上下排序用戶。四詳細(xì)設(shè)計(jì)4.1操作界面設(shè)計(jì)如圖2所示:圖24.2類成員變量及方法設(shè)計(jì):〔一〕MemoryGame類成員變量:Bar是JmenuBar類創(chuàng)立的菜單條可以向bar中添加菜單。menuGradeBar和menuIcon是Jmenu類創(chuàng)立的三個(gè)菜單這三個(gè)菜單的名稱分別是“選擇級(jí)“查看排行榜〞“選擇圖標(biāo)〞。oneGradeItemtwoGradeItem和threeGradeItem是JmenuItem類創(chuàng)立的三個(gè)菜單項(xiàng)被添加到menuGrade菜單中這三個(gè)菜單項(xiàng)的名稱分別是“初級(jí)〞“中級(jí)〞“高級(jí)〞。oneGradeResulttwoGradeResult和threeGradeResult是JmenuItem類創(chuàng)立的三個(gè)菜單項(xiàng)被添加到menuResult菜單中。這三個(gè)菜單項(xiàng)的名稱分別是“初級(jí)排行榜〞“中級(jí)排行榜〞“高級(jí)排行榜〞。carImageIcon和animalImageIcon是JmenuItem類創(chuàng)立的兩個(gè)菜單項(xiàng)被添加到menuIcon菜單中。這兩個(gè)菜單項(xiàng)的名稱分別是“汽車圖標(biāo)〞“動(dòng)物圖標(biāo)〞。fileOneGradefileTwoGradefilethreeGrade和gradeFile是File類創(chuàng)立的四個(gè)文件對(duì)象。fileOneGradeileTwoGrade和filethreeGrade三個(gè)文件對(duì)象所引用的文件分別是“初級(jí)排行榜.t*t〞,“中級(jí)排行榜.t*t〞“高級(jí)排行榜.t*t〞分別用來(lái)寫入三個(gè)級(jí)別的成績(jī)。gradeFlie可以是fileOneGradefileTwoGrade和filethreeGrade中的*一個(gè)。imageName是String類型的數(shù)組每個(gè)單元是一個(gè)圖像文件的名字。menoryArea是測(cè)試區(qū)對(duì)象由MenoryArea類負(fù)責(zé)創(chuàng)立。showDialog是負(fù)責(zé)顯示成績(jī)的對(duì)話框由ShowRecordDialog類負(fù)責(zé)創(chuàng)立m和n是int型數(shù)據(jù)其值可以確定相應(yīng)級(jí)別中測(cè)試區(qū)中方塊的數(shù)量例如對(duì)于中級(jí)水平m=6,n=7,測(cè)試區(qū)一共有42方塊。方法:actionPerformed〔ActionEvent〕方法是MenoryGame類實(shí)現(xiàn)的ActionListener接口中的方法負(fù)責(zé)執(zhí)行菜單項(xiàng)發(fā)出的有關(guān)命令。用戶選擇菜單中的菜單項(xiàng)可觸發(fā)ActionEvent事件導(dǎo)致actionPerformed〔ActionEvent〕方法執(zhí)行相應(yīng)的操作。MenoryGame〔〕是構(gòu)造方法負(fù)責(zé)完成窗口的初始化。main(String[])方法是軟件運(yùn)行的入口方法?!捕矼emoryTestArea類成員變量:row和col的值確定測(cè)試區(qū)中方塊的數(shù)量。MemoryTestArea類創(chuàng)立的對(duì)象memoryArea是MemoryGame中的成員memoryArea對(duì)象通過(guò)調(diào)用initBlock(int,int,String[],File)方法將MemoryGame類中m和n的值傳遞給row和col。usedTime是用戶的用時(shí)單位是秒。success的值是用戶找到的具有同樣的圖標(biāo)的方塊的個(gè)數(shù)gradeFiel是級(jí)別文件memoryArea對(duì)象通過(guò)調(diào)用initBlock(int,int,String[],Fil)方法將MemoryGame類中的gradeFile的引用傳遞給MemoryGame類中的gradeFile的引用傳遞給memoryArea對(duì)象中的gradeFile。數(shù)組表allBlockList單元的個(gè)數(shù)是row和col的乘積它的每個(gè)單元存放著一個(gè)Block對(duì)象。memoryArea對(duì)象在調(diào)用initBlock〔int,int,String[],F(xiàn)ile〕方法時(shí)完成對(duì)allBlockList單元的初始化,即創(chuàng)立單元中的Block對(duì)象。字符串?dāng)?shù)組imageFileName中的每個(gè)單元是一幅圖像文件的名字。memoryArea對(duì)象通過(guò)調(diào)用setIMageName〔String[]〕方法將MemoryGame中存放圖像文件名字的imageName數(shù)組的引用傳遞給imageFileName。鏈表openIconList用來(lái)存放用戶找到圖標(biāo)一樣的方塊上的圖標(biāo)。鏈表openBlockList用來(lái)存放用戶找到圖標(biāo)一樣的方塊。hintThread是用Thread類創(chuàng)立的線程對(duì)象用來(lái)提示測(cè)試區(qū)中的Block上的圖標(biāo)提示方式是將測(cè)試區(qū)中的各個(gè)Block上圖標(biāo)持續(xù)顯示1200毫秒。hintButton是注冊(cè)ActionEvent事件的監(jiān)視器,當(dāng)單擊它時(shí)啟動(dòng)hintThread線程。showUsedTime顯示用戶的用時(shí)即顯示usedTime的值。hintMessage根據(jù)不同的級(jí)別顯示相應(yīng)的提示信息.如該級(jí)別需要用戶尋找的一樣圖標(biāo)方塊的數(shù)目。timer是計(jì)時(shí)器負(fù)責(zé)改變usedTime的值。record負(fù)責(zé)提供保存成績(jī)的界是一個(gè)對(duì)話框默認(rèn)不可見(jiàn)。當(dāng)用戶尋找出級(jí)別所要求的一樣圖標(biāo)方塊的數(shù)目后該對(duì)話框可見(jiàn)用戶可以在該對(duì)話框中輸入并保存所輸入的和usedTime的值到gradeFile指定的級(jí)別文件中。方法:MemoryTestArea是構(gòu)造方法創(chuàng)立memoryArea對(duì)象時(shí)需使用該構(gòu)造方法。initBlock〔int,int,String[]File〕方法。memoryArea對(duì)象調(diào)用該方法將參數(shù)的值傳遞給row,colimageFileName和gradeFile并依據(jù)這些值設(shè)置allBlockListList數(shù)組表的大小然后創(chuàng)立allBlockList的單元中的Block對(duì)象并設(shè)置Block對(duì)象上的圖標(biāo)。setImageName〔String[]〕方法。memoryArea對(duì)象調(diào)用該方法可以將MemoryGame中的存放圖像文件名字的imageName數(shù)組的引用傳遞給imageFileName。當(dāng)用戶單擊MemoryGame主類窗口的carImageIcon和animalImageIcon菜單項(xiàng)時(shí)memoryArea對(duì)象將調(diào)用該方法把存放圖像文件名字的imageName數(shù)組的引用傳遞給imageFileName。ionPerformed〔ActionEvent〕方法。該方法是MemoryARea類實(shí)現(xiàn)的ActionListener接口中的方法。memoryArea中的每個(gè)Block對(duì)象都注冊(cè)了ActionEvent事件監(jiān)聽(tīng)器當(dāng)用戶單擊memoryArea中的*個(gè)Block對(duì)象時(shí)actionPerformed〔ActionEVent〕方法將被調(diào)用執(zhí)行所執(zhí)行的主要操作是如果該Block看對(duì)象未顯示圖標(biāo)并且該Block對(duì)象設(shè)置的圖標(biāo)和openIconList的中存放的圖標(biāo)一樣就將該圖標(biāo)添加到鏈表opemIconList中同時(shí)將該Block對(duì)象上的圖標(biāo)顯示出來(lái)并將success的值增1如果該Block對(duì)象未顯示圖標(biāo)并且該Block對(duì)象設(shè)置的圖標(biāo)和openIconList的中存放的圖標(biāo)不一樣就將openIconList清空然后再將該圖標(biāo)添加到鏈表opemIconList中同時(shí)將該Block對(duì)象上的圖標(biāo)顯示出來(lái)并將success的值設(shè)置成1.當(dāng)用戶單擊hintButton按鈕時(shí)actionPerfomed〔ActionEVent〕方法將被調(diào)用執(zhí)行執(zhí)行的主要操作是啟動(dòng)hintThread線程?!踩矪lcok類成員變量:openStateIcon是方塊上的圖標(biāo)方法:Block對(duì)象調(diào)用setOpenStateIcon〔ImageIcon〕方法可以設(shè)置它上面的圖標(biāo)。Block對(duì)象調(diào)用getOpenStateIcon〔〕方法可以獲得它上面的圖標(biāo)〔四〕ShowRecordDialog類ShowRecorDialog效果圖如圖3所示:圖3成員變量:gradeFile是對(duì)話框要讀取的文件該文件存儲(chǔ)成績(jī)。clear是注冊(cè)了ActionEVent事件的按鈕。showArea文本區(qū)顯示對(duì)話框從gradeFile文件中讀出的成績(jī)。treeSet負(fù)責(zé)將成績(jī)按上下排序。方法:ShowRecordDialog()是構(gòu)造方法負(fù)責(zé)創(chuàng)立showDialog對(duì)象setGradeFile(File)方法。ShowRecordDialog類創(chuàng)立的ShowRecordDialog對(duì)話框是主類MemoryGame窗口中的一個(gè)成員。當(dāng)用戶選擇窗口上的“查看排行榜〞菜單中的菜單項(xiàng)是ShowRecordDialog對(duì)話框調(diào)用setGradeFile(File)方法將相應(yīng)的級(jí)別文件傳遞給gradeFile。showRecord()方法。ShowRecordDialog對(duì)話框調(diào)用該方法讀取gradeFile文件中的成績(jī)?yōu)榱藢⒊煽?jī)按上下順序顯示在showArea()文本區(qū)中showRecord方法根據(jù)讀取的名字和該名字的對(duì)應(yīng)成績(jī)創(chuàng)立一個(gè)People對(duì)象存放在treeSet數(shù)集中。actionPerformed(ActionEVent)是ZctionListener接口中的方clear注冊(cè)了ActionEVent事件當(dāng)用戶單擊clear按鈕時(shí)actionPerform(ActionEvent)方法被調(diào)用執(zhí)行所執(zhí)行的操作是去除gradeFile文件中的容。(五)People類成員變量:name是用戶的名字time是用戶的用時(shí)方法:getTime()方法返回timegetName方法返回namepareTo(Object)是parable接口中的方法,其操作是確定People對(duì)象的大小關(guān)系(六)Record類成員變量:Time是用戶的用時(shí)。yourName是用戶用來(lái)輸入名字的文本框。enter和cancel是按鈕對(duì)象用戶單擊center按鈕可以保存成績(jī)單擊cancel按鈕可以放棄保存成績(jī)。gradeFile是級(jí)別文件。方法:Record()是構(gòu)造方法負(fù)責(zé)創(chuàng)立record對(duì)象。setGradeFile(File)方法。Record類創(chuàng)立的Record對(duì)話框測(cè)試區(qū)MemoryTestArea中的一個(gè)成員。當(dāng)用戶成功單擊出相應(yīng)級(jí)別所要求的圖標(biāo)一樣的方塊后,測(cè)試區(qū)彈出Record對(duì)話框Record對(duì)話框?qū)⒄{(diào)用setGradeFile(File)方法將測(cè)試區(qū)中的級(jí)別文件傳遞給Record對(duì)話框中g(shù)radeFile。setTime(int)方法。當(dāng)用戶成功單擊出相應(yīng)級(jí)別所要求的圖標(biāo)一樣的方塊后測(cè)試區(qū)彈出Record對(duì)話框Record對(duì)話框?qū)⒄{(diào)用setTime(int)方法將測(cè)試區(qū)記錄的用戶用時(shí)傳遞個(gè)Record對(duì)話框中的time。actionPerformed(ActionEvent)是ActionListener接口中的方法enter和cancel按鈕注冊(cè)ActionEvent事件當(dāng)用戶單擊enter時(shí)actionPerformed(ActionEvent)方法別提調(diào)用執(zhí)行其操作時(shí)將用戶在文本框youName中輸入的名字以及time的只保存到gradeFile文件中然后關(guān)閉當(dāng)前對(duì)話框當(dāng)用戶單擊cancer按鈕時(shí),actionPerformed(ActionEvent)方法別調(diào)用執(zhí)行,其操作及時(shí)關(guān)閉當(dāng)前對(duì)話框。五、運(yùn)行調(diào)試主界面如圖4:圖4測(cè)試去效果圖如圖5:圖5六、總結(jié)通過(guò)兩個(gè)周對(duì)Java程序設(shè)計(jì)的學(xué)習(xí),我們對(duì)Java語(yǔ)言有了更進(jìn)一步的了解,知道了如何運(yùn)用以前學(xué)過(guò)的知識(shí)來(lái)完本錢次課程設(shè)計(jì)。我們小組選擇了"記憶測(cè)試系統(tǒng)"的設(shè)計(jì),主要實(shí)現(xiàn)記憶力的測(cè)試,主要分為初級(jí)記憶力的測(cè)試、中級(jí)記憶力的測(cè)試和高級(jí)記憶力的測(cè)試等功能。選擇這個(gè)題目時(shí)感覺(jué)有點(diǎn)困難好似無(wú)從下手根本上沒(méi)有一個(gè)具體的設(shè)計(jì)思路。因此我們先對(duì)小組成員進(jìn)展分工,明確好各自的主要任務(wù),然后分頭查閱資料,上網(wǎng)搜索相關(guān)線索每個(gè)人的工作做好之后再由組長(zhǎng)用一個(gè)主函數(shù)連接起來(lái)進(jìn)展整個(gè)程序的調(diào)試運(yùn)行最后我們也順利的完成了"記憶測(cè)試系統(tǒng)"的設(shè)計(jì)且得到了同學(xué)們的認(rèn)可和喜愛(ài)。對(duì)于整個(gè)程序的流程構(gòu)架、主界面的布局、數(shù)據(jù)的保存和去除等開(kāi)場(chǎng)時(shí)我們并沒(méi)有十足的把握,但是因?yàn)橹拔覀冊(cè)趫D書館查閱了很多的資料也上網(wǎng)搜索了很多這方面的解決方案方法。在課程設(shè)計(jì)的第一個(gè)星期里我們就順利地把代碼組織并編寫好了。在連接所有的類的時(shí)候遇到了一點(diǎn)問(wèn)題不過(guò)在教師的指導(dǎo),我們都把它解決了。在課程設(shè)計(jì)的前一個(gè)周,我們就把整個(gè)程序順利地運(yùn)行出來(lái)了,心里感到無(wú)比的興奮與沖動(dòng)。在這個(gè)過(guò)程中我們運(yùn)用了我們平時(shí)所學(xué)的知識(shí)查閱了大量的資料。在其中我們得到了意志的鍛煉在反復(fù)的操作中我們不斷成長(zhǎng)在收獲成功的同時(shí)我們更得到了Java上機(jī)編程的深切體會(huì)和豐厚的編程經(jīng)歷。接下來(lái),經(jīng)過(guò)小組的認(rèn)真思考、分析和討論在教師的指導(dǎo)下我們對(duì)系統(tǒng)功能的缺乏之處給予了最后的完善。在辯論的過(guò)程中在教師的提問(wèn)下,我們分別把自己的設(shè)計(jì)思想講解給教師聽(tīng),同時(shí)認(rèn)真的聽(tīng)取教師的意見(jiàn)和建議,很多問(wèn)題都得到了與教師的認(rèn)可和贊同。時(shí)間是短暫的,但收獲是豐厚的。經(jīng)過(guò)這樣兩周的課程設(shè)計(jì)我們對(duì)Java程序設(shè)計(jì)的知識(shí)又重新穩(wěn)固了,特別對(duì)程序的調(diào)試運(yùn)行有了更深刻的體會(huì)。這次的課程設(shè)計(jì)給了我們一個(gè)把學(xué)習(xí)到的知識(shí)付諸于實(shí)踐的時(shí)機(jī)只有把理論與實(shí)際相結(jié)合才能做出讓人耳目一新的Java應(yīng)用程序來(lái)。附錄:程序清單MenoryGameimportjava*.swing.*;importjava.awt.*;importjava.awt.event.*;importjava.io.*;importjava.util.LinkedList;publicclassMemoryGamee*tendsJFrameimplementsActionListener{JMenuBarbar;//創(chuàng)立一個(gè)菜單條barJMenumenuGrade,menuResult,menuIcon;//創(chuàng)立3個(gè)菜單項(xiàng)選擇擇級(jí)別、查看排行榜、選擇圖標(biāo)JMenuItemoneGradeItem,twoGradeItem,threeGradeItem;//添加到menuGrade中,初級(jí)、中級(jí)高級(jí)JMenuItemoneGradeResult,twoGradeResult,threeGradeResult;JMenuItemcarImageIcon,animalImageIcon,huaImageIcon;//創(chuàng)立菜單項(xiàng)FilefileOneGrade,fileTwoGrade,fileThreeGrade,gradeFile;//創(chuàng)立文件其中g(shù)radeFile可以是前三個(gè)中的任意一個(gè)StringimageName[];//每個(gè)單元是一個(gè)圖像文件的名字MemoryTestAreamemoryArea;ShowRecordDialogshowDiolag=null;//負(fù)責(zé)顯示成績(jī)的對(duì)話框intm=5,n=6;//m,n確定相應(yīng)級(jí)別中測(cè)試區(qū)中方塊的數(shù)量默認(rèn)等級(jí)為初級(jí)finalintimageNumber=7;//構(gòu)造方法MemoryGame(){fileOneGrade=newFile("初入江湖記憶排行榜.t*t");fileTwoGrade=newFile("人在江湖記憶排行榜.t*t");fileThreeGrade=newFile("高手如云記憶排行榜.t*t");bar=newJMenuBar();menuGrade=newJMenu("選擇級(jí)別");oneGradeItem=newJMenuItem("初入江湖");twoGradeItem=newJMenuItem("人在江湖");threeGradeItem=newJMenuItem("高手如云");menuGrade.add(oneGradeItem);//將菜單項(xiàng)添加到菜單menuGrade.add(twoGradeItem);menuGrade.add(threeGradeItem);menuResult=newJMenu("風(fēng)云榜");oneGradeResult=newJMenuItem("初入江湖排行榜");twoGradeResult=newJMenuItem("人在江湖排行榜");threeGradeResult=newJMenuItem("高手如云排行榜");menuResult.add(oneGradeResult);menuResult.add(twoGradeResult);menuResult.add(threeGradeResult);menuIcon=newJMenu("選擇圖標(biāo)");carImageIcon=newJMenuItem("種類一");animalImageIcon=newJMenuItem("種類二");huaImageIcon=newJMenuItem("花圖標(biāo)");animalImageIcon.addActionListener(this);//添加監(jiān)視器carImageIcon.addActionListener(this);huaImageIcon.addActionListener(this);menuIcon.add(carImageIcon);menuIcon.add(animalImageIcon);menuIcon.add(huaImageIcon);bar.add(menuGrade);//將菜單添加到菜單條bar.add(menuResult);bar.add(menuIcon);setJMenuBar(bar);oneGradeItem.addActionListener(this);twoGradeItem.addActionListener(this);threeGradeItem.addActionListener(this);oneGradeResult.addActionListener(this);twoGradeResult.addActionListener(this);threeGradeResult.addActionListener(this);if(!fileOneGrade.e*ists()){//是否存在**文件,不存在創(chuàng)立此文件try{fileOneGrade.createNewFile();}catch(IOE*ceptione*p){}}if(!fileTwoGrade.e*ists()){try{fileTwoGrade.createNewFile();}catch(IOE*ceptione*p){}}if(!fileThreeGrade.e*ists()){try{fileThreeGrade.createNewFile();}catch(IOE*ceptione*p){}}setBounds(100,100,400,360);this.setSize(newDimension(700,400));setVisible(true);memoryArea=newMemoryTestArea();imageName=newString[imageNumber];//設(shè)置默認(rèn)情況下為初級(jí)汽車圖標(biāo)for(inti=0;i<imageName.length;i++){imageName[i]=newString("car"+i+".jpg");}m=5;n=6;gradeFile=fileOneGrade;memoryArea.initBlock(m,n,imageName,gradeFile);add(memoryArea,BorderLayout.CENTER);showDiolag=newShowRecordDialog();validate();setDefaultCloseOperation(JFrame.E*IT_ON_CLOSE);//退出應(yīng)用程序關(guān)閉窗口..}//事件處理publicvoidactionPerformed(ActionEventevent){if(event.getSource()==oneGradeItem){m=5;n=6;gradeFile=fileOneGrade;memoryArea.initBlock(m,n,imageName,gradeFile);}if(event.getSource()==twoGradeItem){m=6;n=7;gradeFile=fileTwoGrade;memoryArea.initBlock(m,n,imageName,gradeFile);}if(event.getSource()==threeGradeItem){m=7;n=8;gradeFile=fileThreeGrade;memoryArea.initBlock(m,n,imageName,gradeFile);}if(event.getSource()==carImageIcon){for(inti=0;i<imageName.length;i++){imageName[i]=newString("car"+i+".jpg");}memoryArea.setImageName(imageName);memoryArea.initBlock(m,n,imageName,gradeFile);}if(event.getSource()==animalImageIcon){for(inti=0;i<imageName.length;i++){imageName[i]=newString("ani"+i+".jpg");}memoryArea.setImageName(imageName);memoryArea.initBlock(m,n,imageName,gradeFile);}if(event.getSource()==huaImageIcon){for(inti=0;i<imageName.length;i++){imageName[i]=newString("hua"+i+".jpg");}memoryArea.setImageName(imageName);memoryArea.initBlock(m,n,imageName,gradeFile);}if(event.getSource()==oneGradeResult){showDiolag.setGradeFile(fileOneGrade);showDiolag.showRecord();showDiolag.setVisible(true);}if(event.getSource()==twoGradeResult){showDiolag.setGradeFile(fileTwoGrade);showDiolag.showRecord();showDiolag.setVisible(true);}if(event.getSource()==threeGradeResult){showDiolag.setGradeFile(fileThreeGrade);showDiolag.showRecord();showDiolag.setVisible(true);}}publicstaticvoidmain(Stringargs[]){newMemoryGame();//構(gòu)造方法,負(fù)責(zé)完成窗口的初始化}}MenoryTestAreaimportjava*.swing.*;importjava.awt.event.*;importjava.awt.*;importjava.util.*;importjava.io.*;importjava.applet.*;import.*;publicclassMemoryTestAreae*tendsJPanelimplementsActionListener,Runnable{//實(shí)現(xiàn)ActionListener和,Runnable接口,所創(chuàng)立的對(duì)象introw,col;FilegradeFile;ArrayList<Block>allBlockList;//數(shù)組表allBlockList每個(gè)單元存放一個(gè)Block對(duì)象StringimageFileName[];//字符串?dāng)?shù)組**中每個(gè)單元是一幅圖像文件的名字LinkedList<ImageIcon>openIconList;LinkedList<Block>openBlockList;//java.util的類LinkedList<E>列表主要方法為//add(Ee)將指定元素添加到此列表的結(jié)尾。intsuccess=0;//用戶找到的具有同樣的方塊的個(gè)數(shù)ThreadhintThead;//用來(lái)提示測(cè)試區(qū)中的Block對(duì)象uttonhintButton,pauze,kk,restart;//聲明各個(gè)按鈕intusedTime=0;JTe*tFieldshowUsedTime,hintMessage;java*.swing.Timertimer;Recordrecord;JPanelcenter,south,north;FilemusicFile;URIuri;URLurl;AudioClipclip;Booleantimerisstart=false;//定義一個(gè)布爾值來(lái)判斷計(jì)時(shí)是否開(kāi)場(chǎng)MemoryTestArea(){setLayout(newBorderLayout());//布局設(shè)置allBlockList=newArrayList<Block>();openIconList=newLinkedList<ImageIcon>();openBlockList=newLinkedList<Block>();hintThead=newThread(this);hintMessage=newJTe*tField();hintMessage.setHorizontalAlignment(JTe*tField.CENTER);//設(shè)置文本對(duì)齊方式hintMessage.setEditable(false);//不可編輯hintMessage.setFont(newFont("宋體",Font.BOLD,18));//字體設(shè)置//設(shè)置三個(gè)容器center=newJPanel();south=newJPanel();north=newJPanel();hintButton=newutton("提示");pauze=newutton("暫停游戲");kk=newutton("繼續(xù)游戲");restart=newutton("重新開(kāi)場(chǎng)");hintButton.addActionListener(this);kk.addActionListener(this);//為繼續(xù)游戲按鈕添加事件監(jiān)聽(tīng)pauze.addActionListener(this);//為暫停游戲按鈕添加事件監(jiān)聽(tīng)restart.addActionListener(this);showUsedTime=newJTe*tField(8);showUsedTime.setEditable(false);showUsedTime.setHorizontalAlignment(JTe*tField.CENTER);south.add(newJLabel("用時(shí):"));//在容器中添加標(biāo)簽south.add(showUsedTime);south.add(newJLabel("提示圖標(biāo)位置(導(dǎo)致次數(shù)增加):"));south.add(hintButton);north.add(pauze);north.add(kk);north.add(restart);north.add(hintMessage);add(south,BorderLayout.SOUTH);add(north,BorderLayout.NORTH);timer=newjava*.swing.Timer(1000,this);record=newRecord();//創(chuàng)立record文件,當(dāng)用戶成功完成時(shí)彈出對(duì)話框,寫入record//保存用戶游戲的游戲記錄}publicvoidinitBlock(intm,intn,Stringname[],Filef){row=m;col=n;gradeFile=f;center.removeAll();imageFileName=name;ImageIconicon[]=newImageIcon[imageFileName.length];for(inti=0;i<icon.length;i++){icon[i]=newImageIcon(imageFileName[i]);}if(allBlockList.isEmpty()){for(inti=0;i<row*col;i++){allBlockList.add(newBlock());}}else{allBlockList.clear();for(inti=0;i<row*col;i++){allBlockList.add(newBlock());}}for(inti=0;i<allBlockList.size();i++){allBlockList.get(i).addActionListener(this);////get()方法:get(intinde*)返回此列表中指定位置處的元素。allBlockList.get(i).setOpenStateIcon(icon[i%row]);/*調(diào)用Block的方法加載圖片:voidsetOpenStateIcon(ImageIconicon){openStateIcon=icon;}*/}Collections.shuffle(allBlockList);//隨機(jī)排列allBlockList中的節(jié)點(diǎn)center.setLayout(newGridLayout(row,col));for(inti=0;i<allBlockList.size();i++){center.add(allBlockList.get(i));}add(center,BorderLayout.CENTER);if(timer.isRunning()){timer.stop();}hintMessage.setTe*t("您需要用鼠標(biāo)單擊出"+col+"個(gè)同樣圖標(biāo)的方塊");usedTime=0;showUsedTime.setTe*t(null);validate();}publicvoidsetImageName(Stringname[]){imageFileName=name;}publicvoidactionPerformed(ActionEvente){ImageIconicon[]=newImageIcon[imageFileName.length];if(e.getSource()==pauze){timer.stop();for(inti=0;i<allBlockList.size();i++){allBlockList.get(i).setEnabled(false);}}if(e.getSource()==kk){timer.start();timerisstart=true;for(inti=0;i<allBlockList.size();i++){allBlockList.get(i).setEnabled(true);}}if(e.getSource()==restart){//設(shè)置重新開(kāi)場(chǎng)的按鈕。for(inti=0;i<allBlockList.size();i++){allBlockList.get(i).setOpenStateIcon(icon[i%row]);Collections.shuffle(allBlockList);//使用默認(rèn)隨機(jī)源對(duì)指定列表進(jìn)展置換}usedTime=0;timer.stop();hintMessage.setTe*t("請(qǐng)點(diǎn)擊等級(jí)選擇開(kāi)場(chǎng)游戲!");timerisstart=false;for(inti=0;i<allBlockList.size();i++){allBlockList.get(i).setEnabled(true);}}if(e.getSource()instanceofBlock)//它的作用是測(cè)試它左邊的對(duì)象是否是它右邊的類的實(shí)例,返回boolean類型的數(shù)據(jù)////判斷是否為Block對(duì)象;{if(!timer.isRunning())timer.start();Blockblock=(Block)e.getSource();ImageIconopenStateIcon=block.getOpenStateIcon();block.setIcon(openStateIcon);if(openIconList.size()==0){openIconList.add(openStateIcon);openBlockList.add(block);success=1;}else{ImageIcontemp=openIconList.getLast();if(temp==openStateIcon&&!(openBlockList.contains(block))){/*判斷表示"翻開(kāi)的圖片和第一個(gè)翻開(kāi)的圖片一樣,而且這個(gè)翻開(kāi)的圖片不是已經(jīng)翻開(kāi)的圖片這也就是要找出的"用戶成功翻開(kāi)一樣圖標(biāo)方塊"這個(gè)行為的判斷;*/success=success+1;/////////////////////////成功翻開(kāi)圖片時(shí)播放音樂(lè)///////////////////////////////try{musicFile=newFile("hello1.wav");uri=musicFile.toURI();url=uri.toURL();clip=Applet.newAudioClip(url);}catch(E*ceptionee){}clip.play();////////////////////////成功翻開(kāi)圖片時(shí)播放音樂(lè)///////////////////////////////openIconList.add(openStateIcon);openBlockList.add(block);if(success==col){for(inti=0;i<allBlockList.size();i++){allBlockList.get(i).setEnabled(false);}for(intj=0;j<openBlockList.size();j++){Blockb=openBlockList.get(j);b.setDisabledIcon(b.getOpenStateIcon());//設(shè)置對(duì)象b在不能激活狀態(tài)下的圖標(biāo)}timer.stop();record.setTime(usedTime);record.setGradeFile(gradeFile);record.setVisible(true);}}elseif((temp!=openStateIcon)&&(!(openBlockList.contains(block)))){/*判斷表示"翻開(kāi)的圖片和第一個(gè)翻開(kāi)的圖片不同,而且這個(gè)翻開(kāi)的圖片不是已經(jīng)翻開(kāi)的圖片這也就是要找出的"用戶翻開(kāi)不一樣圖標(biāo)方塊后"這個(gè)行為的判斷。*/openIconList.clear();openBlockList.clear();openIconList.add(openStateIcon);openBlockList.add(block);success=1;usedTime=usedTime+10;////////////////////////失敗翻開(kāi)圖片時(shí)播放音樂(lè)////////////////////////////try{musicFile=newFile("hello2.wav");uri=musicFile.toURI();url=uri.toURL();clip=Applet.newAudioClip(url);}catch(E*ceptionee){}clip.play();////////////////////////失敗翻開(kāi)圖片時(shí)播放音樂(lè)////////////////////////////for(inti=0;i<allBlockList.size();i++){if(allBlockList.get(i)!=block)allBlockList.get(i).setIcon(null);}}}}if(e.getSource()==hintButton){if(!hintThead.isAlive())hintThead=newThread(this);for(inti=0;i<allBlockList.size();i++)allBlockList.get(i).removeActionListener(this);usedTime=usedTime+10;try{hintThead.start();}catch(IllegalThreadStateE*ceptione*){}}if(e.getSource()==timer){usedTime++;showUsedTime.setTe*t("您的用時(shí):"+usedTime+"秒");}}publicvoidrun(){//實(shí)現(xiàn)Runnable接口的方法for(inti=0;i<allBlockList.size();i++)allBlockList.get(i).setIcon(allBlockList.get(i).getOpenStateIcon());try{Thread.sleep(1200);}catch(InterruptedE*ceptione*p){}for(inti=0;i<allBlockList.size();i++)allBlockList.get(i).addActionListener(this);for(inti=0;i<allBlockList.size();i++)if(!openBlockList.contains(allBlockList.get(i)))allBlockList.get(i).setIcon(null);}}Blockimportjava*.swing.*;importjava.awt.event.*;publicclassBlocke*tendsutton{ImageIconopenStateIcon;publicImageIcongetOpenStateIcon(){returnopenStateIcon;}publicvoidsetOpenStateIcon(ImageIconicon){openStateIcon=icon;}}Recordimportjava.io.*;importjava.util.*;importjava*.swing.*;importjava.awt.event.*;importjava.awt.*;publicclassRecorde*tendsJDialogimplementsActionListener{inttime=0;JTe*tFieldyourName;JLabellabel;uttonenter,cancel;FilegradeFile=null;publicRecord(){setBounds(100,100,330,160);setResizable(false);setModal(true);setVisible(false);//隱藏對(duì)話框enter=newutton("確定");cancel=newutton("取消");yourName=newJTe*tField(8);yourName.setTe*t("匿名");enter.addActionListener(this);cancel.addActionListener(this);setLayout(newGridLayout(2,1));label=newJLabel();add(label);JPanelp=newJPanel();p.add(yourName);p.add(enter);p.add(cancel);add(p);}publicvoidsetGradeFile(Filef){gradeFile=f;setTitle("保存成績(jī)到"+gradeFile.getName());label.setTe*t("保存成績(jī)到"+gradeFile.getName());validate();}publicvoidsetTime(inttime){this.time=time;}publicvoidactionPerformed(ActionEvente){if(e.getSource()==enter){LinkedList<People>list=newLinkedList<People>();try{RandomAccessFileout=newRandomAccessFile(gradeFile,"rw");out.seek(out.length());//定位讀寫位置out.writeUTF(yourName.getTe*t());//寫入你的名字out.writeInt(time);//記錄時(shí)間out.close();}catch(E*ceptionevent){}setVisible(false);}if(e.getSource()==cancel){setVisible(false);}}}ShowRecordDialogimportjava.io.*;importjava.util.*;importjava*.swing.*;importjava.awt.event.*;importjava.awt.*;publicclassShowRecordDialoge*tendsJDialogimplements
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 化學(xué)-云南省師范大學(xué)附屬中學(xué)2025屆高三下學(xué)期開(kāi)學(xué)考試試題和答案
- 2025年贛西科技職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)匯編
- 2025年廣東省安全員C證考試題庫(kù)
- 2025屆廣東省惠州市高三上學(xué)期三調(diào)化學(xué)試題及答案
- 辦公室裝修延期索賠起訴書
- 2025年度抵押車輛欠款債權(quán)轉(zhuǎn)讓及車輛抵押權(quán)變更協(xié)議書
- 2025年度征收城市經(jīng)濟(jì)適用房房屋拆遷補(bǔ)償合同
- 2025年度體育場(chǎng)地設(shè)施維修保養(yǎng)與使用維護(hù)協(xié)議
- 2025年貴州電子商務(wù)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)含答案
- 2025年度五星級(jí)酒店廚師團(tuán)隊(duì)聘用協(xié)議
- 產(chǎn)后疼痛管理指南
- 2025年安徽馬鞍山市兩山綠色生態(tài)環(huán)境建設(shè)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 工娛治療及其護(hù)理
- 人效管理措施
- 2024-2025學(xué)年人教部編版七年級(jí)上語(yǔ)文寒假作業(yè)(五)
- 四年級(jí)下冊(cè)勞動(dòng)《小小快遞站》課件
- 中國(guó)妊娠期糖尿病母兒共同管理指南(2024版)解讀
- 籃球教練職業(yè)生涯規(guī)劃
- 春節(jié)促銷活動(dòng)方案(7篇)
- 《股市的基礎(chǔ)常識(shí)》課件
- 行測(cè)圖形推理1000題庫(kù)帶答案
評(píng)論
0/150
提交評(píng)論