java課程設(shè)計實訓(xùn)報告-記憶測試系統(tǒng)_第1頁
java課程設(shè)計實訓(xùn)報告-記憶測試系統(tǒng)_第2頁
java課程設(shè)計實訓(xùn)報告-記憶測試系統(tǒng)_第3頁
java課程設(shè)計實訓(xùn)報告-記憶測試系統(tǒng)_第4頁
java課程設(shè)計實訓(xùn)報告-記憶測試系統(tǒng)_第5頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PAGEPAGEII沈陽工程學院課程設(shè)計設(shè)計題目:Java程序設(shè)計課程設(shè)計記憶測試系統(tǒng)系別信息工程系班級軟件072學生姓名學號36222711指導(dǎo)教師職稱起止日期:2009年6月15日起——至2009年6月26日止沈陽工程學院課程設(shè)計任務(wù)書課程設(shè)計題目:Java程序設(shè)計課程設(shè)計記憶測試系統(tǒng)系別信息工程系班級軟件072學生姓名杜黎明周雷劉洋吳佳文學號36222711指導(dǎo)教師李波、衣云龍職稱講師、助教課程設(shè)計進行地點:實訓(xùn)F任務(wù)下達時間:2009年6月15日起止日期:2009年6月15日起——至2009年6月26日止教研室主任費雅潔2009年6月12日批準PAGEV11.設(shè)計的原始資料及依據(jù)通過課程設(shè)計使學生進一步加深對課程內(nèi)容的理解,利用程序設(shè)計的基本思想進行程序的開發(fā),進一步掌握編程方法和技巧,提高學生用程序的思想來解決實際問題的能力。2.設(shè)計的主要內(nèi)容及要求本小組設(shè)計題目:記憶測試系統(tǒng)需要完成的功能:⑴單擊“選擇級別”菜單可以選擇初級、中級或高級。⑵單擊“查看排行榜”菜單可以查看初級記憶榜、中級記憶榜和高級記憶榜,通過記憶榜存儲每個級別的成績。⑶選擇級別后,將出現(xiàn)相應(yīng)級別的測試區(qū)。測試區(qū)共有m*n個方塊組成,程序通過設(shè)置m和n的值來確定相應(yīng)的測試級別,例如,對于初級級別,m=5,n=6。每個方塊上都有一個圖標,但該圖標默認不可見,用鼠標單擊測試區(qū)的任何一個方塊,則計時器開始啟動,同時在該方塊上的圖標將顯示出來。⑷m*n個方塊測試區(qū)中共有m中圖標,每個圖標重復(fù)出現(xiàn)n次,并且隨即分布在m*n個方塊上。用戶必須用鼠標連續(xù)點擊出n個相同的方塊。⑸測試區(qū)能顯示用戶的用時,并根據(jù)級別的不同,提示用戶必須用鼠標連續(xù)單擊出多個圖標相同的方塊。=6\*GB2⑹測試區(qū)有提示圖標所在位置的功能。用戶單擊測試區(qū)中的“提示”按鈕后,測試區(qū)將持續(xù)1.2秒為用戶顯示全部方塊上的圖標。用戶每次單擊一次“提示”按鈕,用戶的用時將增加10秒。=7\*GB2⑺連續(xù)單擊出級別所要求的若干個圖標相同的方塊后,將彈出保存成績對話框,用戶可以通過該對話框選擇是否將自己的成績保存到成績表中。=8\*GB2⑻單擊“選擇圖標”菜單可以重新選擇方塊中的圖標樣式,即可以重新選擇m個圖標。3.對設(shè)計說明書撰寫內(nèi)容、格式、字數(shù)的要求⑴學生應(yīng)撰寫的內(nèi)容為:中文摘要和關(guān)鍵詞、目錄、正文、參考文獻等。課程設(shè)計說明書(論文)的結(jié)構(gòu)及各部分內(nèi)容要求可參照《沈陽工程學院畢業(yè)設(shè)計(論文)撰寫規(guī)范》執(zhí)行。應(yīng)做到文理通順,內(nèi)容正確完整,書寫工整,裝訂整齊。⑵裝訂格式封面、任務(wù)書、成績評審意見表、摘要和關(guān)鍵詞、目錄、正文、結(jié)論、致謝、參考文獻。⑶課程設(shè)計說明書(論文)是體現(xiàn)和總結(jié)課程設(shè)計成果的載體,一般不應(yīng)少于3000字。打印時采用A4紙,頁邊距均為20mm,正文采用宋體小四號字,行間距18磅。文中大標題采用黑體小三號字,一級節(jié)標題采用黑體四號字,二級節(jié)標題采用黑體小四號字,三級節(jié)標題采用黑體小四號字,表題與圖題采用宋體五號字。4.設(shè)計完成后應(yīng)提交成果的種類、數(shù)量、質(zhì)量等方面的要求⑴課程設(shè)計任務(wù)書⑵課程設(shè)計報告⑶設(shè)計成品(光盤)5.時間進度安排順序階段日期計劃完成內(nèi)容備注1第16周第1天查閱資料,充分解讀題目內(nèi)容,小組分工,確定每個人的具體任務(wù)。1天2第16周第2天數(shù)據(jù)庫設(shè)計及登陸界面的實現(xiàn)。1天3第16周第3,4,5天,第17周第1天編制程序,單元測試。4天4第17周第2,3天程序整合,綜合調(diào)試。2天5第17周第4天答辯。1天6第17周第5天撰寫課程設(shè)計報告。1天6.主要參考資料(文獻)[1]辛運幃《Java算法》北京:電子工業(yè)出版社,1998[2]王克宏《Java語言APPLET編程技術(shù)》北京:清華大學出版社,1997[3]旭日工作室《Java1.1使用大全》北京:電子工業(yè)出版社,1998[4]辛運幃等《Java程序設(shè)計》北京:清華大學出版社,2001[5]辛運幃、高寧《Java程序設(shè)計課程設(shè)計》北京:機械工業(yè)出版社,2005[6]肖旻、廖雷《Java程序設(shè)計教程》北京:中國電力出版社,2007[7][美]BruceEckel《Java編程思想》北京:機械工業(yè)出版社,1999[8][美]EdwardYourdon等《實用面向?qū)ο筌浖こ探坛獭繁本弘娮庸I(yè)出版社,1998[9][美]DeitelHM,DeitelPJ《Java語言程序設(shè)計大全》北京:機械工業(yè)出版社,2001[10]楊紹方《Java編程實用技術(shù)與案例》北京:清華大學出版社,2000[11]Java技術(shù)文檔[12]Java技術(shù)文檔[13]JDK1.3開發(fā)工具和API幫助文檔/products/

