Java課程設(shè)計連連看游戲(含代碼)畢業(yè)設(shè)計_第1頁
Java課程設(shè)計連連看游戲(含代碼)畢業(yè)設(shè)計_第2頁
Java課程設(shè)計連連看游戲(含代碼)畢業(yè)設(shè)計_第3頁
Java課程設(shè)計連連看游戲(含代碼)畢業(yè)設(shè)計_第4頁
Java課程設(shè)計連連看游戲(含代碼)畢業(yè)設(shè)計_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

PAGEVIJava程序課程設(shè)計任務(wù)書一、主要任務(wù)與目標(biāo)1、了解圖形用戶界面的概念;2、了解AWT的基本體系結(jié)構(gòu),掌握窗口的基本原理;3、掌握幾種布局管理器的使用方法;4、掌握java的事件處理機(jī)制;5、了解Swing的基本體系結(jié)構(gòu),掌握Swing組件的使用方法;6、掌握java小程序的工作原理和使用方法;7、該游戲還將設(shè)置退出,再來一局按鈕,并實(shí)現(xiàn)相應(yīng)的功能。8、設(shè)計一個用戶注冊登錄界面二、主要內(nèi)容與基本要求游戲規(guī)則是模仿網(wǎng)絡(luò)上普通的連連看游戲,主要是鼠標(biāo)兩次點(diǎn)擊的圖片能否消去的問題。當(dāng)前,前提是點(diǎn)擊兩張相同的圖片,若點(diǎn)擊的是同一張圖片或者兩張不同的圖片,則不予處理。在兩張想同圖片所能連通的所有路徑中,如果存在一條轉(zhuǎn)彎點(diǎn)不多于兩個的路徑,就可以消去;如果沒有,則不予處理。

