JAVA實(shí)現(xiàn)連連看課程設(shè)計(jì)_第1頁
JAVA實(shí)現(xiàn)連連看課程設(shè)計(jì)_第2頁
JAVA實(shí)現(xiàn)連連看課程設(shè)計(jì)_第3頁
JAVA實(shí)現(xiàn)連連看課程設(shè)計(jì)_第4頁
JAVA實(shí)現(xiàn)連連看課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、目錄第一章 系統(tǒng)描述. . . (1)第二章 分析與設(shè)計(jì). . . (2)一、 功能分析. . . (2)二、 流程圖. . . (2)三、 設(shè)計(jì)要求. . . (3)1、 實(shí)驗(yàn)環(huán)境. . .(3)2、 實(shí)驗(yàn)預(yù)備知識. . .(3)3、 課程設(shè)計(jì)要求. . .(3)第三章 連連看系統(tǒng)設(shè)計(jì). . .(4)一、 算法設(shè)計(jì). . .(4)二、 類的實(shí)現(xiàn). . .(5)三、 方法的實(shí)現(xiàn). . .(5)第四章 測試分析. . .(5)一、 運(yùn)行情況. . .(5)二、 測試計(jì)劃及分析. . .(9)1、 檢驗(yàn)的先后順序. . .(9)2、 程序異常處理. . .(9)第五章 心得體會. . .(10)第

2、六章 參考文獻(xiàn). . .(11)附件. . .(11)第一章 系統(tǒng)描述近年來,java作為一種新的編程語言,以其簡單性、可移植性和平臺無關(guān)性等優(yōu)點(diǎn),得到了廣泛地應(yīng)用,特別是java與萬維網(wǎng)的完美結(jié)合,使其成為網(wǎng)絡(luò)編程和嵌入式編程領(lǐng)域的首選編程語言。一個(gè)學(xué)期的時(shí)間來學(xué)習(xí)java這門課,感覺還不錯(cuò),因?yàn)槲覀儾坏珜W(xué)習(xí)了書上理論的東西,還安排了上機(jī)操作課。學(xué)習(xí)一門計(jì)算機(jī)語言必定離不開實(shí)踐,只有通過實(shí)踐我們才能體會到書本上體會不到的東西。所以,我們不僅要認(rèn)真學(xué)習(xí)課本理論知識,更重要的是要通過上機(jī)實(shí)踐才能增強(qiáng)和鞏固我的知識。課程設(shè)計(jì)是培養(yǎng)我們綜合運(yùn)用所學(xué)知識,發(fā)現(xiàn)、提出、分析和解決實(shí)際問題,鍛煉實(shí)踐能力的

3、重要環(huán)節(jié),是我們實(shí)踐能力與創(chuàng)新精神的綜合培養(yǎng);在實(shí)踐能力方面培養(yǎng)我們理論與實(shí)踐相結(jié)合的作風(fēng),增強(qiáng)了我們將來在人才市場上的競爭力。所以,對于我們初學(xué)者,首先利用課程設(shè)計(jì)這樣的較小項(xiàng)目鍛煉自己的科學(xué)研究精神和提高創(chuàng)新能力,是很有必要的。課題設(shè)計(jì)的目的:1、進(jìn)一步加深對java語言的理解和掌握;將所學(xué)的java知識運(yùn)用于實(shí)踐中。2、 課程設(shè)計(jì)將理論與實(shí)踐相結(jié)合,提供了一個(gè)既動(dòng)手又動(dòng)腦,獨(dú)立實(shí)踐的機(jī)會,鍛煉我們的分析解決實(shí)際問題的能力,提高學(xué)生適應(yīng)實(shí)際,實(shí)踐編程的能力; 3、熟練掌握java語言中圖形用戶界面程序的編寫;4、大體了解怎樣用java來編寫小游戲的,增強(qiáng)我們實(shí)踐能力和創(chuàng)新精神的綜合培養(yǎng)???/p>