沈陽工程學院課程設(shè)計成績評定表系(部):信息工程系班級:軟件072學生姓名:杜黎明周雷劉洋吳佳文指導(dǎo)教師評審意見評價內(nèi)容具體要求權(quán)重評分加權(quán)分調(diào)研論證能獨立查閱文獻,收集資料;能制定課程設(shè)計方案和日程安排。0.15432工作能力態(tài)度工作態(tài)度認真,遵守紀律,出勤情況是否良好,能夠獨立完成設(shè)計工作,0.25432工作量按期圓滿完成規(guī)定的設(shè)計任務(wù),工作量飽滿,難度適宜。0.25432說明書的質(zhì)量說明書立論正確,論述充分,結(jié)論嚴謹合理,文字通順,技術(shù)用語準確,符號統(tǒng)一,編號齊全,圖表完備,書寫工整規(guī)范。0.55432指導(dǎo)教師評審成績(加權(quán)分合計乘以8)分加權(quán)分合計指導(dǎo)教師簽名:年月日評閱教師評審意見評價內(nèi)容具體要求權(quán)重評分加權(quán)分查閱文獻查閱文獻有一定廣泛性;有綜合歸納資料的能力0.25432工作量工作量飽滿,難度適中。0.55432說明書的質(zhì)量說明書立論正確,論述充分,結(jié)論嚴謹合理,文字通順,技術(shù)用語準確,符號統(tǒng)一,編號齊全,圖表完備,書寫工整規(guī)范。0.35432評閱教師評審成績(加權(quán)分合計乘以4)分加權(quán)分合計評閱教師簽名:年月日答辯小組評審意見評價內(nèi)容具體要求權(quán)重評分加權(quán)分學生匯報匯報準備充分,思路清晰;語言表達準確,概念清楚,論點正確,有層次,有重點,基本上反映了所完成任務(wù)的全部內(nèi)容;時間符合要求。0.55432答辯思路清晰;回答問題有理論依據(jù),基本概念清楚;主要問題回答準確,深入,有說服力。0.55432答辯小組評審成績(加權(quán)分合計乘以8)分加權(quán)分合計答辯小組教師簽名:年月日課程設(shè)計總評成績分沈陽工程學院課程設(shè)計報告摘要摘要伴隨著社會科學技術(shù)的飛速發(fā)展,信息化時代也以閃電般的速度呈現(xiàn)在我們的面前,所以,計算機的發(fā)展更以其驚人的速度在發(fā)展著,生活中有許多復(fù)雜的問題都需要用計算機去解決,從而產(chǎn)生了新的思想,Java語言就是一種伴隨著社會信息技術(shù)的飛速發(fā)展而發(fā)展起來的強有力的計算機編程語言,它能夠透徹地反映人們的思想,巧妙而充分地使計算機本身特性發(fā)揮到極致,便于編程人員根據(jù)社會的需要,靈活地編制出高級語言程序來實現(xiàn)生活和工作中的各種復(fù)雜程序。在當今眾多的計算機程序設(shè)計語言中,面向?qū)ο蠹夹g(shù)正逐步替代傳統(tǒng)的面向過程的程序設(shè)計技術(shù),成為目前軟件的主流開發(fā)方向,Java語言以它獨到的面向?qū)ο筇匦栽诟黝惥幊陶Z言中脫穎而出,Java語言的快速發(fā)展與廣泛應(yīng)用有目共睹。Java語言是計算機能提供的最快而又最有效的語言,也是能夠利用計算機所有硬件特性的編程語言。在當今信息高速發(fā)展的社會,Java語言越來越實用,可以通過Java實現(xiàn)更高更快的應(yīng)用需求,Java語言將成為應(yīng)用程序的開發(fā)和建設(shè)的核心技術(shù),它能夠有效地提高計算機性能和應(yīng)用場合,滿足各種用戶的應(yīng)用需求。本論文主要介紹了《記憶測試系統(tǒng)》的相關(guān)使用方法,以及程序中應(yīng)用到的相關(guān)技術(shù)和方法。本論文包括緒論、系統(tǒng)功能介紹和系統(tǒng)功能實現(xiàn)三個主要部分。關(guān)鍵詞:記憶測試系統(tǒng)、Java小游戲、JavaGUI、Swing包沈陽工程學院課程設(shè)計報告第1章緒論PAGE11目錄摘要 I第1章緒論 1第2章系統(tǒng)功能介紹 22.1系統(tǒng)功能總框圖 22.2模塊功能介紹 22.2.1MemoryGame.java(主類) 22.2.2MemoryTestArea.java 32.2.3Block.java 32.2.4Record.java 32.2.5ShowRecordDialog.java 32.2.6People.java 32.3組內(nèi)任務(wù)分工 3第3章系統(tǒng)功能實現(xiàn) 53.1MemoryGame類 53.1.1效果圖 53.1.2成員變量和成員方法 53.1.3程序代碼(MemoryGame.java) 63.2MemoryTestArea類 93.2.1效果圖 93.2.2成員變量和成員方法 103.2.3程序代碼(MemoryTestArea.java) 113.3Block類 153.3.1效果圖 153.3.2成員變量和成員方法 153.3.3程序代碼(Block.java) 153.4ShowRecordDialog類 163.4.1效果圖 163.4.2成員變量和成員方法 163.4.3程序代碼(ShowRecordDialog.java) 163.5People類 183.5.1效果圖 183.5.2成員變量和成員方法 183.5.3程序代碼(People.java) 183.6Record類的實現(xiàn) 193.6.1效果圖 193.6.2成員變量和成員方法 193.6.3程序代碼(Record.java) 20結(jié)論 22致謝 23參考文獻 24第1章緒論信息化的現(xiàn)代社會,無論何時何地,都存在著一大批追求效率、講求速度的分秒必爭的上班族,其中更包括著高等學校中的一層廣大學生工作者,每天繁重的工作學習任務(wù)無不壓的人們喘不過氣來,因此,有必要開發(fā)一些益智性的軟件來擴充一下人們的業(yè)余興趣愛好,擁有一個健全業(yè)余生活也是眾望所歸的,因此我們選擇開發(fā)一個《記憶測試系統(tǒng)》以便提高人們的業(yè)余興趣愛好,提高工作和學習的效率。而以往的記憶測試系統(tǒng),界面不夠友好,沒有讓人耳目一新的視覺效果,往往還缺少圖標的選擇功能,而這也是最引起我們注意的方面,同時是這也就是我們選擇這個課題的最初動機。本系統(tǒng)主要采用Java.Swing包設(shè)計界面。在《記憶測試系統(tǒng)》中,記憶力的測試是本Java程序的核心,通過“選擇級別”菜單可以選擇測試測試的級別,其中包括初級、中級以及高級的測試選擇項,每個選項實現(xiàn)對每個層次級別的測試。在每個級別的測試之中,測試者需要在系統(tǒng)的提示下,通過鼠標單擊出6個、7個、8個相同圖標的方塊(也即汽車圖標或動物圖標),當測試者憑借自己的記憶連續(xù)點擊出要求的相同圖標數(shù)目時,系統(tǒng)會自動彈出保存成績的提示窗口,測試者可根據(jù)自己的需要記錄自己的成績(測試者也可以“匿名”的方式記錄成績)或者退出提示窗口。測試者還可以在“查看排行榜”選項里邊查看自己在當前級別的測試中的排名情況。利用Java的GUI設(shè)計圖形界面,為了設(shè)計出緊湊、固定、頗具觀賞性的界面,我們充分的發(fā)揮了中間容器JPanel的強大作用。在界面的布局設(shè)計時,我們克服了(BorderLayout())窗口默認布局每個區(qū)域只能添加一個組件的缺點,我們通過使用中間容JPanel來進行過度,結(jié)合GridLayout()、FlowLayout()布局成功的實現(xiàn)了將多個組件加入到BorderLayout()的某一個區(qū)域,設(shè)計出了我們想要的清新界面。本《記憶測試系統(tǒng)》也是一款簡單的游戲軟件,是用Java語言以及其它腳本語言編寫的應(yīng)用程序。在日常生活中雖然起不到很大的工業(yè)和商業(yè)作用,但每個人都可以在其中找到自己的興趣愛好,在娛樂中找到工作的樂趣,在工作中放松自己的心情,減輕自己的壓力。該《記憶測試系統(tǒng)》操作簡單,易于上手,適宜不同職業(yè),不同年齡段的人,不管是小孩、中年人還是老年人,相信您都會愛上我們的《記憶測試系統(tǒng)》的。在您進入主界面后,很容易就能夠?qū)λ乃泄δ苣K精通之至,一般的人都能夠使用。沈陽工程學院課程設(shè)計報告第2章系統(tǒng)功能介紹PAGE4第2章系統(tǒng)功能介紹2.1系統(tǒng)功能總框圖記憶測試系統(tǒng)用到的類以及它們的組合關(guān)系如圖2.1所示。ArrayList<Block>ArrayList<Block>MemoryGameStringFileMemoryTestAreaShowRecordDialogFileTreeSet<People>StringRecordTimerFileThread圖2.1類之間的組合關(guān)系2.2模塊功能介紹2.2.1MemoryGame.java(主類)MemoryGame類負責創(chuàng)建記憶測試系統(tǒng)的主窗口,該類有main方法,記憶測試系統(tǒng)從該類開始執(zhí)行。MemoryGame類有4中重要的類型對象,分別是String、File、MemoryTestArea和ShowRecordDialog對象。MemoryGame類創(chuàng)建的窗口及其對象如圖2.2和圖2.3所示。圖2.2窗口及其測試區(qū)圖2.3ShowRecord類對應(yīng)的對話框2.2.2MemoryTestArea.javaMemoryTestArea類是主類MemoryTestArea窗口中的一個Jpanel容器,所創(chuàng)建的對象稱為“測試區(qū)”,這個“測試區(qū)”被插入到MemoryGame窗口的中心。MemoryTestArea類主要有6中類型的成員:ArrayList<Block>、String、Record、Timer、File和Thread對象。2.2.3Block.javaBlock類是Jbutton的子類,負責為MemoryTestArea類中的ArrayList<Block>數(shù)組表提供Block對象。2.2.4Record.javaRecord類是javax.swing包中Jdialog對話框的子類,當用戶成功單擊出相應(yīng)級別所要求的圖標相同的方塊口,Record創(chuàng)建的對象負責保存用戶的名字和成績到相應(yīng)的級別文件中。2.2.5ShowRecordDialog.javaShowRecordDialog類是javax.swing包中Jdialog對話框的子類,當用戶單擊“查看排行榜”時,ShowRecordDialog創(chuàng)建的對象負責顯示用戶的成績。2.2.6People.javaPeople對象封裝了用戶的名字和成績,以便ShowRecordDialog對象可以按成績的高低排序用戶。2.3組內(nèi)任務(wù)分工小組分工如表2.1所示。表2.1小組分工表全體成員任務(wù)組長學號:36組長姓名:杜黎明學號:22姓名:周雷學號:27姓名:劉洋學號:11姓名:吳佳文查閱文獻、收集資料√√程序界面設(shè)計√MemoryGame的實現(xiàn)√√MemoryTestArea的實現(xiàn)√√Block.java的實現(xiàn)√√Record.java的實現(xiàn)√ShowRecordDialog.java的實現(xiàn)√√People.java的實現(xiàn)√程序測試√沈陽工程學院課程設(shè)計報告第3章系統(tǒng)功能實現(xiàn)第3章系統(tǒng)功能實現(xiàn)3.1MemoryGame類3.1.1效果圖MemoryGame創(chuàng)建的窗口效果圖如圖3.1所示。圖3.1MemoryGame創(chuàng)建的窗口3.1.2成員變量和成員方法成員變量=1\*GB2⑴bar是JmenueBar類創(chuàng)建的的菜單條和menuIcon是Jmenu類創(chuàng)建的三個菜單,這三個菜單的名稱分別是“選擇級別”、“查看排行榜”、“選擇圖標”。=2\*GB2⑵oneGradeItem、towGradeItem、threeGredeItem是JmenuItem類創(chuàng)建的三個菜單項,被添加到menuGrade菜單子中。這三個菜單項的名稱分別是“初級”、“中級”、“高級”。=3\*GB2⑶carImageIcon和animalImage是JmenuItem類創(chuàng)建的兩個菜單項,被添加到menuIcon菜單中,這兩個菜單項的名稱分別是“汽車圖標”和“動物圖標”。=4\*GB2⑷fileOneGrade、fileTwoGrade、fileThreeGrade三個文件對象所引用的文件分別是“初級記憶排行榜.txt”、“中級記憶排行榜.txt”、“高級記憶排行榜.txt”,分別用來寫入三個級別的成績。gradeFile可以是fileOneGrade、fileTwoGrade、fileThreeGrade中的某一個。=5\*GB2⑸imageName是String類型的數(shù)組,每個單元是一個圖像文件的名字。=6\*GB2⑹memoryArea是測試區(qū)對象,由MemoryArea類負責創(chuàng)建。=7\*GB2⑺showDialog是負責顯示成績的對話框,有ShowRecordDialog類負責創(chuàng)建。=8\*GB2⑻m和n是int類型的數(shù)據(jù),其值可以確定相應(yīng)級別中測試區(qū)中方塊的數(shù)量,例如,對于中級水平,m=6,n=7,測試區(qū)一共有42個方塊。方法=1\*GB2⑴actionPerformed(ActionEvent)方法是MemoryGame類實現(xiàn)的ActionListener接口中的方法,負責執(zhí)行菜單項發(fā)出的有關(guān)命令。用戶選擇菜單中的菜單項可觸發(fā)ActionEvent事件,導(dǎo)致actionPerformed(ActionEvent)方法執(zhí)行相應(yīng)的操作。=2\*GB2⑵MemoryGame()是構(gòu)造方法,負責完成窗口的初始化。=3\*GB2⑶main(String[])方法是軟件運行的入口方法。3.1.3程序代碼(MemoryGame.java)importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;importjava.io.*;importjava.util.LinkedList;publicclassMemoryGameextendsJFrameimplementsActionListener{JMenuBarbar;JMenumenuGrade,menuResult,menuIcon;JMenuItemoneGradeItem,twoGradeItem,threeGradeItem;JMenuItemoneGradeResult,twoGradeResult,threeGradeResult;JMenuItemcarImageIcon,animalImageIcon;FilefileOneGrade,fileTwoGrade,fileThreeGrade,gradeFile;StringimageName[];MemoryTestAreamemoryArea;ShowRecordDialogshowDiolag=null;intm=5,n=6;finalintimageNumber=7;MemoryGame(){fileOneGrade=newFile("初級記憶排行榜.txt");fileTwoGrade=newFile("中級記憶排行榜.txt");fileThreeGrade=newFile("高級記憶排行榜.txt");bar=newJMenuBar();menuGrade=newJMenu("選擇級別");oneGradeItem=newJMenuItem("初級");twoGradeItem=newJMenuItem("中級");threeGradeItem=newJMenuItem("高級");menuGrade.add(oneGradeItem);menuGrade.add(twoGradeItem);menuGrade.add(threeGradeItem);menuResult=newJMenu("查看排行榜");oneGradeResult=newJMenuItem("初級排行榜");twoGradeResult=newJMenuItem("中級排行榜");threeGradeResult=newJMenuItem("高級排行榜");menuResult.add(oneGradeResult);menuResult.add(twoGradeResult);menuResult.add(threeGradeResult);menuIcon=newJMenu("選擇圖標");carImageIcon=newJMenuItem("汽車圖標");animalImageIcon=newJMenuItem("動物圖標");animalImageIcon.addActionListener(this);carImageIcon.addActionListener(this);menuIcon.add(carImageIcon);menuIcon.add(animalImageIcon);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.exists()){try{fileOneGrade.createNewFile();}catch(IOExceptionexp){}}if(!fileTwoGrade.exists()){try{fileTwoGrade.createNewFile();}catch(IOExceptionexp){}}if(!fileThreeGrade.exists()){try{fileThreeGrade.createNewFile();}catch(IOExceptionexp){}}setBounds(100,100,400,360);setVisible(true);memoryArea=newMemoryTestArea();imageName=newString[imageNumber];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.EXIT_ON_CLOSE);}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()==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();}}3.2MemoryTestArea類3.2.1效果圖MemoryTestArea創(chuàng)建的測試區(qū)的效果圖如圖3.2所示。圖3.2MemoryTestArea創(chuàng)建的測試區(qū)3.2.2成員變量和成員方法=1\*GB1⒈成員變量=1\*GB2⑴row和col的值確定測試區(qū)中方塊的數(shù)量。MemoryTestArea