該游戲由30張不同的圖片組成,游戲開始將會出現(xiàn)30張隨機(jī)組合的圖片,在規(guī)則下點(diǎn)擊兩張相同的圖片后圖片將會消失。圖片全部消完為游戲成功。游戲還將設(shè)置退出,再來一局的按鈕,和倒計時的功能,方便用戶進(jìn)行操作。并且有一個用戶登錄注冊界面,玩家必須登錄以后才可以進(jìn)行游戲。三、計劃進(jìn)度12月28日~12月29日:課程設(shè)計選題,查找參考資料12月30日~12月31日:閱讀參考書籍,收集資料,完成需求分析1月1日~1月3日:系統(tǒng)的代碼設(shè)計及實(shí)現(xiàn),數(shù)據(jù)庫設(shè)計與實(shí)現(xiàn)1月4日~1月5日:系統(tǒng)的調(diào)試,修改,完善1月6日~1月7日:完成課程設(shè)計報告,準(zhǔn)備答辯四、主要參考文獻(xiàn)[1]劉寶林.Java程序設(shè)計與案例習(xí)題解答與實(shí)驗指導(dǎo)[M].[2]王鵬何云峰.Swing圖形界面開發(fā)與案例分析[M].[3](美)KarlAvedal,DannyAyers,TimothyBriggs.JSP編程指南[M].電子工業(yè)出版社,2004,47-125.[4](美)MarkLinsenbardt.JSP在數(shù)據(jù)庫中的應(yīng)用與開發(fā)[M].希望電子出版社,2005,210-236.[5]DiannePhelan,Buildingasimplewebdatabaseapplication[C].IEEEInternationalProfessionalCommunicationConference,2004,79-86.[6](美)KarlAvedal,DannyAyers,TimothyBriggs.JSP編程指南[M].電子工業(yè)出版社,2006,47-125.[7]DiannePhelan,Buildingasimplewebdatabaseapplication[C].IEEEInternationalProfessionalCommunicationConference,2005,79-86.[8]Altendorf.Eric,Hohman.Moses,Zabicki.Roman.UsingJ2EEonalarge,web-basedproject[J].IEEESoftware.2002,19(02):81-89.摘要當(dāng)今社會,休閑型游戲越來越得到人們的喜愛,我所做的畢業(yè)設(shè)計實(shí)例“連連看游戲的設(shè)計與實(shí)現(xiàn)”是近幾年來網(wǎng)絡(luò)上非常流行的一種二維休閑游戲,它對電腦配置要求不高,娛樂性強(qiáng),易于上手。此次設(shè)計所使用的語言為Java語言,開發(fā)環(huán)境為JCreator。主要應(yīng)用到Swing組件,Java小程序,事件及接口等。這些接口為游戲的制作提供了便捷的條件,本系統(tǒng)的主要特點(diǎn)就是運(yùn)用Swing組件和事件處理技術(shù),進(jìn)行界面的繪制,鼠標(biāo)的操作,以及積分的顯示等功能。這次通過連連看的設(shè)計開發(fā)將對理解Swing組件技術(shù)以及事件處理技術(shù)在游戲方面的應(yīng)用起到很大的幫助作用,同時為掌握J(rèn)ava編程技術(shù)及二維休閑游戲設(shè)計的一般方法打下堅實(shí)的基礎(chǔ)。本文闡述了實(shí)例“連連看”的設(shè)計思想和實(shí)現(xiàn)。全文分為五章。第一章對選題的背景及項目的功能進(jìn)行了簡要敘述。第二章介紹了開發(fā)本系統(tǒng)所使用的Java語言、Swing組件和事件處理技術(shù)。第三章介紹了系統(tǒng)的需求分析。第四章則對游戲的各功能模塊及實(shí)現(xiàn)算法等詳細(xì)設(shè)計進(jìn)行了介紹。第五章對程序運(yùn)行與調(diào)試中經(jīng)歷的問題和學(xué)到的編程及游戲設(shè)計經(jīng)驗進(jìn)行總結(jié)。關(guān)鍵詞:游戲,連連看,二維游戲ABSTRACTToday'ssociety,Casualgamesgetmoreandmorepopularamongpeople,Ididgraduatedesignexample,"DesignandImplementationLianliankangame"isverypopularinrecentyearsthenetworkofatwo-dimensionalcasualgames.Itslessdemandingcomputerconfiguration,Entertaining,Easytofly.ThelanguageusedingraduatedesignlanguagefortheJava,DevelopmentenvironmentfortheJCreator.MainlyappliedtotheMicrosoftSwingframeworkprovidesmoredocumentationproceduresandeventsfunctionstointerface.Thegameinterfaceoffersconvenientconditionsforproduction,Themainfeaturesofthissystemistouseeventsframeworkandinterfacetechnologytointerfacemapping,mouseoperations,anddisplayfunctionsstandings.ThedesignanddevelopmentbyLianliankanSwingframeworkwillunderstandthetechnologyandtheeventsapplicationoftechnologyinthegamesplayedveryhelpful,Javaprogrammingforbothmasterandtwo-dimensionalrecreationofthegeneralmethodofgamedesignandlayasolidfoundation.Inthispaper,examplesof"Lianliankan"Thedesignandimplementation.Paperisdividedintofivechapters.ChapterIoftheprojectbackgroundandprojectabriefdescriptionofthefunction.ThesecondchapterdescribesthedevelopmentofthissystemusesJavalanguage,SwingframeworkofthetechnologyandEventinterfacetechnology.Thethirdchapterdescribesthesystemrequirementsanalysis.Thefourthchapterofthegame'svariousfunctionmodulesandthedetaileddesignalgorithmwasintroduced.ChapterVoftheprogramisrunninganddebuggingtheproblemsexperiencedandlearnedprogrammingandgamedesignexperiencesummary.Keywords:Games,Lianliankan,two-dimensionalgame目錄Java程序課程設(shè)計任務(wù)書 II摘要 IIIABSTRACT V目錄 VI第1章引言 11.1背景 11.2課程設(shè)計內(nèi)容 11.3任務(wù)分工 22章連連看游戲界面 32.1連連看游戲概述 32.1.1連連看游戲的規(guī)則 32.1.2連連看勝利與失敗條件 42.2連連看系統(tǒng)介紹 42.3本章小結(jié) 5第3章連連看游戲的設(shè)計 63.1系統(tǒng)需求分析 63.2系統(tǒng)開發(fā)及運(yùn)行環(huán)境 63.3系統(tǒng)主要功能要求 73.4.1連連看系統(tǒng)總體結(jié)構(gòu) 73.4.2連連看系統(tǒng)各模塊介紹 83.5本章小結(jié) 9第4章系統(tǒng)的具體實(shí)現(xiàn) 104.1界面設(shè)計 104.1.1用戶登陸界面圖 104.1.2注冊界面 134.1.3系統(tǒng)界面 164.1.4執(zhí)行界面 174.2程序設(shè)計及調(diào)試運(yùn)行 264.2.1游戲的連接算法 264.2.3JFreeChart 29第5章結(jié)束語 31致謝 32參考文獻(xiàn) 33附錄源代碼 34PAGE47第1章引言1.1背景游戲“連連看”顧名思義就是找出相關(guān)聯(lián)的東西,這個連連看在網(wǎng)上基本是用在小游戲中,就是找出相同的兩樣?xùn)|西,在一定的規(guī)則之內(nèi)可以做為相關(guān)聯(lián)處理。“連連看”的發(fā)展經(jīng)歷了從桌面游戲、在線游戲、不同版本連連看游戲(12張)社交游戲三個過程。游戲“連連看”是源自臺灣的桌面小游戲,自從流入大陸以來風(fēng)靡一時,也吸引眾多程序員開發(fā)出多種版本的“連連看”。這其中,顧方編寫的“阿達(dá)連連看”以其精良的制作廣受好評,這也成為顧方“阿達(dá)系列軟件”的核心產(chǎn)品。并于2004年,取得了國家版權(quán)局的計算機(jī)軟件著作權(quán)登記證書。隨著Flash應(yīng)用的流行,網(wǎng)上出現(xiàn)了多種在線Flash版本“連連看”。如“水晶連連看”、“果蔬連連看”等,流行的“水晶連連看”以華麗界面吸引了一大批的女性玩家。2008年,隨著社交網(wǎng)絡(luò)的普及和開放平臺的興起,“連連看”被引入了社交網(wǎng)絡(luò)?!斑B連看”與個人空間相結(jié)合,被快速的傳播,成為一款熱門的社交游戲,其中以開發(fā)者Jonevey在Manyou開放平臺上推出的“寵物連連看”最為流行。現(xiàn)在網(wǎng)絡(luò)小游戲、網(wǎng)頁游戲越來越受網(wǎng)民歡迎,除了玩的方法簡單外(不像其他游戲還需要注冊下載繁瑣過程),很多游戲不乏經(jīng)典。連連看游戲就是典型。不管走到哪個網(wǎng)頁游戲網(wǎng)站,連連看游戲總是排在受玩家歡迎排名的前5位,休閑、趣味、益智是連連看玩不厭的精華,且不分男女老少、工薪白領(lǐng),是一款適合大眾的經(jīng)典網(wǎng)絡(luò)休閑小游戲。1.2課程設(shè)計內(nèi)容游戲規(guī)則是模仿網(wǎng)絡(luò)上普通的連連看游戲,主要是鼠標(biāo)兩次點(diǎn)擊的圖片能否消去的問題。當(dāng)前,前提是點(diǎn)擊兩張相同的圖片,若點(diǎn)擊的是同一張圖片或者兩張不同的圖片,則不予處理。在兩張想同圖片所能連通的所有路徑中,如果存在一條轉(zhuǎn)彎點(diǎn)不多于兩個的路徑,就可以消去;如果沒有,則不予處理。