4、行性論證:“連連看”游戲是一個(gè)經(jīng)典的游戲,它因操作簡單、娛樂性強(qiáng)而廣受歡迎。我們通過所學(xué)的java,利用eclipse設(shè)計(jì)了一個(gè)操作簡單、界面美觀、功能較齊全的“連連看”游戲。通過本游戲的開發(fā),達(dá)到學(xué)習(xí)java技術(shù)和熟悉軟件開發(fā)流程的目的。這個(gè)游戲是用圖形界面實(shí)現(xiàn)的,通過編譯解釋后,出現(xiàn)一個(gè)圖開界面。界面上方有一行菜單欄,點(diǎn)擊菜單欄上的游戲按鈕,出現(xiàn)下拉菜單,選擇開始,進(jìn)入游戲界面,游戲界面是由若干個(gè)隱形小方格組成的,每一個(gè)小方格里有一個(gè)圖標(biāo),如果在一個(gè)邊上有相同的圖標(biāo),連續(xù)點(diǎn)擊它們,若符合算法要求就會消失,且游戲期間有一定的時(shí)間限制。游戲還設(shè)有提示、退出、幫助的功能,方便游戲操作。第二章 分

5、析與設(shè)計(jì)一、功能分析每次用戶選擇兩個(gè)圖形,如果圖形滿足一定條件(兩個(gè)圖形一樣,且這兩個(gè)圖形之間存在轉(zhuǎn)彎少于3的路徑),則兩個(gè)圖形都能消掉。給定任意具有相同圖形的兩個(gè)格子,我們需要尋找這兩個(gè)格子之間在轉(zhuǎn)彎最少的情況下,經(jīng)過格子數(shù)目最少的路徑。如果這個(gè)最優(yōu)路徑的轉(zhuǎn)彎數(shù)目少于3 ,則這兩個(gè)格子可以消去。將界面中相同的圖片消去,游戲設(shè)有時(shí)限,如果在規(guī)定的時(shí)間內(nèi)沒有完成,就會跳出對話框“ ”的字樣。如果玩家贏了這局,還沒有過癮的話,可以單擊“再來一局”。判斷游戲是否結(jié)束。如果所有圖形全部消去,或者游戲玩家不可能再消去任意兩個(gè)格子的時(shí)候,游戲應(yīng)該結(jié)束。后一種情況,我們稱之為“死鎖”。在死鎖的情況下,我們也

6、可以暫時(shí)不終止游戲,而是隨機(jī)打亂局面,使得打破“死鎖”局面。不管怎樣,我們需要判別游戲當(dāng)前狀態(tài)是否為“死鎖”狀態(tài)。我們首先思考問題:怎么判斷兩個(gè)圖形能否相消?前面分析中,我們已經(jīng)知道,兩個(gè)圖形能夠相消,當(dāng)且僅當(dāng)這兩個(gè)圖形相同,且它們之間存在路徑轉(zhuǎn)彎數(shù)目小于3。因此,我們主要需要解決的問題還是,怎樣求出相同圖形之間的最短路徑?這個(gè)最短的路徑,我們首先需要保證轉(zhuǎn)彎數(shù)目最少。在轉(zhuǎn)彎數(shù)目最少的情況下,經(jīng)過的格子數(shù)目要盡可能地少。在經(jīng)典的最短路問題中,我們需要求出經(jīng)過格子數(shù)目最少的路徑。而這里,要保證轉(zhuǎn)彎數(shù)目最少,需要把最短路問題的目標(biāo)函數(shù)修改為從一個(gè)點(diǎn)到另一個(gè)點(diǎn)的轉(zhuǎn)彎次數(shù)。雖然,目標(biāo)函數(shù)修改了,但算法

7、的框架仍然可以保持不變。廣度優(yōu)先搜索是解決經(jīng)典最短路問題的一個(gè)思路。我們看看在新的目標(biāo)函數(shù)(轉(zhuǎn)彎數(shù)目最少)下,如何用廣度優(yōu)先搜索來解決圖形a(x1,y1)和圖形b(x2,y2)之間的最短路問題。二、流程圖開始初始化設(shè)置開始界面畫表格初始化數(shù)值游戲游戲是否結(jié)束顯示游戲結(jié)束畫面結(jié)束noyes三、設(shè)計(jì)要求 1、實(shí)驗(yàn)環(huán)境 在windows xp系統(tǒng)下,java程序設(shè)計(jì)語言及相應(yīng)的集成開發(fā)環(huán)境,利用eclipse實(shí)現(xiàn)。2、實(shí)驗(yàn)預(yù)備知識熟悉java語言及eclipse的操作。3、課程設(shè)計(jì)要求按課程設(shè)計(jì)指導(dǎo)書提供的課題,要求學(xué)生組成小組完成各個(gè)操作環(huán)節(jié),并能實(shí)現(xiàn)且達(dá)到舉一反三的目的,完成一個(gè)項(xiàng)目解決一類問題