類創(chuàng)建的對象memoryArea是MemoryArea對象通過調(diào)用initBlock(int,int,String[],File)方法將MemoryGame類中m和n的值傳遞給row和col。=2\*GB2⑵usedTime是用戶的用時,單位是秒。=3\*GB2⑶success的值是用戶找到的具有通向的圖標的方塊的個數(shù)。=4\*GB2⑷gradeFile是級別文件,memoryArea對象通過調(diào)用initBlock(int,int,String[],File)方法將MemoryGame類中的gradeFile的引用傳遞給memoryArea對象中的gradeFile。=5\*GB2⑸allBlockList單元的個數(shù)是row和col的乘積,它的每個單元存放著一個Block對象。memoryArea對象在調(diào)用initBlock(int,int,String[],File)方法是完成對allBlockList單元的初始化,即創(chuàng)建單元中的Block對象。=6\*GB2⑹字符串數(shù)組imageFileName中的每個單元存放的是一副圖像文件的名字。memoryArea對象通過調(diào)用setImageName(String[])方法將MemoryGame中存放圖像文件名字的imageName數(shù)組的引用傳遞給imageFileName。=7\*GB2⑺鏈表openIconList用來存放用戶找到的圖標相同的方塊上的圖標。=8\*GB2⑻鏈表openBlockList用來存放用戶找到的圖標相同的方塊。=9\*GB2⑼hintThread是用Thread類創(chuàng)建的線程對象,用來提示測試區(qū)中的Block上的圖標,提示方式是將測試區(qū)中的各個Block上圖標持續(xù)顯示1200毫秒。=10\*GB2⑽hintButton是注冊了ActionEvent事件的監(jiān)視器,當用戶單擊它時,啟動hintThread線程。=11\*GB2⑾showUsedTime顯示用戶的用時,即顯示usedTime的值。=12\*GB2⑿hintMessage根據(jù)不同的級別顯示相應(yīng)的提示信息,如該級別需要用戶尋找相同的圖標方塊的數(shù)目。=13\*GB2⒀timer是計時器,負責改變usedTime的值。=14\*GB2⒁record負責提供保存成績的界面,是一個對話框,默認不可見。當用戶尋找出級別所要求的相同圖標方塊的數(shù)目后,該對話框可見,用戶可以在該對話框中輸入姓名,并保存所輸入的姓名和usedTime的值到制定的gradeFile文件中。=2\*GB1⒉成員方法=1\*GB2⑴MemoryTestArea()是構(gòu)造方法,創(chuàng)建memoryArea對象時需使用該構(gòu)造方法。=2\*GB2⑵initBlock(int,int,String[],File)方法。memoryArea對象調(diào)用該方法將參數(shù)的值傳遞給row、col、imageFileName和fradeFile,并依據(jù)這些值設(shè)置allBlockList數(shù)組表的大小,然后創(chuàng)建allBlockList的單元中的Block對象,并設(shè)置Block對象上的圖標。=3\*GB2⑶setImageName(String[])方法。memoryArea對象調(diào)用該方法可以將MemoryGame中存放圖像文件名字的imageName數(shù)組的引用傳遞給imageFileName。當用戶單擊MemoryGame主類窗口的carImageIcon和animalImageIcon菜單項時,memoryArea對象將調(diào)用該方法把存放圖像文件名字的imageName數(shù)組的引用傳遞給imageFileName。=4\*GB2⑷actionPerformed(ActionEvent)方法。該方法是MemoryArea類實現(xiàn)的ActionListener接口中的方法。memoryArea中的每個Block對象都注冊了ActionEvent事件監(jiān)聽器,當用戶單擊memroyArea中的每個Block對象時,actionPerformed(ActionEvent)方法將被調(diào)用執(zhí)行,所執(zhí)行的主要操作是:如果該Block對象未顯示圖標,并且該圖標和openIconList中,同時將該Block對象未顯示圖標,并且該Block對象設(shè)置的圖標和openIconList中存放的圖標不相同,就將openIconList清空,然后再將該圖標添加到鏈表中,同時將該Block對象上的圖標顯示出來,并將success的數(shù)值設(shè)置稱1。當用戶單擊hintButton按鈕時,actionPerformed(ActionEvent)方法被調(diào)用執(zhí)行,執(zhí)行的主要操作是啟動hintThread線程。=5\*GB2⑸run()方法。該方法是MemoryArea類實現(xiàn)的Runnable接口中的方法,啟動hintThread線程后,該方法將執(zhí)行,其主要操作是將測試區(qū)中未顯示的圖標的各個Block對象上的圖標持續(xù)顯示1200毫秒。3.2.3程序代碼(MemoryTestArea.java)importjavax.swing.*;importjava.awt.event.*;importjava.awt.*;importjava.util.*;importjava.io.*;publicclassMemoryTestAreaextendsJPanelimplementsActionListener,Runnable{introw,col;FilegradeFile;ArrayList<Block>allBlockList;StringimageFileName[];LinkedList<ImageIcon>openIconList;LinkedList<Block>openBlockList;intsuccess=0;ThreadhintThead;//java.lang.object包中JButtonhintButton;intusedTime=0;JTextFieldshowUsedTime,hintMessage;javax.swing.Timertimer;Recordrecord;JPanelcenter,south;MemoryTestArea(){setLayout(newBorderLayout());allBlockList=newArrayList<Block>();openIconList=newLinkedList<ImageIcon>();openBlockList=newLinkedList<Block>();hintThead=newThread(this);hintMessage=newJTextField();hintMessage.setHorizontalAlignment(JTextField.CENTER);hintMessage.setEditable(false);hintMessage.setFont(newFont("宋體",Font.BOLD,18));center=newJPanel();south=newJPanel();hintButton=newJButton("提示");hintButton.addActionListener(this);showUsedTime=newJTextField(8);showUsedTime.setEditable(false);showUsedTime.setHorizontalAlignment(JTextField.CENTER);south.add(newJLabel("用時:"));south.add(showUsedTime);south.add(newJLabel("提示圖標位置(導(dǎo)致用時增加):"));south.add(hintButton);add(south,BorderLayout.SOUTH);add(hintMessage,BorderLayout.NORTH);timer=newjavax.swing.Timer(1000,this);//創(chuàng)建一個每1000毫秒將通知其偵聽器的計時器record=newRecord();}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);allBlockList.get(i).setOpenStateIcon(icon[i%row]);}Collections.shuffle(allBlockList);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.setText("您需要用鼠標單擊出"+col+"個同樣圖標的方塊");usedTime=0;showUsedTime.setText(null);validate();}publicvoidsetImageName(Stringname[]){imageFileName=name;}publicvoidactionPerformed(ActionEvente){if(e.getSource()instanceofBlock){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))){success=success+1;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());}timer.stop();record.setTime(usedTime);record.setGradeFile(gradeFile);record.setVisible(true);}}elseif((temp!=openStateIcon)&&(!(openBlockList.contains(block)))){openIconList.clear();openBlockList.clear();openIconList.add(openStateIcon);openBlockList.add(block);success=1;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(IllegalThreadStateExceptionex){}}if(e.getSource()==timer){usedTime++;showUsedTime.setText("您的用時:"+usedTime+"秒");}}publicvoidrun(){for(inti=0;i<allBlockList.size();i++)allBlockList.get(i).setIcon(allBlockList.get(i).getOpenStateIcon());try{Thread.sleep(1200);}catch(InterruptedExceptionexp){}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);}}3.3Block類3.3.1效果圖Block創(chuàng)建的方塊效果如圖3.3所示。圖3.3Block創(chuàng)建方塊對象3.3.2成員變量和成員方法=1\*GB1⒈成員變量=1\*GB2⑴openStateIcon是方塊上的圖標。=2\*GB1⒉方法=1\*GB2⑴Block對象調(diào)用setOpenStateIcon(ImageIcon)方法可以設(shè)置它上面的圖標。=2\*GB2⑵Block對象調(diào)用getOpenStateIcon()方法可以獲得它上面的圖標。3.3.3程序代碼(Block.java)importjavax.swing.*;importjava.awt.event.*;publicclassBlockextendsJButton{ImageIconopenStateIcon;publicImageIcongetOpenStateIcon(){returnopenStateIcon;}publicvoidsetOpenStateIcon(ImageIconicon){openStateIcon=icon;}}3.4ShowRecordDialog類3.4.1效果圖ShowRecordDialog創(chuàng)建的對話框如圖3.4所示。圖3.4ShowRecordDialog效果圖3.4.2成員變量和成員方法=1\*GB1⒈成員變量=1\*GB2⑴gradeFile是對話框要讀取的文件,該文件存儲成績。=2\*GB2⑵clear是注冊了ActionEvent事件的按鈕。=3\*GB2⑶showArea文本顯示對話框從gradeFile文件中讀取的成績。=4\*GB2⑷treeSet負責將成績按高低排序。=2\*GB1⒉方法=1\*GB2⑴ShowRecordDialog()是構(gòu)造方法,負責創(chuàng)建showDialog對象。=2\*GB2⑵setGradeFile(File)方法。showRecordDialog類創(chuàng)建的ShowRecordDialog對話框是主類MemoryGame窗口中的一個成員。當用戶選擇窗口上的“查看排行榜”菜單中的菜單項時,ShowRecordDialog對話框調(diào)用setGradeFile(File)方法將相應(yīng)的級別文件傳遞給gradeFile。=3\*GB2⑶showRecord()方法。ShowRecordDialog對話框調(diào)用該方法讀取gradeFile文件中的成績,為了將成績按高低順序顯示在showArea文本區(qū)中,showRecord()方法根據(jù)讀取的名字和該名字的對應(yīng)成績,創(chuàng)建一個People對象,并將該People對象存放在treeSet樹級中。=4\*GB2⑷actionPerformed(ActonEvent)是ActionListener接口中的方法,clear注冊了ActionEvent事件,當用戶單擊clear按鈕時,actionPerformed(ActionEvent)方法被執(zhí)行,所執(zhí)行的操作是清楚gradeFile文件中的內(nèi)容。3.4.3程序代碼(ShowRecordDialog.java)importjava.io.*;importjava.util.*;importjavax.swing.*;importjava.awt.event.*;importjava.awt.*;publicclassShowRecordDialogextendsJDialogimplementsActionListener{FilegradeFile;JButtonclear;JTextAreashowArea=null;TreeSet<People>treeSet;publicShowRecordDialog(){treeSet=newTreeSet<People>();showArea=newJTextArea(6,4);showArea.setFont(newFont("楷體",Font.BOLD,20));clear=newJButton("清空排行榜");clear.addActionListener(this);add(newJScrollPane(showArea),BorderLayout.CENTER);add(clear,BorderLayout.SOUTH);setBounds(100,100,320,185);setModal(true);addWindowListener(newWindowAdapter(){publicvoidwindwoClosing(WindowEvente){setVisible(false);}});}publicvoidsetGradeFile(Filef){gradeFile=f;setTitle(f.getName());}publicvoidshowRecord(){showArea.setText(null);treeSet.clear();try{RandomAccessFilein=newRandomAccessFile(gradeFile,"rw");longfileLength=in.length();longreadPosition=0;while(readPosition<fileLength){Stringname=in.readUTF();inttime=in.readInt();readPosition=in.getFilePointer();Peoplepeople=newPeople(name,time);treeSet.add(people);}in.close();Iterator<People>iter=treeSet.iterator();while(iter.hasNext()){Peoplep=iter.next();showArea.append("姓名:"+p.getName()+",成績:"+p.getTime()+"秒");showArea.append("\n");}}catch(IOExceptionexp){System.out.println(exp);}}publicvoidactionPerformed(ActionEvente){if(e.getSource()==clear){try{Filef=gradeFile.getAbsoluteFile();gradeFile.delete();f.createNewFile();showArea.setText("排行榜被清空");}catch(Exceptionee){}}}}3.5People類3.5.1效果圖People是我們編寫的一個類,該類對象中的數(shù)據(jù)是用戶的姓名和成績,被顯示在ShowRecordDialog對話框中的showArea文本區(qū)中。見圖3.4。3.5.2成員變量和成員方法=1\*GB1⒈成員變量=1\*GB2⑴name是用戶的名字。=2\*GB2⑵time是用戶的用時。=2\*GB1⒉成員方法=1\*GB2⑴getTimer()方法返回time。=2\*GB2⑵getName方法返回name。=3\*GB2⑶compareTo(Object)是Comparable接口中的方法,其操作是確定People對象的大小關(guān)系。3.5.3程序代碼(People.java)importjava.io.*;publicclassPeopleimplementsSerializable,Comparable{//類通過啟動Serializable啟動序列化功能,序列化接口沒有方法或字段,僅用于標識可序列化的語義。Stringname=null;inttime=0;publicPeople(Stringname,intt){=name;time=t;}publicintgetTime(){returntime;}publicStringgetName(){returnname;}publicintcompareTo(Objectb){//Object是類層次結(jié)構(gòu)的根類,每個類都使用它作為根類。Peoplep=(People)b;if((this.time-p.time)==0)return1;elsereturn(this.time-p.time);}}3.6Record類的實現(xiàn)3.6.1效果圖Record是javax.swing包中Jdialog的子類,并實現(xiàn)了ActionListener接口,該類創(chuàng)建的對象record是MemoryTestArea類的成員方法之一,當用戶成功單擊出相應(yīng)級別所要求的圖標相同的方塊后,程序彈出Record對話框,用戶使用該對話框提供的界面將成績保存到相應(yīng)的級別文件中。Record創(chuàng)建的對話框如圖3.6所示。圖3.6Record對話框3.6.2成員變量和成員方法=1\*GB1⒈成員變量=1\*GB2⑴time是用戶的用時。=2\*GB2⑵yourName是用戶用來輸入名字的文本框。=3\*GB2⑶enter和cancel是按鈕對象,用戶單擊enter按鈕可以保存成績,單擊cancel按鈕可以放棄保存成績。=4\*GB2⑷gradeFile是級別文件。=2\*GB1⒉成員方法=1\*GB2⑴Record()是構(gòu)造方法,負責創(chuàng)建record對象。=2\*GB2⑵setGradeFile(File)方法。Record類創(chuàng)建的Record對話框是測試區(qū)MemoryTestArea中的一個成員。當用戶成功單擊相應(yīng)級別所要求的圖標相同的方塊后,測試區(qū)彈出一個Record對話框?qū)⒄{(diào)用setGradeFile(int)方法將測試區(qū)記錄的用戶用時傳遞給Record對話框中的time。=3\*GB2⑶setTime(int)方法。當用戶成功單擊出相應(yīng)級別所要求的圖標相同的方塊后,測試區(qū)彈出Record對話框,Record對話框?qū)⒄{(diào)用setTime(int)方法將測試區(qū)記錄的用戶用時傳遞給Record對話框中的time。=4\*GB2⑷actionPerformed(ActionEvent)是ActionListener接口中的方法,enter和cancel按鈕注冊了ActionEvent事件,當用戶單擊enter按鈕是,actionPerformed(ActionEvent)方法被調(diào)用執(zhí)行,其操作是將用戶在文本框yourName中輸入的名字以及time的值保存到gradeFile文件中,然后關(guān)閉當前對話框;當用戶單擊cancel按鈕時,actionPerformed(ActionEvent)方法被調(diào)用執(zhí)行,其操作是關(guān)閉當前對話框。3.6.3程序代碼(Record.java)importjava.io.*;importjava.util.*;importjavax.swing.*;importjava.awt.event.*;importjava.awt.*;publicclassRecordextendsJDialogimplementsActionListener{inttime=0;JTextFieldyourName;JLabellabel;JButtonenter,cancel;FilegradeFile=null;publicRecord(){setBounds(100,100,330,160);setResizable(false);setModal(true);setVisible(false);enter=newJButton("確定");cancel=newJButton("取消");yourName=newJTextField(8);yourName.setText("匿名");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

溫馨提示

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

評論

0/150

提交評論