該游戲由30張不同的圖片組成,游戲開始將會出現(xiàn)30張隨機(jī)組合的圖片,在規(guī)則下點(diǎn)擊兩張相同的圖片后圖片將會消失。圖片全部消完為游戲成功。游戲還將設(shè)置退出,再來一局的按鈕,并實(shí)現(xiàn)該功能,方便用戶進(jìn)行操作。該游戲?qū)⒂腥缦聝?nèi)容:(1)游戲計分功能當(dāng)消去兩個相同的圖片后分?jǐn)?shù)將增加100分。(2)退出功能該功能有一個“退出”按鈕,當(dāng)按下“退出”按鈕后,將直接退出游戲。(3)再來一局功能該功能有一個“再來一局”的按鈕,當(dāng)按下“再來一局”按鈕后,圖片將會重新排列,重新開始游戲。(4)游戲倒計時功能在游戲界面的上方有一個倒計時的進(jìn)度條,增加游戲的難度,激發(fā)玩家的挑戰(zhàn)興趣。(5)用戶登錄注冊功能在進(jìn)入游戲界面之前,將會出現(xiàn)用戶登錄界面,如果沒有注冊的玩家在按下“注冊”按鈕后將進(jìn)入注冊界面,玩家需要填寫用戶名,密碼,性別等信息完成注冊,再進(jìn)入登錄界面,輸入用戶名和密碼按下“確定”后就將進(jìn)入游戲界面,開始游戲。1.3任務(wù)分工2章連連看游戲界面2.1連連看游戲概述當(dāng)今社會,休閑型游戲越來越得到人們的喜愛,我們所做的設(shè)計實(shí)例“連連看游戲的設(shè)計與實(shí)現(xiàn)”是近幾年來網(wǎng)絡(luò)上非常流行的一種二維休閑游戲,它對電腦配置要求不高,娛樂性強(qiáng),易于上手。此次設(shè)計所使用的語言為Java,開發(fā)環(huán)境為JCreator。主要應(yīng)用到Swing組件,Java小程序,事件及接口等。這些接口為游戲的制作提供了便捷的條件,本系統(tǒng)的主要特點(diǎn)就是運(yùn)用Swing組件和事件處理技術(shù),進(jìn)行界面的繪制,鼠標(biāo)的操作,以及積分的顯示等功能。這次通過連連看的設(shè)計開發(fā)將對理解Swing組件技術(shù)以及事件處理技術(shù)在游戲方面的應(yīng)用起到很大的幫助作用,同時為掌握J(rèn)ava編程技術(shù)及二維休閑游戲設(shè)計的一般方法打下堅實(shí)的基礎(chǔ)。隨著Flash應(yīng)用的流行,網(wǎng)上出現(xiàn)了多種在線Flash版本“連連看”。如“水晶連連看”、“果蔬連連看”等,流行的“水晶連連看”以華麗界面吸引了一大批的女性玩家。不管走到哪個網(wǎng)頁游戲網(wǎng)站,連連看游戲總是排在受玩家歡迎排名的前5位,休閑、趣味、益智是連連看玩不厭的精華,且不分男女老少、工薪白領(lǐng),是一款適合大眾的經(jīng)典網(wǎng)絡(luò)休閑小游戲2.1.1連連看游戲的規(guī)則玩家可以將2個相同圖案的對子連接起來,連接線不多于3根直線,就可以成功將對子消除。

操作:

第一次使用鼠標(biāo)點(diǎn)擊棋盤中的棋子,該棋子此時為“被選中”,以特殊方式顯示;再次以鼠標(biāo)點(diǎn)擊其他棋子,若該棋子與被選中的棋子圖案相同,且把第一個棋子到第二個棋子連起來,中間的直線不超過3根,則消掉這一對棋子,否則第一顆棋子恢復(fù)成未被選中狀態(tài),而第二顆棋子變成被選中狀態(tài)。2.1.2連連看勝利與失敗條件勝利條件:將棋盤上面的對子全部消除掉。按消除的數(shù)量排列名次。

其他玩家都輸?shù)袅恕Jl件:

