




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
畢業(yè)設(shè)計(jì)(論文)題目:基于Java掃雷游戲的設(shè)計(jì)與實(shí)現(xiàn)2014年11月1日任務(wù)書(shū)學(xué)院(直屬系):計(jì)算機(jī)科學(xué)與技術(shù)系時(shí)間:2014年5月20日學(xué)生姓名指導(dǎo)教師設(shè)計(jì)(論文)題目基于Java掃雷游戲的設(shè)計(jì)與實(shí)現(xiàn)主要研究?jī)?nèi)容1、完成掃雷游戲圖形用戶(hù)界面的設(shè)計(jì)。2、完成掃雷游戲內(nèi)的功能模塊,如難度級(jí)別模塊、開(kāi)局、退出模塊等。3、完成掃雷游戲的具體玩法功能研究方法鑒于此項(xiàng)目比較簡(jiǎn)單,只編寫(xiě)了四個(gè)JAVA源程序ArrayPane.java,JavaMineSweeping.java,JavaMineSweepingFrame.java,RandomNumber.java。還用到了一些JAVA系統(tǒng)提供的重要的類(lèi),如File、JButton和JLabel等類(lèi)。主要技術(shù)指標(biāo)(或研究目標(biāo))主要實(shí)現(xiàn):圖形界面的出現(xiàn)、游戲功能正常執(zhí)行、三個(gè)難度系數(shù)選擇、過(guò)關(guān)后數(shù)據(jù)錄入掃雷英雄榜。主要參考文獻(xiàn)[1]朱福喜,尹為民,余振坤.Java語(yǔ)言與面向?qū)ο蟪绦蛟O(shè)計(jì).武漢:武漢大學(xué)出版社,2008.[2]陳國(guó)君,陳磊.Java2從入門(mén)到精通.北京:清華大學(xué)出版社,2008.[3]王梅,Java并發(fā)編程—設(shè)計(jì)原則與模式.北京:中國(guó)電力出版社,2009.[4]尹偉民,Java程序設(shè)計(jì)之網(wǎng)絡(luò)編程.北京:清華大學(xué)出版社,2008.[5]印昊.Java與面向?qū)ο蟪绦蛟O(shè)計(jì).北京:高等教育出版社,2008.[6]耿祥義.Java課程設(shè)計(jì).北京:清華大學(xué)出版社,2009.[7]趙生慧.Java面向?qū)ο蟪绦蛟O(shè)計(jì).北京:高等教育出版社,2009.第一章系統(tǒng)概述1.1緒論掃雷一詞有多個(gè)意思。掃雷游戲是微軟于1992年附帶在其操作系統(tǒng)中的小游戲,它通過(guò)點(diǎn)擊格子并以出現(xiàn)的數(shù)字來(lái)判斷附近地雷的數(shù)量,將全部地雷做上標(biāo)記即可勝利;軍事上的掃雷(mineclearing)是指搜索和清除地雷、陸軍水雷及其他爆炸物的行動(dòng);掃雷又被引作網(wǎng)絡(luò)用語(yǔ)。掃雷最原始的版本可以追溯到1973年一款名為“方塊”的游戲,不久之后,“方塊”被改寫(xiě)成了游戲“Rlogic”,在“Rlogic”里,玩家的任務(wù)是作為美國(guó)海軍陸戰(zhàn)隊(duì)隊(duì)員,為指揮中心探出一條沒(méi)有地雷的安全路線(xiàn),如果路全被地雷堵死就算輸。兩年后,湯姆·安德森在“Rlogic”的基礎(chǔ)上又編寫(xiě)出了游戲“地雷”,由此奠定了現(xiàn)代掃雷游戲的雛形。1981年,微軟公司的羅伯特·杜爾和卡特·約翰遜兩位工程師在Windows3.1系統(tǒng)上加載了該游戲,掃雷游戲才正式在全世界推廣開(kāi)來(lái)。這款游戲的玩法是在一個(gè)9*9(初級(jí)),16*16(中級(jí)),16*30(高級(jí)),或自定義大小的方塊矩陣中隨機(jī)布置一定量的地雷(初級(jí)為10個(gè),中級(jí)為40個(gè),高級(jí)為99個(gè))。由玩家逐個(gè)翻開(kāi)方塊,以找出所有地雷為最終游戲目標(biāo)。如果玩家翻開(kāi)的方塊有地雷,則游戲結(jié)束。掃雷游戲的目標(biāo)是盡快找到雷區(qū)中的所有不是地雷的方塊,而不許踩到地雷。游戲區(qū)包括雷區(qū)、地雷計(jì)數(shù)器和計(jì)時(shí)器,在“游戲”菜單上,單擊“開(kāi)局”,計(jì)時(shí)器就會(huì)啟動(dòng),此時(shí)請(qǐng)單擊游戲區(qū)中的任何方塊,點(diǎn)開(kāi)的數(shù)字是幾,則說(shuō)明該數(shù)字旁邊的8個(gè)位置中有幾個(gè)雷,如果挖開(kāi)的是地雷,則會(huì)輸?shù)粲螒颍糜益I標(biāo)記您認(rèn)為可能有地雷的方塊。1.2開(kāi)發(fā)工具SunMicrosystems公司在推出Java語(yǔ)言的同時(shí),推出了一套開(kāi)發(fā)工具JDK。Sun提供的基于字符模式的Java開(kāi)發(fā)工具包JDK:Java開(kāi)發(fā)工具(JDK)是許多Java專(zhuān)家最初使用的開(kāi)發(fā)環(huán)境。Java是平臺(tái)無(wú)關(guān)的語(yǔ)言是指用Java寫(xiě)的應(yīng)用程序不用修改就可在不同的軟硬件平臺(tái)上運(yùn)行。
Java源程序編寫(xiě)借助于記事本,Editpuls,UltraEdit等三方編輯工具編寫(xiě)。
所有的Java文件編輯、編譯、調(diào)試、解釋運(yùn)行都是通過(guò)使用字符命令來(lái)執(zhí)行操作。JDK由一個(gè)標(biāo)準(zhǔn)類(lèi)庫(kù)和一組建立,測(cè)試及建立文檔的Java實(shí)用程序組成。其核心JavaAPI是一些預(yù)定義的類(lèi)庫(kù),開(kāi)發(fā)人員需要用這些類(lèi)來(lái)訪(fǎng)問(wèn)Java語(yǔ)言的功能。JDK是整個(gè)Java的核心,包括了Java運(yùn)行環(huán)境(JavaRuntimeEnvirnment),一堆Java工具和Java基礎(chǔ)的類(lèi)庫(kù)(rt.jar)。不論什么Java應(yīng)用服務(wù)器實(shí)質(zhì)都是內(nèi)置了某個(gè)版本的JDK。因此掌握J(rèn)DK是學(xué)好Java的第一步。
JDK里面是Java類(lèi)庫(kù)和Java的語(yǔ)言規(guī)范,它提供的是無(wú)論你用何種開(kāi)發(fā)軟件寫(xiě)Java程序都必須用到的類(lèi)庫(kù)和Java語(yǔ)言規(guī)范.沒(méi)有JDK,你的Java程序根本就不能用。
最主流的JDK是Sun公司發(fā)布的JDK,除了Sun之外,還有很多公司和組織都開(kāi)發(fā)了自己的JDK,例如IBM公司開(kāi)發(fā)的JDK,BEA公司的Jrocket,還有GNU組織開(kāi)發(fā)的JDK等等。其中IBM的JDK包含的JVM(JavaVirtualMachine)運(yùn)行效率要比SunJDK包含的JVM高出許多。而專(zhuān)門(mén)運(yùn)行在x86平臺(tái)的Jrocket在服務(wù)端運(yùn)行效率也要比SunJDK好很多。但不管怎么說(shuō),我們還是需要先把SunJDK掌握好。1.3應(yīng)用環(huán)境(1)操作系統(tǒng):WindowsXP及以上版本(2)應(yīng)用軟件:JDKEclipse1.4編寫(xiě)意義隨著計(jì)算機(jī)得普及,人們?cè)絹?lái)越多得接觸到計(jì)算機(jī),人們得生活工作中無(wú)處不有計(jì)算機(jī)得身影,人們面對(duì)長(zhǎng)時(shí)間的難免會(huì)有倦怠的情緒,而人們大多得緩解情緒得網(wǎng)絡(luò)活動(dòng)其實(shí)并不能起到放松心情得作用,現(xiàn)代人得生活節(jié)奏越來(lái)越快,有沒(méi)有一種快速緩解疲倦得游戲呢?我們提出設(shè)計(jì)一款益智得小游戲,這種游戲不會(huì)花太多時(shí)間,同時(shí)把玩家得思維帶動(dòng)起來(lái),達(dá)到一舉多得得效果。隨著現(xiàn)在生活節(jié)奏的加快,人們?cè)诠ぷ髦嘈枰粋€(gè)輕松娛樂(lè)的放松環(huán)境。因此我們小組編寫(xiě)此軟件的目的,一方面作為初學(xué)者來(lái)了解掃雷的開(kāi)發(fā),另一方面開(kāi)發(fā)此軟件使用戶(hù)能在娛樂(lè)休閑的同時(shí)拓展思維能力。同時(shí)進(jìn)一步拓展研究,做到將掃雷層次升級(jí),能夠在多人連機(jī)的情況下,一起分工來(lái)進(jìn)行對(duì)戰(zhàn)。如一方放雷,另一方排雷。1.5任務(wù)設(shè)計(jì)內(nèi)容本次設(shè)計(jì)只是完成了掃雷游戲的基本功能,在細(xì)節(jié)方面仍有待以后完善。Windows2000/XP系統(tǒng)提供的掃雷游戲是一個(gè)很有趣的游戲。本章的課程設(shè)計(jì)使用Java語(yǔ)言編寫(xiě)一個(gè)與其類(lèi)似的掃雷游戲。具體要求如下:(1)掃雷游戲分為初級(jí)、中級(jí)和高級(jí)三個(gè)級(jí)別,掃雷英雄榜存儲(chǔ)每個(gè)級(jí)別的最好成績(jī),即挖出全部的地雷且用時(shí)最少者。單擊游戲菜單可以選擇“初級(jí)”、“中級(jí)”和“高級(jí)”或“查看英雄版”。(2)選擇級(jí)別后將出現(xiàn)相應(yīng)級(jí)別的掃雷區(qū)域,這是用戶(hù)使用鼠標(biāo)左鍵單擊雷區(qū)中任何一個(gè)方塊便啟動(dòng)計(jì)時(shí)器。(3)用戶(hù)要揭開(kāi)某個(gè)方塊,可單擊它。若所揭方塊下有淚,用戶(hù)便輸了這一局,若所揭方塊下無(wú)雷,則顯示一個(gè)數(shù)字,該數(shù)字代表方塊的周?chē)?個(gè)方塊中共有多少顆雷。(4)如果用戶(hù)認(rèn)為某個(gè)方塊下埋著雷,單擊右鍵可以在方塊上標(biāo)識(shí)一個(gè)用戶(hù)認(rèn)為是雷的圖標(biāo),即給出一個(gè)掃雷標(biāo)記。用戶(hù)每標(biāo)記出一個(gè)掃雷標(biāo)記(無(wú)論用戶(hù)的標(biāo)記是否正確),程序?qū)@示的剩余雷數(shù)減少一個(gè)。(5)掃雷勝利后(用時(shí)最少者),程序彈出保存成績(jī)的對(duì)話(huà)框。第二章可行性分析和需求分析2.1可行性分析適用于各種群體,學(xué)生、老師、白領(lǐng),簡(jiǎn)單卻有效地舒緩壓力,消磨閑暇時(shí)光,一局所需的時(shí)間很短,低級(jí)的只需十多秒,此軟件是以?shī)蕵?lè)為主的休閑游戲,開(kāi)發(fā)基于安卓手機(jī)操作系統(tǒng)。具有操作方便、便于保存等優(yōu)點(diǎn)投資可行性:主要根據(jù)市場(chǎng)調(diào)查及預(yù)測(cè)的結(jié)果,以及有關(guān)的產(chǎn)業(yè)政策等因素,論證項(xiàng)目投資建設(shè)的必要性。(1)財(cái)務(wù)可行性:主要從項(xiàng)目及投資者的角度,設(shè)計(jì)合理財(cái)務(wù)方案,從企業(yè)理財(cái)?shù)慕嵌冗M(jìn)行資本預(yù)算,評(píng)價(jià)項(xiàng)目的財(cái)務(wù)盈利能力,進(jìn)行投資決策。(2)組織可行性:制定合理的項(xiàng)目實(shí)施進(jìn)度計(jì)劃、設(shè)計(jì)合理的組織機(jī)構(gòu)、選擇經(jīng)驗(yàn)豐富的管理人員、建立良好的協(xié)作關(guān)系與、制定合適的培訓(xùn)計(jì)劃等,保證項(xiàng)目順利執(zhí)行。(3)經(jīng)濟(jì)可行性:主要從資源配置的角度衡量項(xiàng)目的價(jià)值,評(píng)價(jià)項(xiàng)目在實(shí)現(xiàn)區(qū)域經(jīng)濟(jì)發(fā)展目標(biāo)、有效配置經(jīng)濟(jì)資源、增加供應(yīng)、創(chuàng)造就業(yè)、改善環(huán)境、提高人民生活等方面的效益。(4)法律可行性:在開(kāi)發(fā)一個(gè)軟件之前一定要確定它是否觸犯某項(xiàng)法律或與國(guó)家的相關(guān)規(guī)定是否抵觸。掃雷游戲系統(tǒng)并不任何法律或國(guó)家相關(guān)規(guī)定相抵觸,所以在法律可行性上是通過(guò)的,在進(jìn)行設(shè)計(jì)時(shí)沒(méi)有違法任何法律法規(guī),也不對(duì)任何企業(yè)的系統(tǒng)進(jìn)行侵權(quán)等。系統(tǒng)的研制和開(kāi)發(fā)都選用正版軟件,將不會(huì)侵犯他人、集體和國(guó)家的利益,不會(huì)違反相關(guān)的國(guó)家政策和法律。(5)技術(shù)可行性評(píng)價(jià):在限制條件下,功能目標(biāo)基本能夠?qū)崿F(xiàn)和達(dá)到,利用現(xiàn)有技術(shù),功能目標(biāo)基本能夠達(dá)到,開(kāi)發(fā)人員足夠能夠滿(mǎn)足條件要求,在規(guī)定時(shí)間內(nèi)能夠完成該項(xiàng)目開(kāi)發(fā)。2.2需求分析隨著社會(huì)的不斷進(jìn)步,人們所承受的壓力不斷上升,在游戲?qū)映霾桓F的時(shí)刻,掃雷游戲仍受到不少人的青睞,其本身的性質(zhì),決定了人們對(duì)它的喜愛(ài)程度,不需要特殊的技巧,不需要不斷地升級(jí),不需要太多的時(shí)間進(jìn)行初步的熟悉,簡(jiǎn)簡(jiǎn)單單卻樂(lè)趣無(wú)窮。2.2.1理解需求掃雷游戲系統(tǒng)的建立,需要進(jìn)行用戶(hù)需求調(diào)查與分析,以確定系統(tǒng)目標(biāo),提高解決問(wèn)題的詳細(xì)方案,這是系統(tǒng)建設(shè)的重要環(huán)節(jié)。(1)系統(tǒng)可以根據(jù)需求來(lái)設(shè)計(jì)功能模塊,如“開(kāi)局”、“初級(jí)”、“中級(jí)”、“高級(jí)”“自定義”、“掃雷英雄榜”和“退出”等。(2)系統(tǒng)運(yùn)行在Eclipse平臺(tái)下,系統(tǒng)應(yīng)該有一個(gè)較好的圖形用戶(hù)界面。2.2.2功能需求需求分析的任務(wù)是通過(guò)詳細(xì)調(diào)查現(xiàn)實(shí)世界要處理的對(duì)象,充分了解原系統(tǒng)(手工系統(tǒng)或計(jì)算機(jī)系統(tǒng))工作概況,明確各種需求,然后在此基礎(chǔ)上確定新系統(tǒng)的功能。根據(jù)用戶(hù)的需求,確定本掃雷游戲應(yīng)具有以下功能:(1)用戶(hù)可以自行選擇難度界別;(2)自動(dòng)保存掃雷英雄榜;(3)用戶(hù)可以設(shè)計(jì)“初級(jí)”、“中級(jí)”、“高級(jí)”三個(gè)級(jí)別。第三章詳細(xì)設(shè)計(jì)在設(shè)計(jì)掃雷游戲時(shí),需要編寫(xiě)4個(gè)Java源程序:ArrayPane.java,JavaMineSweeping.java,JavaMineSweepingFrame.java,RandomNumber.java。掃雷游戲除了需要編寫(xiě)上述4個(gè)Java源文件所給出的類(lèi)外,還需要Java系統(tǒng)提供的一些重要的類(lèi),如File、JButton和JLabel等類(lèi)。掃雷系統(tǒng)流程圖如圖3-1所示:圖3-1流程圖3.1JavaMineSweepingFrame類(lèi)JavaMineSweepingFrame類(lèi)是javax.swing包中JFrame的一個(gè)子類(lèi),并實(shí)現(xiàn)了ActionListener接口。主要控制“選擇”菜單欄里的選項(xiàng)和狀態(tài)欄的名稱(chēng)。如圖3-2所示:圖3-2菜單欄3.2ArrayPane類(lèi)ArrayPane類(lèi)是javax.swing包中JPanel容器的子類(lèi),實(shí)現(xiàn)了ActionListener和MouseListener接口,所創(chuàng)建的對(duì)象:ArrayPane是ArrayPane類(lèi)中最重要的成員之一,作為一個(gè)容器添加到窗口的中心。3.3javaMineSweeping類(lèi)javaMineSweeping類(lèi)負(fù)責(zé)創(chuàng)建掃雷游戲機(jī)主窗口,該文件含有main方法,掃雷游戲從該類(lèi)開(kāi)始執(zhí)行。3.4RandomNumber類(lèi)RandomNumber類(lèi)是雷區(qū)中“方塊”的類(lèi)封裝,含有關(guān)于“方塊”的屬性以及操作,即負(fù)責(zé)為雷區(qū)創(chuàng)建代表“方塊”的對(duì)象。3.5具體內(nèi)容3.5.1菜單欄內(nèi)容的生成通過(guò)創(chuàng)建多個(gè)對(duì)象實(shí)現(xiàn)菜單欄里項(xiàng)目的生成JMenuBarmenuBar=newJMenuBar();JMenumenuFile=newJMenu("選擇");JMenuItemmenuLevelOne=newJMenuItem("初級(jí)");JMenuItemmenuLevelTwo=newJMenuItem("中級(jí)");JMenuItemmenuLevelThree=newJMenuItem("高級(jí)");JMenuItemmenuFileExit=newJMenuItem("退出");JButtonbutReset=newJButton("重來(lái)");3.5.2雷的生成通過(guò)在不同難度下的固定格數(shù)指定雷數(shù)然后通過(guò)隨機(jī)數(shù)生成雷的位置,每次生成雷的位置不同publicArrayPane(introw,intcol){ this.row=row;//接受定制的行 this.col=col;//接受定制的列 if(row==9&&col==9){ totleNumber=10; }elseif(row==16&&col==16){ totleNumber=40; }elseif(row==16&&col==30){ totleNumber=99; }3.5.3單機(jī)非雷塊后數(shù)字顯示首先,在單擊每塊方塊后會(huì)記錄此次單擊的位置坐標(biāo)。privatestaticintclickRow;//當(dāng)點(diǎn)擊后,記住行坐標(biāo) privatestaticintclickCol;//當(dāng)點(diǎn)擊后,記住列坐標(biāo)然后會(huì)調(diào)用一個(gè)遞歸的循環(huán)來(lái)處理雷塊周?chē)卸嗌倮罪@示數(shù)字的問(wèn)題。b=newJButton[row][col];//設(shè)置按鈕 for(i=0;i<row;i++){ //初始化按鈕組 for(j=0;j<col;j++){ b[i][j]=newJButton(); b[i][j].addActionListener(this); b[i][j].addMouseListener(this); p2.add(b[i][j]); } } this.setBorder(BorderFactory.createTitledBorder(row*col+"格")); this.setLayout(newBorderLayout()); this.add(p1,BorderLayout.NORTH); this.add(p2,BorderLayout.CENTER); }第四章系統(tǒng)測(cè)試(1)程序運(yùn)行后,界面上有一個(gè)菜單和一個(gè)按鈕,分別是“選擇”和“重來(lái)”;當(dāng)玩家踩雷時(shí)候可以點(diǎn)擊“重新開(kāi)始來(lái)”。如圖4-1所示:圖4-1程序運(yùn)行圖(2)當(dāng)玩家點(diǎn)擊“游戲”菜單時(shí)會(huì)出現(xiàn)4個(gè)子菜單,分別是“初級(jí)”、“中級(jí)”、“高級(jí)”和“退出”。,玩家可以通過(guò)選擇“初級(jí)”、“中級(jí)”和“高級(jí)”按鈕來(lái)選擇游戲級(jí)別;游戲結(jié)束后玩家可以通過(guò)“退出”退出游戲框。圖4-2難度級(jí)別選擇圖4-3中級(jí)難度界面圖4-4高級(jí)難度界面圖4-5掃雷失敗界面結(jié)束語(yǔ)通過(guò)這一階段的畢業(yè)設(shè)計(jì),我設(shè)計(jì)的教務(wù)系統(tǒng)終于基本完成。系統(tǒng)基本實(shí)現(xiàn)了老師的要求。期間出現(xiàn)過(guò)很多的問(wèn)題,比如對(duì)數(shù)據(jù)庫(kù)認(rèn)識(shí)不夠、功能優(yōu)越性沒(méi)得到充分發(fā)揮、對(duì)軟件和一些類(lèi)庫(kù)的操作不足等,但在老師和同學(xué)的幫助下這些問(wèn)題都得到了基本解決。在該系統(tǒng)制作的全過(guò)程中,我學(xué)會(huì)了如何去獲取知識(shí),如何去認(rèn)真的做事情。由于時(shí)間和能力等各方面的限制,系統(tǒng)的設(shè)計(jì)和功能方面還存在著很多不足,沒(méi)有達(dá)到預(yù)期想象,還需要不斷改進(jìn)和完善。畢業(yè)設(shè)計(jì)的結(jié)束大學(xué)也就結(jié)束了,但我會(huì)努力的提高自己,用在大學(xué)學(xué)到的技術(shù)和本領(lǐng)在社會(huì)上做出自己的貢獻(xiàn)。參考文獻(xiàn)[1]朱福喜,尹為民,余振坤.Java語(yǔ)言與面向?qū)ο蟪绦蛟O(shè)計(jì).武漢:武漢大學(xué)出版社,2008.[2]陳國(guó)君,陳磊.Java2從入門(mén)到精通.北京:清華大學(xué)出版社,2008.[3]王梅,Java并發(fā)編程—設(shè)計(jì)原則與模式.北京:中國(guó)電力出版社,2009.[4]尹偉民,Java程序設(shè)計(jì)之網(wǎng)絡(luò)編程.北京:清華大學(xué)出版社,2008.[5]印昊.Java與面向?qū)ο蟪绦蛟O(shè)計(jì).北京:高等教育出版社,2008.[6]耿祥義.Java課程設(shè)計(jì).北京:清華大學(xué)出版社,2009.[7]趙生慧.Java面向?qū)ο蟪绦蛟O(shè)計(jì).北京:高等教育出版社,2009. 致謝畢業(yè)設(shè)計(jì)即將結(jié)束,大學(xué)的生活也就要要隨之結(jié)束了。在畢業(yè)設(shè)計(jì)期間,我得到了老師很多的幫助和支持。,在程序制作方面,我吸收到許多有價(jià)值的技術(shù)知識(shí),并且學(xué)會(huì)了如何自己學(xué)習(xí),自己鉆研,在我編寫(xiě)論文期間,老師給了我很多建設(shè)性意見(jiàn),尤其是在數(shù)據(jù)流圖、數(shù)據(jù)字典,程序流程圖方面,并督促我多查閱資料。一遍一遍的幫我檢查,指導(dǎo)我修改,使得我能最終順利的完成了畢業(yè)設(shè)計(jì)。再次向一直支持鼓勵(lì)我、關(guān)心我的老師、父母、同學(xué)和朋友們致以最誠(chéng)摯的謝意!附錄程序源代碼JavaMineSweeping.java/***Swing掃雷游戲**@authorliu*@version1.002005/12/5*/importjavax.swing.*;publicclassJavaMineSweeping{publicstaticvoidmain(String[]args){ //try{//這是獲取當(dāng)前系統(tǒng)所運(yùn)行的平臺(tái)的程序外觀(guān)。 // UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); //}catch(Exceptione){ // e.printStackTrace();//打印異常的堆棧信息 //} JavaMineSweepingFrameframe=newJavaMineSweepingFrame(9,9);frame.setVisible(true);}}JavaMineSweepingFrame.javaimportjava.awt.*;importjava.awt.event.*;importjavax.swing.*;/***SampleapplicationusingFrame.**@authorXieFei*@version1.0004/11/28*/publicclassJavaMineSweepingFrameextendsJFrameimplementsActionListener{ JMenuBarmenuBar=newJMenuBar();JMenumenuFile=newJMenu("選擇");JMenuItemmenuLevelOne=newJMenuItem("初級(jí)");JMenuItemmenuLevelTwo=newJMenuItem("中級(jí)");JMenuItemmenuLevelThree=newJMenuItem("高級(jí)");JMenuItemmenuFileExit=newJMenuItem("退出");JButtonbutReset=newJButton("重來(lái)");JToolBartoolBar=newJToolBar();Containercon=this.getContentPane();JPanelp1=newJPanel();Dimensiond=newDimension(400,350);introw;//行intcol;//列ArrayPaneap; publicJavaMineSweepingFrame(introw,intcol){ super("掃雷——謝非"); menuLevelOne.addActionListener(this); menuLevelTwo.addActionListener(this); menuLevelThree.addActionListener(this); this.row=row; this.col=col; ap=newArrayPane(row,col);//加載菜單this.setJMenuBar(menuBar);menuBar.add(menuFile);menuFile.add(menuLevelOne);menuFile.add(menuLevelTwo);menuFile.add(menuLevelThree);menuFile.add(menuFileExit);butReset.addActionListener(this);toolBar.add(butReset);con.setLayout(newBorderLayout());con.add(toolBar,BorderLayout.NORTH);//北面 menuLevelOne.addActionListener(this);menuLevelTwo.addActionListener(this);menuLevelThree.addActionListener(this);menuFileExit.addActionListener(this);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);con.add(p1,BorderLayout.CENTER);//中間p1.setLayout(newGridLayout(1,1));p1.add(ap);this.setSize(400,400);this.setLocation(200,100);} publicvoidactionPerformed(ActionEvente){ if(e.getSource().equals(menuLevelOne)){ this.row=9; this.col=9; d=newDimension(400,350); this.reSet(d); } elseif(e.getSource().equals(menuLevelTwo)){ this.row=16; this.col=16; d=newDimension(500,450); this.reSet(d); } elseif(e.getSource().equals(menuLevelThree)){ this.row=16; this.col=30; d=newDimension(750,550); this.reSet(d); } elseif(e.getSource().equals(this.menuFileExit)){ System.exit(0); } elseif(e.getSource().equals(butReset)){ this.reSet(this.d); } } publicvoidreSet(Dimensiond){//??????????????????????????????????? this.p1.removeAll(); ArrayPaneap=newArrayPane(this.row,this.col); p1.add(ap); this.setVisible(false); //this.repaint(); this.setSize(d); this.setVisible(true); }}ArrayPane.java/*** 產(chǎn)生規(guī)定大小的帶有按鈕的面板***/importjavax.swing.*;importjava.awt.event.*;importjava.awt.*;publicclassArrayPaneextendsJPanelimplementsActionListener,MouseListener{ privateintrow,col;//參數(shù),接受窗體類(lèi)傳進(jìn)來(lái)的行和列數(shù) privateinti,k,j;//計(jì)數(shù)器 privatestaticintclickRow;//當(dāng)點(diǎn)擊后,記住行坐標(biāo) privatestaticintclickCol;//當(dāng)點(diǎn)擊后,記住列坐標(biāo) privateJButtonb[][];//雷按鈕 privateImageIconimageIcon=newImageIcon("..\\icon\\a.jpg");//選種雷的圖片 privatestaticinttotleNumber; privateJLabeltitle=newJLabel();//顯示結(jié)果的標(biāo)簽 privateintarrayNumber[][];//接受隨即數(shù) privateJPanelp1=newJPanel(); privateJPanelp2=newJPanel(); /* * *構(gòu)造函數(shù) * */ publicArrayPane(introw,intcol){ this.row=row;//接受定制的行 this.col=col;//接受定制的列 if(row==9&&col==9){ totleNumber=10; }elseif(row==16&&col==16){ totleNumber=40; }elseif(row==16&&col==30){ totleNumber=99; } title.setText("還剩"+String.valueOf(totleNumber)+"個(gè)雷"); arrayNumber=newRandomNumber().getNumberArray(row,col);//產(chǎn)生隨即數(shù)數(shù)組 p1.add(title); p2.setLayout(newGridLayout(row,col)); b=newJButton[row][col];//設(shè)置按鈕 for(i=0;i<row;i++){ //初始化按鈕組 for(j=0;j<col;j++){ b[i][j]=newJButton(); b[i][j].addActionListener(this); b[i][j].addMouseListener(this); p2.add(b[i][j]); } } this.setBorder(BorderFactory.createTitledBorder(row*col+"格")); this.setLayout(newBorderLayout()); this.add(p1,BorderLayout.NORTH); this.add(p2,BorderLayout.CENTER); } /** *MethodactionPerformed * * *事件監(jiān)聽(tīng) * */ publicvoidactionPerformed(ActionEvente){ System.out.println("點(diǎn)擊事件"); breakPoint://設(shè)置循環(huán)跳出的點(diǎn) for(i=0;i<row;i++){ for(j=0;j<col;j++){ if(e.getSource().equals(b[i][j])){ this.clickRow=i; this.clickCol=j; breakbreakPoint; } } } } /******************鼠標(biāo)事件***************/ publicvoidmouseClicked(MouseEvente){ System.out.println("鼠標(biāo)事件"); if(SwingUtilities.isLeftMouseButton(e)){//如果是左鍵 if(arrayNumber[this.clickRow][this.clickCol]==0){//如果沒(méi)有點(diǎn)中雷 intunitNumber=this.arithmetic(this.clickRow,this.clickCol);//返回這個(gè)點(diǎn)周?chē)睦卓倲?shù) b[this.clickRow][this.clickCol].setText(String.valueOf(unitNumber));//顯示周?chē)卓倲?shù) } else{//如果點(diǎn)中了雷 JOptionPane.showMessageDialog(this,"你踩到雷了!GG思密達(dá)!"); } } /* * *鼠標(biāo)右鍵比較特殊,沒(méi)有觸發(fā)actionPerformed事件, * *所以必須從新便歷一次,來(lái)查找到右鍵點(diǎn)擊的是哪個(gè)按鈕 * */ elseif(SwingUtilities.isRightMouseButton(e)){//如果按的是右鍵 for(i=0;i<row;i++){ for(j=0;j<col;j++){ if(e.getSource().equals(b[i][j])){ if(arrayNumber[i][j]!=0){//如果右鍵點(diǎn)擊的按鈕是雷 b[i][j].setIcon(imageIcon); totleNumber--; title.setText("還剩"+String.valueOf(totleNumber)+"個(gè)雷"); } else{ //如果右鍵點(diǎn)擊的按鈕不是雷 b[i][j].setText("★"); //調(diào)用全都顯示的方法 } } } } } } publicvoidmousePressed(MouseEvente){} publicvoidmouseReleased(MouseEvente){} publicvoidmouseEntered(MouseEvente){} publicvoidmouseExited(MouseEvente){} /* * * 算法函數(shù) * * * * */ privateintarithmetic(introw,intcol){//算法返回周?chē)卓倲?shù) inttotleLei=0; /*****************第一行******************/ if(row==0){ if(col==0){ //1行1列 if(arrayNumber[0][1]!=0)//1行2列 totleLei++; if(arrayNumber[1][0]!=0)//2行1列 totleLei++; if(arrayNumber[1][1]!=0)//2行2列 totleLei++; } elseif(col==(this.col-1)){ //1行最后1列 if(arrayNumber[0][this.col-2]!=0)//1行n-1列 totleLei++; if(arrayNumber[1][this.col-1]!=0)//2行n列 totleLei++; if(arrayNumber[1][this.col-2]!=0)//2行n-1列 totleLei++; } else{ //1行中間列 if(arrayNumber[0][col-1]!=0)//1行col-1列 totleLei++; if(arrayNumber[0][col+1]!=0)//1行col+1列 totleLei++; if(arrayNumber[1][col-1]!=0)//2行col-1列 totleLei++; if(arrayNumber[1][col]!=0)//2行col列 totleLei++; if(arrayNumber[1][col+1]!=0)//2行col+1列 totleLei++; } } /*****************最后一行******************/ elseif(row==(this.row-1)){ if(col==0){ //最后行1列 if(arrayNumber[this.row-1][1]!=0)//最后一行2列 totleLei++; if(arrayNumber[this.row-2][0]!=0)//n-1行1列 totleLei++; if(arrayNumber[this.row-2][1]!=0)//n-1行2列 totleLei++; } elseif(col==(this.col-1)){ //最后行最后列 if(arrayNumber[this.row-1][this.col-2]!=0)//最后行n-1列 totleLei++; if(arrayNumber[this.row-2][this.col-1]!=0)//n-1行n列 totleLei++; if(arrayNumber[this.row-2][this.col-2]!=0)//n-1行n-1列 totleLei++; } else{ //最后行中間列 if(arrayNumber[this.row-1][col-1]!=0)//最后行col-1列 totleLei++; if(arrayNumber[this.row-1][col+1]!=0)//最后行col+1列 totleLei++; if(arrayNumber[this.row-2][col-1]!=0)//n-1行col-1列 totleLei++; if(arrayNumber[this.row-2][col]!=0)//n-1行col列 totleLei++; if(arrayNumber[this.row-2][col+1]!=0)//n-1行col+1列 totleLei++; } } /*****************第一列中間******************/ elseif(col==0){ if(arrayNumber[row-1][0]!=0) totleLei++; if(arrayNumber[row+1][0]!=0) totleLei++; if(arrayNumber[row-1][1]!=0) totleLei++; if(arrayNumber[row][1]!=0) totleLei++; if(arrayNumber[row-1][1]!=0) totleLei++; } /*****************最后列中間******************/ elseif(col==(this.col-1)){ if(arrayNumber[row-1][this.col-1]!=0) totleLei++; if(arrayNumber[row+1][this.col-1]!=0) totleLei++; if(arrayNumber[row-1][this.col-2]!=0) totleLei++; if(arrayNumber[row][this.col-2]!=0) totleLei++; if(arrayNumber[row-1][this.col-2]!=0) totleLei++; } /*****************中間******************/ else{ if(arrayNumber[row-1][col-1]!=0) totleLei++; if(arrayNumber[row-1][col]!=0) totleLei++; if(arrayNumber[row-1][col+1]!=0) totleLei++; if(arrayNumber[row][col-1]!=0) totleLei++; if(arrayNumber[row][col+1]!=0) totleLei++; if(arrayNumber[row+1][col-1]!=0) totleLei++; if(arrayNumber[row+1][col]!=0) totleLei++; if(arrayNumber[row+1][col+1]!=0) totleLei++; } returntotleLei; } }RandomNumber.java/*******/importjava.util.Random;importjava.lang.Math;publicclassRandomNumber{ inta,b; inti,j; intc,d; inttemp=0; publicint[][]getNumberArray(introw,intcol){ intarray1[][]=newint[row][col];//存放隨即數(shù) intarray[][]=newint[row][col];//存放具體數(shù)值 if(row==9&&col==9){ a=2;b=5;//得到2*5個(gè)雷 }elseif(row==16&&col==16){ a=5;b=8;//得到5*8個(gè)雷 }elseif(row==30&&col==16){ a=11;b=9;//得到11*9個(gè)雷 } for(i=0;i<row;i++){ //初始化數(shù)組 for(j=0;j<col;j++){ array[i][j]=++temp;//都等于1 } } for(i=0;i<a;i++){ for(j=0;j<b;j++){ this.c=(int)(Math.random()*row);//隨即獲得行數(shù) this.d=(int)(Math.random()*col);//隨即獲得列數(shù) System.out.println(c+""+d); array1[c][d]=array[c][d]; } } for(i=0;i<row;i++){ //初始化隨即數(shù)數(shù)組 for(j=0;j<col;j++){ //System.out.println("array["+i+"]["+j+"]=="+array[i][j]); //System.out.println("array1["+i+"]["+j+"]=="+array1[i][j]); } } returnarray1; }}太原科技大學(xué)華科學(xué)院畢業(yè)設(shè)計(jì)(論文)基于C8051F單片機(jī)直流電動(dòng)機(jī)反饋控制系統(tǒng)的設(shè)計(jì)與研究基于單片機(jī)的嵌入式Web服務(wù)器的研究MOTOROLA單片機(jī)MC68HC(8)05PV8/A內(nèi)嵌EEPROM的工藝和制程方法及對(duì)良率的影響研究基于模糊控制的電阻釬焊單片機(jī)溫度控制系統(tǒng)的研制基于MCS-51系列單片機(jī)的通用控制模塊的研究基于單片機(jī)實(shí)現(xiàn)的供暖系統(tǒng)最佳啟停自校正(STR)調(diào)節(jié)器單片機(jī)控制的二級(jí)倒立擺系統(tǒng)的研究基于增強(qiáng)型51系列單片機(jī)的TCP/IP協(xié)議棧的實(shí)現(xiàn)基于單片機(jī)的蓄電池自動(dòng)監(jiān)測(cè)系統(tǒng)基于32位嵌入式單片機(jī)系統(tǒng)的圖像采集與處理技術(shù)的研究基于單片機(jī)的作物營(yíng)養(yǎng)診斷專(zhuān)家系統(tǒng)的研究基于單片機(jī)的交流伺服電機(jī)運(yùn)動(dòng)控制系統(tǒng)研究與開(kāi)發(fā)基于單片機(jī)的泵管內(nèi)壁硬度測(cè)試儀的研制基于單片機(jī)的自動(dòng)找平控制系統(tǒng)研究基于C8051F040單片機(jī)的嵌入式系統(tǒng)開(kāi)發(fā)基于單片機(jī)的液壓動(dòng)力系統(tǒng)狀態(tài)監(jiān)測(cè)儀開(kāi)發(fā)模糊Smith智能控制方法的研究及其單片機(jī)實(shí)現(xiàn)一種基于單片機(jī)的軸快流CO〈,2〉激光器的手持控制面板的研制基于雙單片機(jī)沖床數(shù)控系統(tǒng)的研究基于CYGNAL單片機(jī)的在線(xiàn)間歇式濁度儀的研制基于單片機(jī)的噴油泵試驗(yàn)臺(tái)控制器的研制基于單片機(jī)的軟起動(dòng)器的研究和設(shè)計(jì)基于單片機(jī)控制的高速快走絲電火花線(xiàn)切割機(jī)床短循環(huán)走絲方式研究基于單片機(jī)的機(jī)電產(chǎn)品控制系統(tǒng)開(kāi)發(fā)基于PIC單片機(jī)的智能手機(jī)充電器基于單片機(jī)的實(shí)時(shí)內(nèi)核設(shè)計(jì)及其應(yīng)用研究基于單片機(jī)的遠(yuǎn)程抄表系統(tǒng)的設(shè)計(jì)與研究基于單片機(jī)的煙氣二氧化硫濃度檢測(cè)儀的研制基于微型光譜儀的單片機(jī)系統(tǒng)單片機(jī)系統(tǒng)軟件構(gòu)件開(kāi)發(fā)的技術(shù)研究基于單片機(jī)的液體點(diǎn)滴速度自動(dòng)檢測(cè)儀的研制基于單片機(jī)系統(tǒng)的多功能溫度測(cè)量?jī)x的研制基于PIC單片機(jī)的電能采集終端的設(shè)計(jì)和應(yīng)用基于單片機(jī)的光纖光柵解調(diào)儀的研制氣壓式線(xiàn)性摩擦焊機(jī)單片機(jī)控制系統(tǒng)的研制基于單片機(jī)的數(shù)字磁通門(mén)傳感器基于單片機(jī)的旋轉(zhuǎn)變壓器-數(shù)字轉(zhuǎn)換器的研究基于單片機(jī)的光纖Bragg光柵解調(diào)系統(tǒng)的研究單片機(jī)控制的便攜式多功能乳腺治療儀的研制基于C8051F020單片機(jī)的多生理信號(hào)檢測(cè)儀基于單片機(jī)的電機(jī)運(yùn)動(dòng)控制系統(tǒng)設(shè)計(jì)Pico專(zhuān)用單片機(jī)核的可測(cè)性設(shè)計(jì)研究基于MCS-51單片機(jī)的熱量計(jì)基于雙單片機(jī)的智能
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 賣(mài)隨車(chē)吊合同范本
- 勞務(wù)下浮合同范本
- 加盟制式合同范本
- led設(shè)備租賃合同范本
- 單位安全合同范例
- 公園勞務(wù)服務(wù)合同范本
- 賣(mài)沙居間合同范本
- 倉(cāng)儲(chǔ)貨架采購(gòu)合同范本
- 包裝印刷銷(xiāo)售合同范本
- 變壓器加工合同范本
- JC-019粉煤灰檢測(cè)報(bào)告
- VTE相關(guān)知識(shí)考核試題及答案
- 高中語(yǔ)文教學(xué)課例《沁園春長(zhǎng)沙》課程思政核心素養(yǎng)教學(xué)設(shè)計(jì)及總結(jié)反思
- 三生公司獎(jiǎng)金制度
- 神經(jīng)病學(xué)-緒論課件
- 危險(xiǎn)化學(xué)品全表
- 公路施工技術(shù)全套課件
- 胸痹心痛中醫(yī)診療方案及臨床路徑
- 泛讀2unit2-music
- 中學(xué)生防溺水安全教育課件(PPT 44頁(yè))
- 2019版外研社高中英語(yǔ)選擇性必修二Unit 1 Growing up 單詞表
評(píng)論
0/150
提交評(píng)論