8、。要求學(xué)生能夠全面、深入理解和熟練掌握所學(xué)內(nèi)容,并能夠用其分析、設(shè)計(jì)和解答類似問題;對此能夠較好地理解和掌握,能夠進(jìn)行簡單分析和判斷;能編寫出具有良好風(fēng)格的程序;掌握java程序設(shè)計(jì)的基本技能和面向?qū)ο蟮母拍詈头椒?;了解多線程、安全和網(wǎng)絡(luò)等編程技術(shù)。同時(shí)培養(yǎng)學(xué)生進(jìn)行分析問題、解決問題的能力;培養(yǎng)學(xué)生進(jìn)行設(shè)計(jì)分析、設(shè)計(jì)方法、設(shè)計(jì)操作與測試、設(shè)計(jì)過程的觀察、理解和歸納能力的提高。第三章 連連看系統(tǒng)設(shè)計(jì)一、 算法設(shè)計(jì) 在檢驗(yàn)兩個(gè)方塊能否消掉的時(shí)候,我們要讓兩個(gè)方塊同時(shí)滿足兩個(gè)條件才行,就是兩者配對并且連線成功。分3種情況:(從下面的這三種情況,我們可以知道,需要三個(gè)檢測,這三個(gè)檢測分別檢測一條直路經(jīng)

9、。這樣就會有三條路經(jīng)。若這三條路經(jīng)上都是空按鈕,那么就剛好是三種直線(兩個(gè)轉(zhuǎn)彎點(diǎn))把兩個(gè)按鈕連接起來了) 1.相鄰 2. 若不相鄰的先在第一個(gè)按鈕的同行找一個(gè)空按鈕。1).找到后看第二個(gè)按鈕橫向到這個(gè)空按鈕所在的列是否有按鈕。2).沒有的話再看第一個(gè)按鈕到與它同行的那個(gè)空按鈕之間是否有按鈕。3).沒有的話,再從與第一個(gè)按鈕同行的那個(gè)空按鈕豎向到與第二個(gè)按鈕的同行看是否有按鈕。沒有的話路經(jīng)就通了,可以消了. 3.若2失敗后,再在第一個(gè)按鈕的同列找一個(gè)空按鈕。1).找到后看第二個(gè)按鈕豎向到這個(gè)空按鈕所在的行是否有按鈕 2).沒有的話,再看第一個(gè)按鈕到與它同列的那個(gè)空按鈕之間是否有按鈕。3).沒有的

10、話,再從與第一個(gè)按鈕同列的那個(gè)空按鈕橫向到與第二個(gè)按鈕同列看是否有按鈕。沒有的話路經(jīng)就通了,可以消了。 若以上三步都失敗,說明這兩個(gè)按鈕不可以消去。二、類的實(shí)現(xiàn) 成員變量也叫類的屬性,一般帶有訪問控制屬性的,而全局變量雖然也有類的屬性,但全局變量嚴(yán)重影響了封裝和模塊化,一般的全局變量前面要加上static和 fina屬性其中,static使該變量任何類都可用(方法 classname.全局變量名) ,而 fina則使得變量不可更改,基本上算是常量了,這也在一定程度上防止對變量的非法修改。表1-1 成員變量 成員變量描述變量類型名稱文件filefile文件名stringlikapp菜單欄類jme

11、nubarappend菜單類jmenuclearcreateemptyborder菜單項(xiàng)jmenuitemcreatehorizontalstrutcreatelinebordercreateverticalstrutequals面板類jpanelget三、方法的實(shí)現(xiàn)方法名稱為任何合乎語法的識別字,返回值類型是方法執(zhí)行結(jié)果返回給調(diào)用者的數(shù)據(jù)類型,void表示沒有返回值,參數(shù)行(parameterlist)是調(diào)用時(shí)給予的參數(shù)聲明,兩個(gè)以上的參數(shù)聲明以逗號隔開,若沒有參數(shù)則參數(shù)行為空白,調(diào)用時(shí)每一個(gè)參數(shù)對應(yīng)一個(gè)參數(shù)值(argument)大括號內(nèi)為方法本體,也稱為方法程序模塊(block),包含聲明

