基于Java掃雷游戲的設(shè)計與實現(xiàn)_第1頁
基于Java掃雷游戲的設(shè)計與實現(xiàn)_第2頁
基于Java掃雷游戲的設(shè)計與實現(xiàn)_第3頁
基于Java掃雷游戲的設(shè)計與實現(xiàn)_第4頁
基于Java掃雷游戲的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

畢業(yè)設(shè)計(論文)題目:基于Java掃雷游戲的設(shè)計與實現(xiàn)2014年11月1日任務(wù)書學(xué)院(直屬系):計算機(jī)科學(xué)與技術(shù)系時間:2014年5月20日學(xué)生姓名指導(dǎo)教師設(shè)計(論文)題目基于Java掃雷游戲的設(shè)計與實現(xiàn)主要研究內(nèi)容1、完成掃雷游戲圖形用戶界面的設(shè)計。2、完成掃雷游戲內(nèi)的功能模塊,如難度級別模塊、開局、退出模塊等。3、完成掃雷游戲的具體玩法功能研究方法鑒于此項目比較簡單,只編寫了四個JAVA源程序ArrayPane.java,JavaMineSweeping.java,JavaMineSweepingFrame.java,RandomNumber.java。還用到了一些JAVA系統(tǒng)提供的重要的類,如File、JButton和JLabel等類。主要技術(shù)指標(biāo)(或研究目標(biāo))主要實現(xiàn):圖形界面的出現(xiàn)、游戲功能正常執(zhí)行、三個難度系數(shù)選擇、過關(guān)后數(shù)據(jù)錄入掃雷英雄榜。主要參考文獻(xiàn)[1]朱福喜,尹為民,余振坤.Java語言與面向?qū)ο蟪绦蛟O(shè)計.武漢:武漢大學(xué)出版社,2008.[2]陳國君,陳磊.Java2從入門到精通.北京:清華大學(xué)出版社,2008.[3]王梅,Java并發(fā)編程—設(shè)計原則與模式.北京:中國電力出版社,2009.[4]尹偉民,Java程序設(shè)計之網(wǎng)絡(luò)編程.北京:清華大學(xué)出版社,2008.[5]印昊.Java與面向?qū)ο蟪绦蛟O(shè)計.北京:高等教育出版社,2008.[6]耿祥義.Java課程設(shè)計.北京:清華大學(xué)出版社,2009.[7]趙生慧.Java面向?qū)ο蟪绦蛟O(shè)計.北京:高等教育出版社,2009.第一章系統(tǒng)概述1.1緒論掃雷一詞有多個意思。掃雷游戲是微軟于1992年附帶在其操作系統(tǒng)中的小游戲,它通過點擊格子并以出現(xiàn)的數(shù)字來判斷附近地雷的數(shù)量,將全部地雷做上標(biāo)記即可勝利;軍事上的掃雷(mineclearing)是指搜索和清除地雷、陸軍水雷及其他爆炸物的行動;掃雷又被引作網(wǎng)絡(luò)用語。掃雷最原始的版本可以追溯到1973年一款名為“方塊”的游戲,不久之后,“方塊”被改寫成了游戲“Rlogic”,在“Rlogic”里,玩家的任務(wù)是作為美國海軍陸戰(zhàn)隊隊員,為指揮中心探出一條沒有地雷的安全路線,如果路全被地雷堵死就算輸。兩年后,湯姆·安德森在“Rlogic”的基礎(chǔ)上又編寫出了游戲“地雷”,由此奠定了現(xiàn)代掃雷游戲的雛形。1981年,微軟公司的羅伯特·杜爾和卡特·約翰遜兩位工程師在Windows3.1系統(tǒng)上加載了該游戲,掃雷游戲才正式在全世界推廣開來。這款游戲的玩法是在一個9*9(初級),16*16(中級),16*30(高級),或自定義大小的方塊矩陣中隨機(jī)布置一定量的地雷(初級為10個,中級為40個,高級為99個)。由玩家逐個翻開方塊,以找出所有地雷為最終游戲目標(biāo)。如果玩家翻開的方塊有地雷,則游戲結(jié)束。掃雷游戲的目標(biāo)是盡快找到雷區(qū)中的所有不是地雷的方塊,而不許踩到地雷。游戲區(qū)包括雷區(qū)、地雷計數(shù)器和計時器,在“游戲”菜單上,單擊“開局”,計時器就會啟動,此時請單擊游戲區(qū)中的任何方塊,點開的數(shù)字是幾,則說明該數(shù)字旁邊的8個位置中有幾個雷,如果挖開的是地雷,則會輸?shù)粲螒?,用右鍵標(biāo)記您認(rèn)為可能有地雷的方塊。1.2開發(fā)工具SunMicrosystems公司在推出Java語言的同時,推出了一套開發(fā)工具JDK。Sun提供的基于字符模式的Java開發(fā)工具包JDK:Java開發(fā)工具(JDK)是許多Java專家最初使用的開發(fā)環(huán)境。Java是平臺無關(guān)的語言是指用Java寫的應(yīng)用程序不用修改就可在不同的軟硬件平臺上運(yùn)行。