每個玩家選擇牌的時間為30秒,超過時間而未消除一對的玩家以判為輸?shù)簟S幸粋€玩家將所有的牌都全部消掉。2.2連連看系統(tǒng)介紹根據(jù)第三章的需求分析,我們制作出了連連看游戲在Windows平臺上運(yùn)行時的主要功能圖。根據(jù)此連連看的功能圖我們將對連連看游戲進(jìn)行概要設(shè)計和詳細(xì)設(shè)計。繼而開發(fā)出一個完整的連連看電腦游戲。總體的系統(tǒng)圖如下圖所示:圖2.1系統(tǒng)功能圖連連看是運(yùn)用JCreator中的多文檔視圖開發(fā)的,文檔——視圖結(jié)構(gòu)提供的應(yīng)用程序接口有利于進(jìn)行窗口操作、文件讀取等編程。連連看游戲引擎包含在視圖類中。游戲引擎是一個抽象的概念,用于實(shí)現(xiàn)游戲的邏輯功能,通常在一個獨(dú)立的類中,有時引擎和視圖是一體的,并且可能無可避免,因為視圖需要為引擎處理用戶輸入和繪圖。游戲程序設(shè)計一般都采用面向?qū)ο蟮脑O(shè)計模式,提供了一個簡單的圖像顯示接口,利用多文檔視圖結(jié)構(gòu)的面向?qū)ο笤O(shè)計模式。2.3本章小結(jié)這一章介紹了連連看應(yīng)該具備的功能模塊,在這一章中,我們可以了解什么是連連看,當(dāng)前連連看系統(tǒng)的系統(tǒng),還有一個連連看系統(tǒng)應(yīng)該的開發(fā)目標(biāo)。第3章連連看游戲的設(shè)計這一章將介紹連連看游戲的設(shè)計,從游戲需求分析開始,介紹開發(fā)環(huán)境和用到的開發(fā)工具,系統(tǒng)主要的功能設(shè)計,系統(tǒng)的數(shù)據(jù)流程圖。3.1系統(tǒng)需求分析連連看游戲的設(shè)計目標(biāo)為:(1)該游戲開始前,將設(shè)置一個用戶登錄注冊界面,如果沒有注冊的玩家在按下“注冊”按鈕后將進(jìn)入注冊界面,玩家需要填寫用戶名,密碼,性別等信息完成注冊,再進(jìn)入登錄界面,輸入用戶名和密碼按下“確定”后就將進(jìn)入游戲界面,開始游戲。(2)游戲中將有“退出”功能,選擇退出命令后程序?qū)⒔K止執(zhí)行,關(guān)閉窗口。還將有“再來一局”功能,選擇再來一局命令后程序?qū)D片重新排列,重新開始游戲。該游戲還有一個時間倒計時的進(jìn)度條,提醒玩家剩余的時間,增加游戲的難度。在界面的頂部有計分功能,當(dāng)玩家消去圖片后就會贏得相應(yīng)的分?jǐn)?shù)。3.2系統(tǒng)開發(fā)及運(yùn)行環(huán)境硬件平臺:CPU:P41.8GHz。內(nèi)存:256MB以上。軟件平臺:操作系統(tǒng):WindowsXP。數(shù)據(jù)庫:MySQL5.0。開發(fā)工具包:JDKVersion1.6.2。JSP服務(wù)器:Tomcat6.0。瀏覽器:IE5.0,推薦使用IE6.0。分辨率:最佳效果1024×768像素。3.3系統(tǒng)主要功能要求本系統(tǒng)針對中小學(xué)生的娛樂時間,通過程序中的線程、布局以及用戶登錄還有另外的一些功能進(jìn)行有效管理。本系統(tǒng)主要實(shí)現(xiàn)如下功能:系統(tǒng)采用圖片連連看的方式,界面美觀友好,用戶使用靈活、方便、快捷、準(zhǔn)確,數(shù)據(jù)存儲安全可靠。實(shí)現(xiàn)用戶登錄注冊功能。圖片的消除、排列清晰。計分自動完成,提高工作效率。用進(jìn)度條來表現(xiàn)用掉的時間。實(shí)現(xiàn)多條件查詢。可方便快捷地進(jìn)行下一盤游戲,并且兩盤的分?jǐn)?shù)在規(guī)定的時間內(nèi)會疊加起來。操作員可以隨時退出游戲。對用戶輸入的信息,系統(tǒng)進(jìn)行嚴(yán)格的信息檢驗,盡可能排除人為的錯誤。系統(tǒng)最大限度地實(shí)現(xiàn)了易維護(hù)性和易操作性。系統(tǒng)運(yùn)行穩(wěn)定、安全可靠。3.4.1連連看系統(tǒng)總體結(jié)構(gòu)連連看是基于java基本知識設(shè)置的一個小游戲,剛開始的時候有一個用戶登陸界面,要是沒有賬號的可以先申請一個。最中間有連連看的主體構(gòu)成——連連看圖片,上面有計分、時間條,下面有退出、再來一局按鍵。一個標(biāo)準(zhǔn)的連連看系統(tǒng)應(yīng)該包括以下幾大功結(jié)構(gòu):1、鼠標(biāo)操作模塊;2、圖像處理模塊;3、聲音信息模塊;4、菜單模塊;5、界面顯示模塊。3.4.2連連看系統(tǒng)各模塊介紹系統(tǒng)各功能模塊實(shí)現(xiàn)的功能為:鼠標(biāo)操作模塊:玩家在玩游戲時需要運(yùn)用鼠標(biāo)與游戲系統(tǒng)進(jìn)行交互,這個模塊的實(shí)現(xiàn)是運(yùn)用MFC中的鼠標(biāo)事件觸發(fā)的,在連連看的游戲場景中運(yùn)用鼠標(biāo)進(jìn)行交互的事件主要有兩個,一個是用戶點(diǎn)擊游戲場景中的圖片時觸發(fā)的事件。另外一種是用戶點(diǎn)擊菜單欄上的菜單按鈕時說觸發(fā)的鼠標(biāo)事件。當(dāng)用戶點(diǎn)擊游戲場景中的圖像塊時就會響應(yīng)鼠標(biāo)的OnLButtonDown事件,然后進(jìn)行相應(yīng)的邏輯判斷。當(dāng)用戶點(diǎn)擊菜單欄上的菜單命令時就會觸發(fā)相應(yīng)的菜單命令對應(yīng)的相應(yīng)的事件。圖像處理模塊:程序運(yùn)行后,用戶通過游戲菜單的開始命令或者直接按下F2鍵開始進(jìn)入游戲,在這個模塊里要把資源文件中的圖片進(jìn)行處理然后加載到游戲場景中這在程序中是通過DrawMap()方法實(shí)現(xiàn)的。其中用到的API函數(shù)主要是是BitBlt,他的主要功能是將某一內(nèi)存塊的數(shù)據(jù)傳送到另一內(nèi)存塊,前一內(nèi)存塊被稱為"源",后一內(nèi)存塊被稱為"目標(biāo)"圖象程序開發(fā)者使用Blit的函數(shù)在內(nèi)存中將某頁面上的一幅位圖經(jīng)過一定的變換轉(zhuǎn)移到另一個頁面上。聲音信息模塊:在游戲過程中,當(dāng)玩家成功消去一對圖像塊后播放一個提示音,當(dāng)消去失敗的時候會播放另外一個提示音,根據(jù)用戶操作結(jié)果的不同播放不同的音樂提示,這在一定程度上能夠增加用戶對游戲的沉侵感。對聲音模塊信息的管理在程序中是通過API中的PlaySound函數(shù)來實(shí)現(xiàn)的。菜單模塊:玩家在游戲游戲過程中隨時可以通過選擇不同的菜單命令來進(jìn)行相應(yīng)的操作,菜單的制作是通過MFC框架中多文檔程序的菜單欄來添加的,菜單包含一下幾個部分:(1)游戲菜單中的開始、放棄和退出命令。(2)選項菜單里面的提示、重列、暫停、音樂、音效、和積分命令。(3)幫助菜單,介紹了游戲的版本等。具體的實(shí)現(xiàn)方法下一張將在做詳細(xì)介紹。界面顯示模塊:游戲場景中界面的顯示包括以下部分:游戲的級別、關(guān)卡數(shù)、允許重新排列的次數(shù)、允許的提示次數(shù)、剩余時間、游戲主場景。這些顯示信息會隨著游戲的進(jìn)行而動態(tài)改變。當(dāng)提示次數(shù)和重列次數(shù)為0時系統(tǒng)就不在允許用戶使用提示和重列的功能。在連連看游戲中,除了上面講到的程序主界面外還包含了顯示積分和排名的對話框的設(shè)計,在積分和排名對話框中,用戶可以查看積分排名情況,可以清除排名記錄。整個連連看游戲的系統(tǒng)是在VC++6.0開發(fā)環(huán)境中進(jìn)行開發(fā)的,開發(fā)過程中大量的使用了微軟提供的API接口方法,減少了程序代碼的編寫量、提高了編程效率。3.5本章小結(jié)本章在前面分析的基礎(chǔ)上實(shí)現(xiàn)了連連看游戲的設(shè)計,實(shí)現(xiàn)了連連看游戲的背景顯示功能、菜單功能、以及連連看游戲中的核心算法。在菜單功能模塊中針對每個菜單的命令進(jìn)行了詳細(xì)的解釋和闡釋實(shí)現(xiàn)了每一個子菜單的命令。在連接算法中,給出了每一個算法的程序邏輯了和詳細(xì)的算法實(shí)現(xiàn)。并且還繪制出了每一種連接情況的具體圖片。在連連看游戲的其他算法中列出了時間進(jìn)度顯示的實(shí)現(xiàn)方法和一些重要的數(shù)據(jù)結(jié)構(gòu),在此可以結(jié)合程序詳細(xì)的研究。第4章系統(tǒng)的具體實(shí)現(xiàn)界面是系統(tǒng)之間最直接的交互界面,界面的友好性體現(xiàn)了軟件設(shè)計的質(zhì)量,并在很大程度上決定了軟件是否成功。4.1界面設(shè)計4.1.1用戶登陸界面圖如圖4.1.1和圖4.1.2所示圖4.1.1用戶登錄模塊框圖 圖4.1用戶登陸界面此JavaScript函數(shù)的作用是檢測用戶登陸的合法性,并確認(rèn)用戶輸入了合法的登錄名和口令。部分代碼:privatevoidloginDialog(){login=newJDialog();login.setTitle("登錄");login.setLayout(newFlowLayout());login.add(newJLabel("用戶名:"));finalJTextFieldname=newJTextField(10);login.add(name);login.add(newJLabel("密碼:"));finalJPasswordFieldpassword=newJPasswordField(10);password.setEchoChar('*');login.add(password);JButtonconfirm=newJButton("登錄");confirm.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ if(compareUserData(name.getText().trim(),newString(password.getPassword()))){ login.setVisible(false); mainFrame.setVisible(true); Timertimer=newTimer(100,newActionListener(){ publicvoidactionPerformed(ActionEvente){ if(time.isEnd()){ System.exit(0); } } }); timer.start(); }else{ JOptionPane.showMessageDialog(login,"用戶名或密碼錯誤!","錯誤提示",JOptionPane.ERROR_MESSAGE); } }});login.add(confirm);finalJDialogregDialog=newJDialog(login,"注冊",true);registerDialog(regDialog);JButtonregister=newJButton("注冊");register.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ regDialog.setVisible(true); }});login.add(register);login.setSize(400,200);login.setResizable(false);login.setLocationRelativeTo(null);login.setVisible(true);}privatebooleancompareUserData(Stringname,Stringpassword){ try{ RandomAccessFileout=newRandomAccessFile("user.dat","rw"); Stringfname,fpassword=null; while(out.getFilePointer()<out.length()){ fname=out.readUTF(); out.readUTF(); fpassword=out.readUTF(); if(fname.equals(name)&&fpassword.equals(password))returntrue; } out.close(); }catch(IOExceptione){ e.printStackTrace(); } returnfalse;}4.1.2注冊界面圖4.2系統(tǒng)主界面為了能夠在同一頁面中管理多個頁面,本系統(tǒng)的主界面采用了框架技術(shù)。關(guān)鍵代碼:privatevoidregisterDialog(finalJDialogregDialog){ Boxbox1=Box.createVerticalBox(); box1.add(newJLabel("用戶名:",JLabel.RIGHT)); box1.add(Box.createVerticalStrut(10)); box1.add(newJLabel("性別:",JLabel.RIGHT)); box1.add(Box.createVerticalStrut(10)); box1.add(newJLabel("密碼:",JLabel.RIGHT),-1); box1.add(Box.createVerticalStrut(10)); box1.add(newJLabel("確認(rèn)密碼:",JLabel.RIGHT)); Boxbox2=Box.createVerticalBox(); finalJTextFieldnameTextField=newJTextField(10); box2.add(nameTextField); box2.add(Box.createVerticalStrut(8)); finalCheckboxGroupcbg=newCheckboxGroup(); Boxbox21=Box.createHorizontalBox(); finalCheckboxcb1=newCheckbox("男",cbg,true);box21.add(cb1);box21.add(newCheckbox("女",cbg,false));box2.add(box21); box2.add(Box.createVerticalStrut(8)); finalJPasswordFieldpass1=newJPasswordField(10); box2.add(pass1); box2.add(Box.createVerticalStrut(8)); finalJPasswordFieldpass2=newJPasswordField(10); box2.add(pass2); BoxbaseBox=Box.createHorizontalBox(); baseBox.add(box1); baseBox.add(box2); regDialog.setLayout(newFlowLayout()); regDialog.add(baseBox); JButtonconfirm=newJButton("確定"); JButtoncancel=newJButton("取消"); regDialog.add(confirm); regDialog.add(cancel); regDialog.setSize(400,200); regDialog.setResizable(false); regDialog.setLocationRelativeTo(null); confirm.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEventarg0){ Stringsex=null; if(cbg.getSelectedCheckbox()==cb1) sex="男"; else sex="女"; if(saveUserData(nameTextField.getText().trim(),sex, newString(pass1.getPassword()),newString(pass2.getPassword()))) regDialog.setVisible(false); else JOptionPane.showMessageDialog(regDialog,"輸入有誤,請檢查","錯誤提示", JOptionPane.ERROR_MESSAGE); } }); cancel.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEventarg0){ regDialog.setVisible(false); } });}privatebooleansaveUserData(Stringname,Stringsex,Stringpassword1,Stringpassword2){ if(!password1.equals(password2))returnfalse; try{ RandomAccessFileout=newRandomAccessFile("user.dat","rw"); out.seek(out.length()); out.writeUTF(name); out.writeUTF(sex); out.writeUTF(password1); out.close(); }catch(IOExceptione){ e.printStackTrace(); returnfalse; } returntrue;}4.1.3系統(tǒng)界面圖4.3.1連連看數(shù)據(jù)框圖4.1.4執(zhí)行界面圖5.3報表生成界面4.1.5時間到的界面:關(guān)鍵代碼: publicvoidremove(){ firstButton.setVisible(false);//不可見 secondButton.setVisible(false); fraction(); pressInformation=false; k=0; grid[x0][y0]=0; grid[x][y]=0; } publicvoidactionPerformed(ActionEvente){ if(e.getSource()==newlyButton){ intgrid[][]=newint[8][7]; this.grid=grid; randomBuild(); mainFrame.setVisible(false); pressInformation=false; init(); } if(e.getSource()==exitButton) System.exit(0); //if(e.getSource()==resetButton) //reload();newActionListener(){ if(e.getSource()==timer){ if(time.isEnd()){ timer.stop(); if(JOptionPane.showConfirmDialog(mainFrame, "時間到了,o(︶︿︶)o\n要再來一局嗎?","提示", JOptionPane.YES_NO_OPTION)==JOptionPane.OK_OPTION){ intgrid[][]=newint[8][7]; this.grid=grid; randomBuild(); mainFrame.setVisible(false); pressInformation=false; init(); timer.start(); }else System.exit(0); } } for(intcols=0;cols<6;cols++){ for(introws=0;rows<5;rows++){ if(e.getSource()==diamondsButton[cols][rows]) estimateEven(cols+1,rows+1,diamondsButton[cols][rows]); } } }進(jìn)度條界面:關(guān)鍵代碼:publicvoidxiao()//相同的情況下能不能消去。{if((x0==x&&(y0==y+1||y0==y-1))||((x0==x+1||x0==x-1)&&(y0==y)))//判斷是否相鄰{remove();}else{for(j=0;j<7;j++){if(grid[x0][j]==0)//判斷第一個按鈕同行哪個按鈕為空{(diào)if(y>j)//如果第二個按鈕的Y坐標(biāo)大于空按鈕的Y坐標(biāo)說明第一按鈕在第二按鈕左邊{for(i=y-1;i>=j;i--)//判斷第二按鈕左側(cè)直到第一按鈕中間有沒有按鈕{if(grid[x][i]!=0){k=0;break;}else{k=1;}//K=1說明通過了第一次驗證}if(k==1){linePassOne();}}if(y<j)//如果第二個按鈕的Y坐標(biāo)小于空按鈕的Y坐標(biāo)說明第一按鈕在第二按鈕右邊{for(i=y+1;i<=j;i++)//判斷第二按鈕左側(cè)直到第一按鈕中間有沒有按鈕{if(grid[x][i]!=0){k=0;break;}else{k=1;}}if(k==1){linePassOne();}}if(y==j){linePassOne();}}if(k==2){if(x0==x){remove();}if(x0<x){for(n=x0;n<=x-1;n++){if(grid[n][j]!=0){k=0;break;}if(grid[n][j]==0&&n==x-1){remove();}}}if(x0>x){for(n=x0;n>=x+1;n--){if(grid[n][j]!=0){k=0;break;}if(grid[n][j]==0&&n==x+1){remove();}}}}}for(i=0;i<8;i++)//列{if(grid[i][y0]==0){if(x>i){for(j=x-1;j>=i;j--){if(grid[j][y]!=0){k=0;break;}else{k=1;}}if(k==1){rowPassOne();}}if(x<i){for(j=x+1;j<=i;j++){if(grid[j][y]!=0){k=0;break;}else{k=1;}}if(k==1){rowPassOne();}}if(x==i){rowPassOne();}}if(k==2){if(y0==y){remove();}if(y0<y){for(n=y0;n<=y-1;n++){if(grid[i][n]!=0){k=0;break;}if(grid[i][n]==0&&n==y-1){remove();}}}if(y0>y){for(n=y0;n>=y+1;n--){if(grid[i][n]!=0){k=0;break;}if(grid[i][n]==0&&n==y+1){remove();}}}}}}}publicvoidlinePassOne(){if(y0>j)//第一按鈕同行空按鈕在左邊{for(i=y0-1;i>=j;i--)//判斷第一按鈕同左側(cè)空按鈕之間有沒按鈕{if(grid[x0][i]!=0){k=0;break;}else{k=2;}//K=2說明通過了第二次驗證}}if(y0<j)//第一按鈕同行空按鈕在與第二按鈕之間{for(i=y0+1;i<=j;i++){if(grid[x0][i]!=0){k=0;break;}else{k=2;}}}}publicvoidrowPassOne(){if(x0>i){for(j=x0-1;j>=i;j--){if(grid[j][y0]!=0){k=0;break;}else{k=2;}}}if(x0<i){for(j=x0+1;j<=i;j++){if(grid[j][y0]!=0){k=0;break;}else{k=2;}}}}publicvoidactionPerformed(ActionEvente){if(e.getSource()==newlyButton){intgrid[][]=newint[8][7];this.grid=grid;randomBuild();mainFrame.setVisible(false);pressInformation=false;init();}if(e.getSource()==exitButton)System.exit(0);//if(e.getSource()==resetButton)//reload();for(intcols=0;cols<6;cols++){for(introws=0;rows<5;rows++){if(e.getSource()==diamondsButton[cols][rows])estimateEven(cols+1,rows+1,diamondsButton[cols][rows]);}}}4.2程序設(shè)計及調(diào)試運(yùn)行利用JSP“一次編寫,各處運(yùn)行”的編程優(yōu)點(diǎn),按功能模塊結(jié)構(gòu)設(shè)計菜單,布置各明細(xì)模塊工作界面,編寫各個模塊的程序代碼,進(jìn)行編譯連接運(yùn)行,經(jīng)過反復(fù)調(diào)試修改,以達(dá)到系統(tǒng)功能要求。這個過程具有大量的工作量,應(yīng)仔細(xì)對每個程序細(xì)節(jié)進(jìn)行分析思考、編寫程序并調(diào)試,做到程序簡潔清楚,盡量避免可能潛在的程序錯誤,并在必要的地方加以注釋,以便于程序閱讀和修改。4.2.1游戲的連接算法連連看游戲中對于用戶來說最簡單的呈現(xiàn)就是單擊兩個連在一起的的相同的圖像時這兩個圖像就會消去。即使不是緊鄰的兩個相同的圖像塊消去時也不能超過兩次轉(zhuǎn)彎。連連看游戲的聯(lián)通算法一般包括回溯法和堆棧實(shí)現(xiàn)的迷宮算法。在本次開發(fā)的連連看中兩個圖像塊可以消去的情況分為以下幾種情況。設(shè)第一個圖像塊的橫坐標(biāo)為x1,縱坐標(biāo)為y1,第二個圖像塊的橫坐標(biāo)為x2,縱坐標(biāo)為y2.兩個圖像塊在在統(tǒng)一行上面,即x1=x2且y1>y2或者x1=x2且y1<y2,如下圖所示:圖4.4同行兩個圖像塊在同一列,即y1=y2且x1>x2或者y1=y2且x1<x2,如下圖所示:圖4.5同列兩個相同的圖像塊是相對的,記一個圖像在另一個圖像的右下角,即:x1<x2且y1<y2或者x1>x2且y1>y2兩種情況。具體如下圖所示:圖4.6對角的兩個相同的圖像塊是相對的,記一個圖像在另一個圖像的右下角,即:x1<x2且y1>y2或者x1>x2且y1<y2兩種情況。具體如下圖所示:圖4.7左對角在上面的四種情況當(dāng)中又包含了許多中可能。針對同行的兩個相同的顏色的圖像塊來說又可分為兩種情況,即:在同一行相鄰和同一行不相鄰的情況,不相臨的情況下有可以分為兩種,能消去的和不能消去的。同在一列的也是這樣。至于兩個點(diǎn)之間存在折線的,也可以分為兩種情況,一種是存在折線但是能夠消除掉這兩個顏色相同的圖像塊,一種是不能消除的,本人在設(shè)計程序的時候針對不同的情況分別進(jìn)行了判斷和設(shè)計。下面分別對程序的算法進(jìn)行討論。首先是判斷在同一行中除起始點(diǎn)圖像塊以外到其他的圖像塊之間還有沒有其他的圖像塊。如果有函數(shù)返回false,如果沒有函數(shù)返回true。其邏輯圖如下圖所示: 圖4.8IsLinePicEmpty邏輯圖IsLinePicEmpty方法主要是通過兩個圖像塊的坐標(biāo)來判斷兩個圖像塊之間是不是還有其他的圖像塊,上面的函數(shù)實(shí)現(xiàn)了同在一行或一列的圖像塊的檢測,下面的算法則實(shí)現(xiàn)了判斷一條直線上的兩個點(diǎn)是不是可以聯(lián)通的。算法邏輯跟上面IsLinePicEmpty算法一樣,即檢查相同的行或列上的兩個相同圖像塊是不是可以連通的,即:兩個之間是不是還有其他圖像塊,算法邏輯圖如下圖所示:圖4.9IsLineConnection在連連看的連接算法中上面的程序解決了在同一行或同一列中的相同圖像塊的檢測,下面的算法則解決了在兩個相同圖像塊之間存在一條折線的問題。算法的具體的邏輯設(shè)計圖圖下圖所示:圖4.10IsNotLineConnection上面算法的邏輯是先判斷兩個點(diǎn)之間的的兩條連通路徑之間除起始點(diǎn)外時候有其他的圖像塊,如果沒有就判斷兩個圖像塊之間的直線是否可通,如果可通函數(shù)返回值為真,不可通函數(shù)返回值為假。4.2.3JFreeChartJFreeChart是一組功能強(qiáng)大、靈活易用的Java繪圖API,使用它可以生成多種通用性的報表,包括柱狀圖、餅圖、曲線圖、甘特圖等。它能夠用在Swing和Web等中制作自定義的圖表或報表,并且得到廣泛的應(yīng)用。本文將通過引領(lǐng)讀者學(xué)習(xí)在JFreeChart中餅圖、柱狀圖和曲線圖的進(jìn)階應(yīng)用,來達(dá)到熟練使用JFreeChart的目的。要使用JFreeChart也需要對WEB工程下的web.xml進(jìn)行修改:<servlet-mapping><servlet-name>DisplayChart</servlet-name><url-pattern>/servlet/DisplayChart</url-pattern></servlet-mapping><servlet-mapping><servlet-name>ChartViewer</servlet-name><url-pattern>/servlet/ChartViewer</url-pattern></servlet-mapping>第5章結(jié)束語由于計算機(jī)的普及,網(wǎng)絡(luò)游戲越來越受大家的歡迎,幾乎每個擁有電腦的人都會玩網(wǎng)絡(luò)游戲,不同的人玩的游戲當(dāng)然大不相同?,F(xiàn)在網(wǎng)絡(luò)上的小游戲越來豐富,我們此次的課程設(shè)計就是現(xiàn)在網(wǎng)絡(luò)上非常流行的連連看游戲。游戲“連連看”顧名思義就是找出相關(guān)聯(lián)的東西,這個連連看在網(wǎng)上基本是用在小游戲中,就是找出相同的兩樣?xùn)|西,在一定的規(guī)則之內(nèi)可以做為相關(guān)聯(lián)處理。現(xiàn)在網(wǎng)絡(luò)小游戲、網(wǎng)頁游戲越來越受網(wǎng)民歡迎,除了玩的方法簡單外,很多游戲不乏經(jīng)典。連連看游戲就是典型。不管走到哪個網(wǎng)頁游戲網(wǎng)站,連連看游戲總是排在受玩家歡迎排名的前5位,休閑、趣味、益智是連連看玩不厭的精華,且不分男女老少、工薪白領(lǐng),是一款適合大眾的經(jīng)典網(wǎng)絡(luò)休閑小游戲。這次我們設(shè)計的游戲具有一般連連看的功能,玩法規(guī)則都與網(wǎng)絡(luò)上的小游戲相同。我們的游戲除了有退出,再來一局,計分,倒計時的功能外,在游戲開始前,還有一個用戶登錄注冊界面,用戶需登錄以后才能開始游戲。此次課程設(shè)計的過程雖然辛苦,但也收獲了不少東西。經(jīng)過到圖書館以及網(wǎng)絡(luò)上查閱資料,我們在對已學(xué)的Java知識有了進(jìn)一步的掌握,例如Swing組件的使用,事件的處理等,另外,還了解了許多新的知識。經(jīng)過小組成員的合作努力,我們對此游戲進(jìn)行各種完善,從原來的數(shù)字圖片改成了一些可愛復(fù)雜的圖片,從沒有計時功能到增加了計時功能,從沒有登錄界面到制作了一個登錄界面,從一次次的完善中,我們收獲了很多。當(dāng)然該游戲并不是完美的,還有一些功能可以加強(qiáng)完善,這需要我們繼續(xù)努力,進(jìn)一步探究。致謝參考文獻(xiàn)[1]劉寶林.Java程序設(shè)計與案例習(xí)題解答與實(shí)驗指導(dǎo)[M].[2]王鵬何云峰.Swing圖形界面開發(fā)與案例分析[M].[3](美)KarlAvedal,DannyAyers,TimothyBriggs.JSP編程指南[M].電子工業(yè)出版社,2004,47-125.[4](美)MarkLinsenbardt.JSP在數(shù)據(jù)庫中的應(yīng)用與開發(fā)[M].希望電子出版社,2005,210-236.[5]DiannePhelan,Buildingasimplewebdatabaseapplication[C].IEEEInternationalProfessionalCommunicationConference,2004,79-86.[6](美)KarlAvedal,DannyAyers,TimothyBriggs.JSP編程指南[M].電子工業(yè)出版社,2006,47-125.[7]DiannePhelan,Buildingasimplewebdatabaseapplication[C].IEEEInternationalProfessionalCommunicationConference,2005,79-86.[8]Altendorf.Eric,Hohman.Moses,Zabicki.Roman.UsingJ2EEonalarge,web-basedproject[J].IEEESoftware.2002,19(02):81-89.附錄源代碼importjava.awt.BorderLayout;importjava.awt.Checkbox;importjava.awt.CheckboxGroup;importjava.awt.Color;importjava.awt.Container;importjava.awt.FlowLayout;importjava.awt.Graphics;importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.File;importjava.io.FilenameFilter;importjava.io.IOException;importjava.io.RandomAccessFile;importjavax.swing.Box;importjavax.swing.Icon;importjavax.swing.ImageIcon;importjavax.swing.JButton;importjavax.swing.JDialog;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JOptionPane;importjavax.swing.JPanel;importjavax.swing.JPasswordField;importjavax.swing.JTextField;importjavax.swing.Timer;classMyPanelextendsJPanel{ intcnt=0; publicvoidpaint(Graphicsg){ super.paint(g); g.setColor(Color.red); g.fillRect(this.getWidth()-cnt,0,cnt,this.getHeight()); } publicbooleanisEnd(){ if(cnt++>this.getWidth()) returntrue; repaint(); returnfalse; }}publicclassLianLianKanimplementsActionListener{ JFramemainFrame;//主面板 JDialoglogin; MyPaneltime; ContainerthisContainer; JPanelcenterPanel,southPanel,northPanel;//子面板 JButtondiamondsButton[][]=newJButton[6][5];//游戲按鈕數(shù)組 JButtonexitButton,newlyButton;//退出,重列,重新開始按鈕 JLabelfractionLable=newJLabel("0");//分?jǐn)?shù)標(biāo)簽 JButtonfirstButton,secondButton;//分別記錄兩次被選中的按鈕 Timertimer; intgrid[][]=newint[8][7];//儲存游戲按鈕位置 staticbooleanpressInformation=false;//判斷是否有按鈕被選中 intx0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV;//游戲按鈕的位置坐標(biāo) inti,j,k,n;//消除方法控制 //=====================================// //=============調(diào)用圖片================// privatestaticIcon[]icons

溫馨提示

  • 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

提交評論