12、(declarations)和語句(statements),聲明也可以摻雜在語句之間。一個(gè)方法不能聲明在另一個(gè)方法內(nèi)。第四章 測試分析 一、 運(yùn)行情況 連連看游戲規(guī)則很簡單,就是點(diǎn)中兩個(gè)互相匹配并且可以通過不多于兩個(gè)折點(diǎn)的折線連在一起的方塊后,這兩個(gè)方塊就可以消掉。點(diǎn)擊運(yùn)行,進(jìn)入初始界面。初始界面:點(diǎn)擊菜單欄中的“游戲”,出現(xiàn)下拉菜單,選擇“開始”按鈕,進(jìn)入游戲開始界面。 游戲開始界面:游戲者順利在限定時(shí)間內(nèi),完成游戲后,系統(tǒng)會彈出消息框,顯示“恭喜你過關(guān)!”成功過關(guān)界面:進(jìn)入初始界面后,使用者若不懂游戲規(guī)則,可點(diǎn)擊菜單欄中“幫助”按鈕,在出現(xiàn)的下拉菜單中,點(diǎn)擊“關(guān)于”,則出現(xiàn)如下消息框,顯示

13、游戲規(guī)則。幫助界面:當(dāng)游戲者在進(jìn)行游戲時(shí),找不到相同的圖標(biāo)可以消去,則可以點(diǎn)擊菜單欄中的“游戲”,在下拉菜單中點(diǎn)擊“提示”,則提示兩個(gè)可消去圖標(biāo),且方格變?yōu)榫G色。提示界面:在限制時(shí)間內(nèi),若游戲者沒有完成游戲,則會彈出消息框,顯示“抱歉,你沒有通過!”的消息。失敗界面:粗略想來,由于用戶每次只能消除一對圖形,即只會用到一個(gè)最短路徑,但由于實(shí)現(xiàn)并不知道用戶會選擇哪一對圖形,所以需要事先計(jì)算出所有可能的最短路徑并保存起來。此外,采用這種方法的話似乎每次用戶消去一對相同圖像之后都需要重新計(jì)算出當(dāng)前所有可能被連接的相同圖形之間最短路徑,這是因?yàn)楫?dāng)某些圖像被消去之后可能會產(chǎn)生很多新路徑,而我們又不能確定這

14、些空出來的格子到底能夠影響哪些路徑,所以就只好都重新計(jì)算一遍。其缺點(diǎn)很明顯就是每次消去圖形動(dòng)作之后重新計(jì)算所有可能的最短路徑所需要消耗的時(shí)間;而該方法的優(yōu)點(diǎn)則是可以很快地判斷兩個(gè)相同圖形之間是否存在滿足條件的最短路徑。如果用戶很厲害,每次都能選中可以消除的圖形對,那么用這種方法浪費(fèi)的時(shí)間就會相當(dāng)可觀,畢竟用戶未選中的其他可以連接的圖形對之間的最短路徑都被浪費(fèi)掉了;而如果用戶很差勁,每輪選擇的次數(shù)都遠(yuǎn)遠(yuǎn)大于當(dāng)前可能的連接數(shù)量時(shí),該方法就會比書中正文提到的方法高效。但這種情況是比較少的,因?yàn)樵谡麄€(gè)游戲中用戶主要是會用眼睛“找”而不是頻繁的用鼠標(biāo)去“試”。所以總的來看,維護(hù)所有最短路徑的方法的效率相