Java源程序編寫借助于記事本,Editpuls,UltraEdit等三方編輯工具編寫。

所有的Java文件編輯、編譯、調(diào)試、解釋運(yùn)行都是通過使用字符命令來執(zhí)行操作。JDK由一個標(biāo)準(zhǔn)類庫和一組建立,測試及建立文檔的Java實用程序組成。其核心JavaAPI是一些預(yù)定義的類庫,開發(fā)人員需要用這些類來訪問Java語言的功能。JDK是整個Java的核心,包括了Java運(yùn)行環(huán)境(JavaRuntimeEnvirnment),一堆Java工具和Java基礎(chǔ)的類庫(rt.jar)。不論什么Java應(yīng)用服務(wù)器實質(zhì)都是內(nèi)置了某個版本的JDK。因此掌握J(rèn)DK是學(xué)好Java的第一步。

JDK里面是Java類庫和Java的語言規(guī)范,它提供的是無論你用何種開發(fā)軟件寫Java程序都必須用到的類庫和Java語言規(guī)范.沒有JDK,你的Java程序根本就不能用。

最主流的JDK是Sun公司發(fā)布的JDK,除了Sun之外,還有很多公司和組織都開發(fā)了自己的JDK,例如IBM公司開發(fā)的JDK,BEA公司的Jrocket,還有GNU組織開發(fā)的JDK等等。其中IBM的JDK包含的JVM(JavaVirtualMachine)運(yùn)行效率要比SunJDK包含的JVM高出許多。而專門運(yùn)行在x86平臺的Jrocket在服務(wù)端運(yùn)行效率也要比SunJDK好很多。但不管怎么說,我們還是需要先把SunJDK掌握好。1.3應(yīng)用環(huán)境(1)操作系統(tǒng):WindowsXP及以上版本(2)應(yīng)用軟件:JDKEclipse1.4編寫意義隨著計算機(jī)得普及,人們越來越多得接觸到計算機(jī),人們得生活工作中無處不有計算機(jī)得身影,人們面對長時間的難免會有倦怠的情緒,而人們大多得緩解情緒得網(wǎng)絡(luò)活動其實并不能起到放松心情得作用,現(xiàn)代人得生活節(jié)奏越來越快,有沒有一種快速緩解疲倦得游戲呢?我們提出設(shè)計一款益智得小游戲,這種游戲不會花太多時間,同時把玩家得思維帶動起來,達(dá)到一舉多得得效果。隨著現(xiàn)在生活節(jié)奏的加快,人們在工作之余需要一個輕松娛樂的放松環(huán)境。因此我們小組編寫此軟件的目的,一方面作為初學(xué)者來了解掃雷的開發(fā),另一方面開發(fā)此軟件使用戶能在娛樂休閑的同時拓展思維能力。同時進(jìn)一步拓展研究,做到將掃雷層次升級,能夠在多人連機(jī)的情況下,一起分工來進(jìn)行對戰(zhàn)。如一方放雷,另一方排雷。1.5任務(wù)設(shè)計內(nèi)容本次設(shè)計只是完成了掃雷游戲的基本功能,在細(xì)節(jié)方面仍有待以后完善。Windows2000/XP系統(tǒng)提供的掃雷游戲是一個很有趣的游戲。本章的課程設(shè)計使用Java語言編寫一個與其類似的掃雷游戲。具體要求如下:(1)掃雷游戲分為初級、中級和高級三個級別,掃雷英雄榜存儲每個級別的最好成績,即挖出全部的地雷且用時最少者。單擊游戲菜單可以選擇“初級”、“中級”和“高級”或“查看英雄版”。(2)選擇級別后將出現(xiàn)相應(yīng)級別的掃雷區(qū)域,這是用戶使用鼠標(biāo)左鍵單擊雷區(qū)中任何一個方塊便啟動計時器。(3)用戶要揭開某個方塊,可單擊它。若所揭方塊下有淚,用戶便輸了這一局,若所揭方塊下無雷,則顯示一個數(shù)字,該數(shù)字代表方塊的周圍的8個方塊中共有多少顆雷。(4)如果用戶認(rèn)為某個方塊下埋著雷,單擊右鍵可以在方塊上標(biāo)識一個用戶認(rèn)為是雷的圖標(biāo),即給出一個掃雷標(biāo)記。用戶每標(biāo)記出一個掃雷標(biāo)記(無論用戶的標(biāo)記是否正確),程序?qū)@示的剩余雷數(shù)減少一個。(5)掃雷勝利后(用時最少者),程序彈出保存成績的對話框。第二章可行性分析和需求分析2.1可行性分析適用于各種群體,學(xué)生、老師、白領(lǐng),簡單卻有效地舒緩壓力,消磨閑暇時光,一局所需的時間很短,低級的只需十多秒,此軟件是以娛樂為主的休閑游戲,開發(fā)基于安卓手機(jī)操作系統(tǒng)。具有操作方便、便于保存等優(yōu)點投資可行性:主要根據(jù)市場調(diào)查及預(yù)測的結(jié)果,以及有關(guān)的產(chǎn)業(yè)政策等因素,論證項目投資建設(shè)的必要性。(1)財務(wù)可行性:主要從項目及投資者的角度,設(shè)計合理財務(wù)方案,從企業(yè)理財?shù)慕嵌冗M(jìn)行資本預(yù)算,評價項目的財務(wù)盈利能力,進(jìn)行投資決策。(2)組織可行性:制定合理的項目實施進(jìn)度計劃、設(shè)計合理的組織機(jī)構(gòu)、選擇經(jīng)驗豐富的管理人員、建立良好的協(xié)作關(guān)系與、制定合適的培訓(xùn)計劃等,保證項目順利執(zhí)行。(3)經(jīng)濟(jì)可行性:主要從資源配置的角度衡量項目的價值,評價項目在實現(xiàn)區(qū)域經(jīng)濟(jì)發(fā)展目標(biāo)、有效配置經(jīng)濟(jì)資源、增加供應(yīng)、創(chuàng)造就業(yè)、改善環(huán)境、提高人民生活等方面的效益。(4)法律可行性:在開發(fā)一個軟件之前一定要確定它是否觸犯某項法律或與國家的相關(guān)規(guī)定是否抵觸。掃雷游戲系統(tǒng)并不任何法律或國家相關(guān)規(guī)定相抵觸,所以在法律可行性上是通過的,在進(jìn)行設(shè)計時沒有違法任何法律法規(guī),也不對任何企業(yè)的系統(tǒng)進(jìn)行侵權(quán)等。系統(tǒng)的研制和開發(fā)都選用正版軟件,將不會侵犯他人、集體和國家的利益,不會違反相關(guān)的國家政策和法律。(5)技術(shù)可行性評價:在限制條件下,功能目標(biāo)基本能夠?qū)崿F(xiàn)和達(dá)到,利用現(xiàn)有技術(shù),功能目標(biāo)基本能夠達(dá)到,開發(fā)人員足夠能夠滿足條件要求,在規(guī)定時間內(nèi)能夠完成該項目開發(fā)。2.2需求分析隨著社會的不斷進(jìn)步,人們所承受的壓力不斷上升,在游戲?qū)映霾桓F的時刻,掃雷游戲仍受到不少人的青睞,其本身的性質(zhì),決定了人們對它的喜愛程度,不需要特殊的技巧,不需要不斷地升級,不需要太多的時間進(jìn)行初步的熟悉,簡簡單單卻樂趣無窮。2.2.1理解需求掃雷游戲系統(tǒng)的建立,需要進(jìn)行用戶需求調(diào)查與分析,以確定系統(tǒng)目標(biāo),提高解決問題的詳細(xì)方案,這是系統(tǒng)建設(shè)的重要環(huán)節(jié)。(1)系統(tǒng)可以根據(jù)需求來設(shè)計功能模塊,如“開局”、“初級”、“中級”、“高級”“自定義”、“掃雷英雄榜”和“退出”等。(2)系統(tǒng)運(yùn)行在Eclipse平臺下,系統(tǒng)應(yīng)該有一個較好的圖形用戶界面。2.2.2功能需求需求分析的任務(wù)是通過詳細(xì)調(diào)查現(xiàn)實世界要處理的對象,充分了解原系統(tǒng)(手工系統(tǒng)或計算機(jī)系統(tǒng))工作概況,明確各種需求,然后在此基礎(chǔ)上確定新系統(tǒng)的功能。根據(jù)用戶的需求,確定本掃雷游戲應(yīng)具有以下功能:(1)用戶可以自行選擇難度界別;(2)自動保存掃雷英雄榜;(3)用戶可以設(shè)計“初級”、“中級”、“高級”三個級別。第三章詳細(xì)設(shè)計在設(shè)計掃雷游戲時,需要編寫4個Java源程序:ArrayPane.java,JavaMineSweeping.java,JavaMineSweepingFrame.java,RandomNumber.java。掃雷游戲除了需要編寫上述4個Java源文件所給出的類外,還需要Java系統(tǒng)提供的一些重要的類,如File、JButton和JLabel等類。掃雷系統(tǒng)流程圖如圖3-1所示:圖3-1流程圖3.1JavaMineSweepingFrame類JavaMineSweepingFrame類是javax.swing包中JFrame的一個子類,并實現(xiàn)了ActionListener接口。主要控制“選擇”菜單欄里的選項和狀態(tài)欄的名稱。如圖3-2所示:圖3-2菜單欄3.2ArrayPane類ArrayPane類是javax.swing包中JPanel容器的子類,實現(xiàn)了ActionListener和MouseListener接口,所創(chuàng)建的對象:ArrayPane是ArrayPane類中最重要的成員之一,作為一個容器添加到窗口的中心。3.3javaMineSweeping類javaMineSweeping類負(fù)責(zé)創(chuàng)建掃雷游戲機(jī)主窗口,該文件含有main方法,掃雷游戲從該類開始執(zhí)行。3.4RandomNumber類RandomNumber類是雷區(qū)中“方塊”的類封裝,含有關(guān)于“方塊”的屬性以及操作,即負(fù)責(zé)為雷區(qū)創(chuàng)建代表“方塊”的對象。3.5具體內(nèi)容3.5.1菜單欄內(nèi)容的生成通過創(chuàng)建多個對象實現(xiàn)菜單欄里項目的生成JMenuBarmenuBar=newJMenuBar();JMenumenuFile=newJMenu("選擇");JMenuItemmenuLevelOne=newJMenuItem("初級");JMenuItemmenuLevelTwo=newJMenuItem("中級");JMenuItemmenuLevelThree=newJMenuItem("高級");JMenuItemmenuFileExit=newJMenuItem("退出");JButtonbutReset=newJButton("重來");3.5.2雷的生成通過在不同難度下的固定格數(shù)指定雷數(shù)然后通過隨機(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ù)字顯示首先,在單擊每塊方塊后會記錄此次單擊的位置坐標(biāo)。privatestaticintclickRow;//當(dāng)點擊后,記住行坐標(biāo) privatestaticintclickCol;//當(dāng)點擊后,記住列坐標(biāo)然后會調(diào)用一個遞歸的循環(huán)來處理雷塊周圍有多少雷顯示數(shù)字的問題。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)測試(1)程序運(yùn)行后,界面上有一個菜單和一個按鈕,分別是“選擇”和“重來”;當(dāng)玩家踩雷時候可以點擊“重新開始來”。如圖4-1所示:圖4-1程序運(yùn)行圖(2)當(dāng)玩家點擊“游戲”菜單時會出現(xiàn)4個子菜單,分別是“初級”、“中級”、“高級”和“退出”。,玩家可以通過選擇“初級”、“中級”和“高級”按鈕來選擇游戲級別;游戲結(jié)束后玩家可以通過“退出”退出游戲框。圖4-2難度級別選擇圖4-3中級難度界面圖4-4高級難度界面圖4-5掃雷失敗界面結(jié)束語通過這一階段的畢業(yè)設(shè)計,我設(shè)計的教務(wù)系統(tǒng)終于基本完成。系統(tǒng)基本實現(xiàn)了老師的要求。期間出現(xiàn)過很多的問題,比如對數(shù)據(jù)庫認(rèn)識不夠、功能優(yōu)越性沒得到充分發(fā)揮、對軟件和一些類庫的操作不足等,但在老師和同學(xué)的幫助下這些問題都得到了基本解決。在該系統(tǒng)制作的全過程中,我學(xué)會了如何去獲取知識,如何去認(rèn)真的做事情。由于時間和能力等各方面的限制,系統(tǒng)的設(shè)計和功能方面還存在著很多不足,沒有達(dá)到預(yù)期想象,還需要不斷改進(jìn)和完善。畢業(yè)設(shè)計的結(jié)束大學(xué)也就結(jié)束了,但我會努力的提高自己,用在大學(xué)學(xué)到的技術(shù)和本領(lǐng)在社會上做出自己的貢獻(xiàn)。參考文獻(xiàn)[1]朱福喜,尹為民,余振坤.Java語言與面向?qū)ο蟪绦蛟O(shè)計.武漢:武漢大學(xué)出版社,2008.[2]陳國君,陳磊.Java2從入門到精通.北京:清華大學(xué)出版社,2008.[3]王梅,Java并發(fā)編程—設(shè)計原則與模式.北京:中國電力出版社,2009.[4]尹偉民,Java程序設(shè)計之網(wǎng)絡(luò)編程.北京:清華大學(xué)出版社,2008.[5]印昊.Java與面向?qū)ο蟪绦蛟O(shè)計.北京:高等教育出版社,2008.[6]耿祥義.Java課程設(shè)計.北京:清華大學(xué)出版社,2009.[7]趙生慧.Java面向?qū)ο蟪绦蛟O(shè)計.北京:高等教育出版社,2009. 致謝畢業(yè)設(shè)計即將結(jié)束,大學(xué)的生活也就要要隨之結(jié)束了。在畢業(yè)設(shè)計期間,我得到了老師很多的幫助和支持。,在程序制作方面,我吸收到許多有價值的技術(shù)知識,并且學(xué)會了如何自己學(xué)習(xí),自己鉆研,在我編寫論文期間,老師給了我很多建設(shè)性意見,尤其是在數(shù)據(jù)流圖、數(shù)據(jù)字典,程序流程圖方面,并督促我多查閱資料。一遍一遍的幫我檢查,指導(dǎo)我修改,使得我能最終順利的完成了畢業(yè)設(shè)計。再次向一直支持鼓勵我、關(guān)心我的老師、父母、同學(xué)和朋友們致以最誠摯的謝意!附錄程序源代碼JavaMineSweeping.java/***Swing掃雷游戲**@authorliu*@version1.002005/12/5*/importjavax.swing.*;publicclassJavaMineSweeping{publicstaticvoidmain(String[]args){ //try{//這是獲取當(dāng)前系統(tǒng)所運(yù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("初級");JMenuItemmenuLevelTwo=newJMenuItem("中級");JMenuItemmenuLevelThree=newJMenuItem("高級");JMenuItemmenuFileExit=newJMenuItem("退出");JButtonbutReset=newJButton("重來");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ù),接受窗體類傳進(jìn)來的行和列數(shù) privateinti,k,j;//計數(shù)器 privatestaticintclickRow;//當(dāng)點擊后,記住行坐標(biāo) privatestaticintclickCol;//當(dāng)點擊后,記住列坐標(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)+"個雷"); 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)聽 * */ publicvoidactionPerformed(ActionEvente){ System.out.println("點擊事件"); breakPoint://設(shè)置循環(huá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){//如果沒有點中雷 intunitNumber=this.arithmetic(this.clickRow,this.clickCol);//返回這個點周圍的雷總數(shù) b[this.clickRow][this.clickCol].setText(String.valueOf(unitNumber));//顯示周圍雷總數(shù) } else{//如果點中了雷 JOptionPane.showMessageDialog(this,"你踩到雷了!GG思密達(dá)!"); } } /* * *鼠標(biāo)右鍵比較特殊,沒有觸發(fā)actionPerformed事件, * *所以必須從新便歷一次,來查找到右鍵點擊的是哪個按鈕 * */ 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){//如果右鍵點擊的按鈕是雷 b[i][j].setIcon(imageIcon); totleNumber--; title.setText("還剩"+String.valueOf(totleNumber)+"個雷"); } else{ //如果右鍵點擊的按鈕不是雷 b[i][j].setText("★"); //調(diào)用全都顯示的方法 } } } } } } publicvoidmousePressed(MouseEvente){} publicvoidmouseReleased(MouseEvente){} publicvoidmouseEntered(MouseEvente){} publicvoidmouseExited(MouseEvente){} /* * * 算法函數(shù) * * * * */ privateintarithmetic(introw,intcol){//算法返回周圍雷總數(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個雷 }elseif(row==16&&col==16){ a=5;b=8;//得到5*8個雷 }elseif(row==30&&col==16){ a=11;b=9;//得到11*9個雷 } 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è)計(論文)基于C8051F單片機(jī)直流電動機(jī)反饋控制系統(tǒng)的設(shè)計與研究基于單片機(jī)的嵌入式Web服務(wù)器的研究MOTOROLA單片機(jī)MC68HC(8)05PV8/A內(nèi)嵌EEPROM的工藝和制程方法及對良率的影響研究基于模糊控制的電阻釬焊單片機(jī)溫度控制系統(tǒng)的研制基于MCS-51系列單片機(jī)的通用控制模塊的研究基于單片機(jī)實現(xiàn)的供暖系統(tǒng)最佳啟停自校正(STR)調(diào)節(jié)器單片機(jī)控制的二級倒立擺系統(tǒng)的研究基于增強(qiáng)型51系列單片機(jī)的TCP/IP協(xié)議棧的實現(xiàn)基于單片機(jī)的蓄電池自動監(jiān)測系統(tǒng)基于32位嵌入式單片機(jī)系統(tǒng)的圖像采集與處理技術(shù)的研究基于單片機(jī)的作物營養(yǎng)診斷專家系統(tǒng)的研究基于單片機(jī)的交流伺服電機(jī)運(yùn)動控制系統(tǒng)研究與開發(fā)基于單片機(jī)的泵管內(nèi)壁硬度測試儀的研制基于單片機(jī)的自動找平控制系統(tǒng)研究基于C8051F040單片機(jī)的嵌入式系統(tǒng)開發(fā)基于單片機(jī)的液壓動力系統(tǒng)狀態(tài)監(jiān)測儀開發(fā)模糊Smith智能控制方法的研究及其單片機(jī)實現(xiàn)一種基于單片機(jī)的軸快流CO〈,2〉激光器的手持控制面板的研制基于雙單片機(jī)沖床數(shù)控系統(tǒng)的研究基于CYGNAL單片機(jī)的在線間歇式濁度儀的研制基于單片機(jī)的噴油泵試驗臺控制器的研制基于單片機(jī)的軟起動器的研究和設(shè)計基于單片機(jī)控制的高速快走絲電火花線切割機(jī)床短循環(huán)走絲方式研究基于單片機(jī)的機(jī)電產(chǎn)品控制系統(tǒng)開發(fā)基于PIC單片機(jī)的智能手機(jī)充電器基于單片機(jī)的實時內(nèi)核設(shè)計及其應(yīng)用研究基于單片機(jī)的遠(yuǎn)程抄表系統(tǒng)的設(shè)計與研究基于單片機(jī)的煙氣二氧化硫濃度檢測儀的研制基于微型光譜儀的單片機(jī)系統(tǒng)單片機(jī)系統(tǒng)軟件構(gòu)件開發(fā)的技術(shù)研究基于單片機(jī)的液體點滴速度自動檢測儀的研制基于單片機(jī)系統(tǒng)的多功能溫度測量儀的研制基于PIC單片機(jī)的電能采集終端的設(shè)計和應(yīng)用基于單片機(jī)的光纖光柵解調(diào)儀的研制氣壓式線性摩擦焊機(jī)單片機(jī)控制系統(tǒng)的研制基于單片機(jī)的數(shù)字磁通門傳感器基于單片機(jī)的旋轉(zhuǎn)變壓器-數(shù)字轉(zhuǎn)換器的研究基于單片機(jī)的光纖Bragg光柵解調(diào)系統(tǒng)的研究單片機(jī)控制的便攜式多功能乳腺治療儀的研制基于C8051F020單片機(jī)的多生理信號檢測儀基于單片機(jī)的電機(jī)運(yùn)動控制系統(tǒng)設(shè)計Pico專用單片機(jī)核的可測性設(shè)計研究基于MCS-51單片機(jī)的熱量計基于雙單片機(jī)的智能

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論