15、對比較低。二、 測試計(jì)劃及分析 1、檢驗(yàn)的先后順序在檢驗(yàn)兩個(gè)方塊能否消掉的時(shí)候,我們要讓兩個(gè)方塊同時(shí)滿足兩個(gè)條件才行,就是兩者配對并且連線成功。所以,這里應(yīng)該先檢驗(yàn)配對,如果該條件不成立的話,就不要再進(jìn)行連線檢查了,這樣可以避免很多不必要的復(fù)雜運(yùn)算。當(dāng)然,如果你在做這個(gè)游戲的時(shí)候,配對規(guī)則不夠如此簡單的話,那么就看哪個(gè)算起來麻煩就把它放在后面。 2、程序異常處理本程序沒有涉及到程序的異常處理,只有關(guān)于“死鎖”問題,本質(zhì)上還是判別兩個(gè)格子是否可以消去的問題。最直接的方法就是,對于游戲中尚未消去的格子,兩兩都計(jì)算一下,它們是否可以消去。此外,從上面的廣度優(yōu)先搜索可以看出,我們每次都是擴(kuò)展出起始格子

16、a(x1,y1)能夠到達(dá)的格子。也就是說,對于每一個(gè)格子,我們可以調(diào)用一次上面的擴(kuò)展過程,得到所有可以到達(dá)的格子,如果這些格子中有任意一個(gè)跟起始格子的圖形一致,則它們可以消去,目前游戲還不是“死鎖”狀態(tài)。第五章 心得體會 這次的課程設(shè)計(jì)是新學(xué)期開始后的第一個(gè)任務(wù),說真的,我本人有一些不太喜歡剛開學(xué)就進(jìn)行課程設(shè)計(jì),因?yàn)檫€沒有怎么從寒假調(diào)節(jié)過來,有點(diǎn)懶散,因此在課程設(shè)計(jì)開始的第一天,只是突發(fā)奇想的想要做一個(gè)連連看的系統(tǒng),因?yàn)樯蠈W(xué)期才學(xué)過java,我自認(rèn)為不會太難,所以從網(wǎng)上下載了幾個(gè)模版,參看java課程設(shè)計(jì)案例精編,下載了jbuilder9,最后才發(fā)覺根本不需要,只要用eclipse,一直以為會

17、很簡單,真正做的時(shí)候才發(fā)現(xiàn),并不是。 而我們小組這次的課題是連連看游戲,這是一款時(shí)下較流行的小游戲,我們做的時(shí)候,并沒有分模塊,只是所有組員一起研究、討論。我們的這款游戲用了我們上期學(xué)到的java中的swing組件,做該游戲系統(tǒng)時(shí),因?yàn)閷ι掀谒鶎W(xué),有許多已快忘記,在做的時(shí)候要不斷的查看書籍,要完成該系統(tǒng),要實(shí)現(xiàn)上面的兩個(gè)圖片相同且兩者相連時(shí),連線的轉(zhuǎn)折不會超過三,雖然在網(wǎng)上下載了一些模版,但此次我們小組的課程設(shè)計(jì)并不完善,比如說時(shí)間限制,在時(shí)間到了之后,雖會彈出警告窗口,卻并不阻止游戲的繼續(xù),也沒有音頻設(shè)置,更甚至在游戲結(jié)束后,不會顯示下一局,玩家如果要繼續(xù)玩,則必須退出后,重新進(jìn)入,沒有一定

18、的靈活性。 雖然這次的課程設(shè)計(jì)沒有達(dá)到預(yù)期的效果,但我也從中學(xué)到了許多,也進(jìn)一步了解了java這門程序設(shè)計(jì)語言,也熟練了eclipse的使用,培養(yǎng)了與同伴的合作能力,以前很好奇那些游戲的來由,現(xiàn)在終于明白了其中的緣由,讓我對這方面產(chǎn)生了興趣,相信對我正在尋找的目標(biāo)也有一定的幫助!第六章 參考文獻(xiàn)1、黃曉東 java課程設(shè)計(jì)案例精編(第二版) 中國水利水電出版社 2007 2、陳海寧 java語言案例教程 北京工業(yè)大學(xué) 20073、李尊朝、蘇軍 java語言程序設(shè)計(jì) 中國特到出版社 20074、m.kalin 面向?qū)ο蟪绦蛟O(shè)計(jì):java語言描述 北京機(jī)械工業(yè)出版社 20025、汪志達(dá) java程

19、序設(shè)計(jì)實(shí)訓(xùn)教程 北京科學(xué)出版社 20036、朱福喜、唐曉軍 java程序設(shè)計(jì)技巧與開發(fā)實(shí)例 北京人民郵電出版社 20047、張晨、付冰、趙軍等 java2應(yīng)用編程150例 電子工業(yè)出版社 20038、梁天雨 java編程思想(第4版) 機(jī)械工業(yè)出版社 20049、陳楚寒 java與模式 電子工業(yè)出版社 200210、林邦杰 java程序設(shè)計(jì)入門教程 北京中國青年出版社 2001附件:import java.awt.*;import java.awt.event.actionevent;import java.awt.event.actionlistener;import java.util.h

20、ashmap;import javax.swing.*;public class c extends jframe implements actionlistener static int gray = 14; static int i = 18; boolean mukt; jtogglebutton add; jtogglebutton addactionlistener; b z; jmenubar append; jmenu clear; jmenu createemptyborder; jmenuitem createhorizontalstrut; jmenuitem create

21、lineborder; jmenuitem createverticalstrut; jmenuitem equals; timer exit; jprogressbar c; hashmap b; jpanel get; public c() mukt = false; add = new jtogglebuttongrayi; addactionlistener = null; append = new jmenubar(); b = new hashmap(); z = new b(); c = new jprogressbar(0, 600); c.setvalue(0); c.set

22、stringpainted(true); exit = new timer(1000, new i(this); rectangle rectangle=graphicsenvironment.getlocalgraphicsenvironment().getmaximumwindowbounds(); setsize(800, 600); setlocation(rectangle.width / 2 - 400, rectangle.height / 2 - 300); setresizable(false); setdefaultcloseoperation(3); settitle(連

23、連看 235榮譽(yù)出品 歡迎進(jìn)入本游戲 ); z = new b(); clear = new jmenu(游戲); clear.setmnemonic(g); createemptyborder = new jmenu(幫助); createemptyborder.setmnemonic(h); createhorizontalstrut = new jmenuitem(開始); createhorizontalstrut.setaccelerator(keystroke.getkeystroke(113, 0); createhorizontalstrut.setmnemonic(s); c

24、reateverticalstrut = new jmenuitem(提示); createverticalstrut.setaccelerator(keystroke.getkeystroke(116, 0); createverticalstrut.addactionlistener(this); createverticalstrut.setenabled(false); createverticalstrut.setmnemonic(m); createlineborder = new jmenuitem(退出); createlineborder.setmnemonic(x); eq

25、uals = new jmenuitem(關(guān)于); equals.setmnemonic(a); append.add(clear); append.add(createemptyborder); clear.add(createhorizontalstrut); clear.add(createverticalstrut); clear.add(createlineborder); createemptyborder.add(equals); clear.setfont(new font(dialog, 0, 14); createemptyborder.setfont(new font(d

26、ialog, 0, 14); createhorizontalstrut.setfont(new font(dialog, 0, 14); createlineborder.setfont(new font(dialog, 0, 14); equals.setfont(new font(dialog, 0, 14); createverticalstrut.setfont(new font(dialog, 0, 14); setjmenubar(append); createhorizontalstrut.addactionlistener(this); createlineborder.ad

27、dactionlistener(this); equals.addactionlistener(this); public final void actionperformed(actionevent actionevent) if(actionevent.getsource() instanceof jtogglebutton) jtogglebutton jtogglebutton = (jtogglebutton)actionevent.getsource(); if(mukt) if(addactionlistener.getactioncommand().equals(jtoggle

28、button.getactioncommand() & addactionlistener != jtogglebutton) point point = (point)b.get(addactionlistener); point point1 = (point)b.get(jtogglebutton); if(z.i(point.x, point.y, point1.x, point1.y) z.i(point.x, point.y, 0); z.i(point1.x, point1.y, 0); addactionlistener.seticon(null); addactionlist

29、ener.setenabled(false); jtogglebutton.seticon(null); jtogglebutton.setenabled(false); if(z.c() = null) z.b(); i(); if(z.z() joptionpane.showmessagedialog(null, 恭喜你過關(guān)!); exit.stop(); mukt = false; addactionlistener.setselected(false); jtogglebutton.setselected(false); else mukt = false; addactionlist

30、ener.setselected(false); jtogglebutton.setselected(false); else addactionlistener = jtogglebutton; mukt = true; jtogglebutton.setselected(true); else if(actionevent.getsource() instanceof jmenuitem) jmenuitem jmenuitem = (jmenuitem)actionevent.getsource(); if(jmenuitem = createhorizontalstrut) gray(

31、); else if(jmenuitem = createverticalstrut) if(z.c() != null) (new z(this).start(); else joptionpane.showmessagedialog(null, no path!); else if(jmenuitem = createlineborder) system.exit(0); else if(jmenuitem = equals) joptionpane.showmessagedialog(null, 選擇相同的兩個(gè)圖標(biāo),如果它們能在至多轉(zhuǎn)三個(gè)彎的情況下相連,就可以消掉!); swinguti

32、lities.updatecomponenttreeui(this); public final void gray() getcontentpane().add(box.createhorizontalstrut(20), west); getcontentpane().add(box.createhorizontalstrut(20), east); getcontentpane().add(box.createverticalstrut(20), south); get = new jpanel(); get.setbackground(color.white); get.setbord

33、er(borderfactory.createlineborder(color.gray, 2); getcontentpane().add(get, center); get.setlayout(new gridlayout(14, 18, 5, 5); z.i(); for(int i = 0; i gray; i+) for(int j = 0; j i; j+) if(i = 0 | j = 0 | i = gray - 1 | j = i - 1) addij = new jtogglebutton(); addij.getmodel().setenabled(false); add

34、ij.setactioncommand(string.valueof(0); else int k = z.i(i, j); string s = /images/ + k + .gif; .url url = getclass().getresource(s); addij = new jtogglebutton(new imageicon(url); addij.setactioncommand(string.valueof(k); addij.setbackground(color.white); addij.setborder(borderfactory.createemptybord

35、er(); addij.addactionlistener(this); get.add(addij); b.put(addij, new point(i, j); b.put(new point(i, j), addij); jpanel jpanel = new jpanel(); jpanel.setborder(borderfactory.createlineborder(jpanel.getbackground(), 5); jpanel.setlayout(new borderlayout(); jpanel.add(c, center); getcontentpane().add

36、(jpanel, north); createverticalstrut.setenabled(true); exit.start(); createhorizontalstrut.setenabled(false); public final void i() b.clear(); for(int i = 0; i gray; i+) for(int j = 0; j i; j+) if(i = 0 | j = 0 | i = gray - 1 | j = i - 1) addij.seticon(null); addij.setenabled(false); addij.setaction

37、command(string.valueof(0); else if(z.i(i, j) = 0) addij.seticon(null); addij.setenabled(false); addij.setactioncommand(string.valueof(0); else int k = z.i(i, j); string s = /images/ + k + .gif; .url url = getclass().getresource(s); addij.seticon(new imageicon(url); addij.setenabled(true); addij.seta

38、ctioncommand(string.valueof(k); addij.setborder(borderfactory.createemptyborder(); b.put(addij, new point(i, j); b.put(new point(i, j), addij); import java.awt.point;import java.util.random;public class b static int mukt = 14; static int append = 18; int max; int min; int nextint; public b() max = n

39、ew intmuktappend; min = new intmuktappend; nextint = new int40; for(int i = 0; i 40; i+) nextinti = 3; for(int j = 0; j mukt; j+) for(int k = 0; k append; k+) minjk = 0; public final void i(int i, int j, int k) maxij = k; public final int i(int i, int j) return maxij; public final boolean i(int i, i

40、nt j, int k, int l) if(i = k & j = l) return false; if(i(i, j) != i(k, l) return false; int i1 = i(i, j); int j1 = i(k, l); i(i, j, 0); i(k, l, 0); for(int k1 = 0; k1 mukt; k1+) if(append(k1, j, l) & mukt(j, k1, i) & mukt(l, k1, k) i(i, j, i1); i(k, l, j1); return true; for(int l1 = 0; l1 append; l1+) if(mukt(l1, i, k) & append(i, l1, j) & append(k, l1, l) i(i, j, i1); i(k, l, j1); return true; i(i, j, i1); i(k, l, j1); return false; public final void i() random random = new random(); for(int i = 0; i mukt;

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論