




已閱讀5頁(yè),還剩85頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于java環(huán)境下的連連看游戲研究畢業(yè)論文目錄0 前言11 緒言:21.1 國(guó)內(nèi)外研究現(xiàn)狀21.2 發(fā)展趨勢(shì)21.3 課題研究的內(nèi)容及意義42 系統(tǒng)的需求與可行性分析52.1 系統(tǒng)需求分析52.1.1 功能需求:52.1.2性能需求52.2 可行性分析52.2.1 經(jīng)濟(jì)可行性52.2.2 操作可行性62.2.3 技術(shù)可行性62.3 開發(fā)環(huán)境的選擇和介紹62.3.1 編程環(huán)境的選擇63 系統(tǒng)總體設(shè)計(jì)133.1 設(shè)計(jì)思路134 系統(tǒng)詳細(xì)設(shè)計(jì)154.1 程序系統(tǒng)結(jié)構(gòu)154.1.1 系統(tǒng)功能模塊設(shè)計(jì)154.2 系統(tǒng)流程圖174.2.1 主流程圖174.2.2 系統(tǒng)的具體功能實(shí)現(xiàn)的184.3 系統(tǒng)具體功能的設(shè)計(jì)204.3.1 游戲的菜單界面設(shè)計(jì)204.3.2 連連看游戲的游戲界面設(shè)計(jì)214.3.3 連連看游戲的布局算法234.3.4 連連看游戲的連通算法235 編碼285.1 概述開發(fā)工具及編程腳本285.1.1 概述開發(fā)工具285.1.2 編程腳本285.2 腳本習(xí)慣說明285.3 腳本295.3.1連連看游戲的布局算法295.3.2 連連看游戲的連通算法306 系統(tǒng)的測(cè)試與運(yùn)行346.1 游戲的測(cè)試346.1.1測(cè)試原則及測(cè)試方式概述346.1.2系統(tǒng)測(cè)試的用例及結(jié)果356.2 游戲的主要界面的運(yùn)行結(jié)果與分析386.3軟件測(cè)試結(jié)論447 結(jié)論45致謝46參考文獻(xiàn)47附錄A48附錄B53附錄C580 前言游戲“連連看”顧名思義就是找出相關(guān)聯(lián)的東西,這個(gè)連連看在網(wǎng)上基本是用在小游戲中,就是找出相同的兩樣?xùn)|西,在一定的規(guī)則之內(nèi)可以做為相關(guān)聯(lián)處理。游戲“連連看”是源自臺(tái)灣的桌面小游戲,自從流入大陸以來風(fēng)靡一時(shí),也吸引眾多程序員開發(fā)出多種版本的“連連看”。 隨著Flash應(yīng)用的流行,網(wǎng)上出現(xiàn)了多種在線Flash版本“連連看”。如“水晶連連看”、“果蔬連連看”等,流行的“水晶連連看”以華麗界面吸引了一大批的女性玩家。此次研究希望能開發(fā)一個(gè)簡(jiǎn)單的單機(jī)版“連連看”小游戲。1 緒言:1.1 國(guó)內(nèi)外研究現(xiàn)狀游戲“連連看”是源有臺(tái)灣的桌面小游戲,自從流入大陸以來風(fēng)靡一時(shí),也吸引眾多程序員開發(fā)出多種版本的“連連看”。這其中,顧方編寫的“阿凡達(dá)連連看”以其精良的制作廣受好評(píng),這也成為顧方“阿達(dá)系列軟件”的核心產(chǎn)品。并于2004年,取得了國(guó)家版權(quán)局的計(jì)算機(jī)軟件著作權(quán)登記證書。 隨著Flash應(yīng)用的流行,網(wǎng)上出現(xiàn)了多種在線Flash版本“連連看”。如“水晶連連看”、“果蔬連連看”等,流行的“水晶連連看”以華麗界面吸引了一大批的女性玩家。艾瑞咨詢通過對(duì)07至08年連連看小游戲行業(yè)市場(chǎng)熱點(diǎn),結(jié)合新浪.搜狐.雅虎.網(wǎng)易調(diào)查發(fā)布的數(shù)據(jù)分析發(fā)現(xiàn),2009年小游戲熱點(diǎn)集中在連連看小游戲領(lǐng)域,從2007年起風(fēng)投對(duì)小游戲行業(yè)的投資案例明顯減少,小游戲行業(yè)的投資目標(biāo)主要集中在從事連連看小游戲企業(yè)和研發(fā)企業(yè),小游戲行業(yè)在經(jīng)歷了高峰期后正趨于平靜。 2008年,隨著社交網(wǎng)絡(luò)的普及和開放平臺(tái)的興起,“連連看”被引入了社交網(wǎng)絡(luò)。“連連看”與個(gè)人空間相結(jié)合,被快速的傳播,成為一款熱門的社交游戲,其中以開發(fā)者Jonevey在Manyou開放平臺(tái)上推出的“寵物連連看”最為流行。1.2 發(fā)展趨勢(shì)小游戲連連看發(fā)展現(xiàn)狀及未來趨勢(shì)的研究認(rèn)為,小游戲依然是一個(gè)能給小游戲市場(chǎng)創(chuàng)造巨大財(cái)富的行業(yè),因此急需尋求一個(gè)新的亮點(diǎn)。艾瑞咨詢分析認(rèn)為,選擇有很大發(fā)展空間、且投資金額要求不高的小游戲連連看成了投資者再次介入小游戲行業(yè)的首選,其優(yōu)勢(shì)主要體現(xiàn)在以下兩個(gè)方面:第一:連連看小游戲產(chǎn)品定位合理 外部有利因素促進(jìn)行業(yè)發(fā)展1.小游戲用戶需求呈多樣化趨勢(shì) 連連看小游戲填補(bǔ)空白根據(jù)艾瑞最新發(fā)布的2007-2008年中國(guó)小游戲行業(yè)研究報(bào)告的數(shù)據(jù)顯示,據(jù)艾瑞咨詢用戶調(diào)研數(shù)據(jù)顯示,有31.2%和用戶喜歡益智類游戲,有25.8%的用戶喜歡策略類游戲,使用這兩類游戲作為核心的 連連看小游戲最受歡迎,而連連看小游戲則是因?yàn)槠涮厥獾某尸F(xiàn)方式,從而爭(zhēng)取到熱衷于益智、策略游戲的玩家。2.連連看小游戲用戶屬性的多元化 奠定良好媒體價(jià)值基礎(chǔ)根據(jù)艾瑞咨詢最新推出的2007-2008年中國(guó)連連看小游戲戲行業(yè)發(fā)展報(bào)告的數(shù)據(jù)顯示,在全體連連看小游戲用戶的樣本中,大專及以上學(xué)歷者占總數(shù)的50.6%,在連連看小游戲用戶中這一比例達(dá)到了62.8%;收入方面,38.4%的小游戲游戲用戶收入高于2000元,而僅 23.5%的小游戲用戶達(dá)到這一收標(biāo)準(zhǔn)。艾瑞分析后認(rèn)為,從用戶的學(xué)歷、收入以及在游戲中的構(gòu)成比例來看,連連看小游戲用戶屬性更高端,相較普通游戲用戶其用戶的消費(fèi)潛力也更大,并且伴隨連連看小游戲用戶規(guī)模的快速增長(zhǎng),用戶規(guī)模+高端屬性將為連連看小游戲的媒體價(jià)值奠定良好的基礎(chǔ),而隨著連連看小游戲產(chǎn)業(yè)的成熟和發(fā)展,其媒體價(jià)值將逐步被釋放,未來也將有更大的開發(fā)空間。 第二:連連看小游戲行業(yè)正處于迅猛發(fā)展期 上升空間巨大根據(jù)艾瑞咨詢近期推出的2007-2008年中國(guó)連連看小游戲游戲行業(yè)發(fā)展報(bào)告顯示,2007年中國(guó)連連看小游戲市場(chǎng)規(guī)模為1億元,按正常發(fā)展速度到2008年將達(dá)到2.5億,此后將保持30%以上的增長(zhǎng)率,預(yù)計(jì)在2009年將達(dá)到4.1億元。2007年前連連看小游戲用戶雖然已經(jīng)達(dá)到了一定規(guī)模,但由于缺乏有效的贏利模式支持,整個(gè)行業(yè)始終處于停滯不前的狀態(tài)。艾瑞分析認(rèn)為突破了這個(gè)瓶頸后,連連看小游戲在未來2-3年將進(jìn)入迅猛增長(zhǎng)階段,在樂觀的情況下,3年中連連看游戲市場(chǎng)規(guī)模復(fù)合增長(zhǎng)率將達(dá)到70.5%,預(yù)計(jì)在2009年中國(guó)網(wǎng)頁(yè)游戲市場(chǎng)規(guī)模將達(dá)到4.4億元。艾瑞咨詢:連連看小游戲?qū)⒊?009年中國(guó)新熱點(diǎn)通過訪談與交流,艾瑞發(fā)現(xiàn)目前業(yè)內(nèi)人士普遍看好連連看小游戲的發(fā)展前景,部分行業(yè)人士表示,與08年相比2009年小游戲用戶至少能達(dá)到400%的增長(zhǎng),增長(zhǎng)的主要?jiǎng)恿碓从谟脩艉瓦\(yùn)營(yíng)商的雙重發(fā)展。由于做小游戲門檻較低,能吸引許多中小型團(tuán)隊(duì)加入研究和運(yùn)營(yíng)的行列,當(dāng)運(yùn)營(yíng)商與產(chǎn)品數(shù)量急劇增加時(shí),整個(gè)市場(chǎng)也將被充分調(diào)動(dòng)起來,從而達(dá)到一個(gè)成倍增長(zhǎng)的形勢(shì)。連連看小游戲的最大的優(yōu)勢(shì)在于無需下載客戶端,這使得這類游戲能更方便地被移植到其他移動(dòng)終端中,如手機(jī)、掌機(jī)。這給上網(wǎng)受限制的用戶提供了很大便利。此外艾瑞咨詢認(rèn)為一旦政府逐步實(shí)施在一線城市中建設(shè)廣域網(wǎng)的計(jì)劃,隨著該網(wǎng)絡(luò)的建成,連連看小游戲也將迎來新一輪的發(fā)展。綜上所述,連連看小游戲在今后的一到兩年間將成為風(fēng)投重點(diǎn)關(guān)注的對(duì)象,特別是一些中小型的研發(fā)企業(yè),急需資本市場(chǎng)介入以幫助自己速度擴(kuò)大市場(chǎng)占有率;另一方面資本市場(chǎng)也傾向于網(wǎng)頁(yè)游戲這種投資小、回報(bào)快的行業(yè)。因此艾瑞認(rèn)為,2009年中國(guó)的新熱點(diǎn)小游戲?qū)⑹沁B連看小游戲。1.3 課題研究的內(nèi)容及意義“連連看”游戲的技術(shù)難點(diǎn)在于被選中的兩個(gè)對(duì)象間的路徑查找。以往的路徑查找算法思想是通過不斷的掃描,即,根據(jù)被選中的兩個(gè)對(duì)象所對(duì)應(yīng)位置的縱、橫坐標(biāo),掃描其上面的每一行(列),直到找到以兩個(gè)被選中的對(duì)象所對(duì)應(yīng)的縱(橫)坐標(biāo)為始末的一條可行路徑,然后再以此為基準(zhǔn)查找每個(gè)被選中的對(duì)象所對(duì)應(yīng)的列(行),看是否行得通,如果行得通則可以繼續(xù),如果行不通則需要回退到上一步,繼續(xù)按以上思路重新進(jìn)行查找,直到找到為止。由于這樣查找,每次需要考慮的因素比較多,而且盲目,由于每次要從第一行或第一列開始進(jìn)行查找,對(duì)一些靠得比較近的對(duì)象,比較浪費(fèi)時(shí)間與空間。從其基本查找思想來說,就已經(jīng)把整個(gè)問題復(fù)雜化了,結(jié)果會(huì)使問題越弄越復(fù)雜,同時(shí),這樣編出來的程序代碼很大,游戲的效率受到很大影響。 算法存在的問題,設(shè)計(jì)了一種算法,并將它應(yīng)用于“連連看”游戲的路徑查找,避免了前面算法的盲目性,充分提高了游戲的速度。2 系統(tǒng)的需求與可行性分析2.1 系統(tǒng)需求分析需求分析就是分析用戶的需求,并了解用戶需要什么?想實(shí)現(xiàn)什么?需求分析有兩個(gè)目的:(1)告訴用戶我已經(jīng)了解你的需求,讓用戶相信我們能開發(fā)好該系統(tǒng),最好能能說服用戶:我們開發(fā)的系統(tǒng)在甚至比他們想象的還要好。讓他們相信的一個(gè)主要手段就是分析用戶的需求,并把分析的結(jié)果告訴用戶。該文檔的重點(diǎn)最好側(cè)重功能,操作以及操作規(guī)則描述,如果需要,還可以包含安全需求,性能需求,運(yùn)行環(huán)境需求等。(2)需求分析的另外一個(gè)目的就是為下階段的分析設(shè)計(jì)提供抽象的數(shù)據(jù)與功能模型。2.1.1 功能需求:通過JAVA編一個(gè)連連看程序,通過鼠標(biāo)點(diǎn)擊使相同兩個(gè)圖像消掉。程序?qū)崿F(xiàn)以下幾個(gè)功能:1、判斷鼠標(biāo)點(diǎn)擊的兩張圖片是否相同;2、判斷2張圖片是否可以相連;3、判斷時(shí)間,倒計(jì)時(shí);4、判斷是否使用炸彈,炸彈剩余數(shù)目,自動(dòng)生成路徑消除兩張相同圖片;5、判斷剩余圖片,是否勝利;6、當(dāng)出現(xiàn)無可連通狀態(tài)時(shí),可重新排列剩余圖片位置。2.1.2性能需求界面設(shè)計(jì)友好,美觀。提供靈活、方便的操作功能具有易維護(hù)性和易操作性2.2 可行性分析2.2.1 經(jīng)濟(jì)可行性本系統(tǒng)作為一個(gè)畢業(yè)設(shè)計(jì)任務(wù)開發(fā),并在兩個(gè)月的時(shí)間內(nèi)完成所有的開發(fā)工作,在開發(fā)過程中主要用到的軟硬件資源有:計(jì)算機(jī)一臺(tái),JDK。其中JDK為網(wǎng)上下載安裝,不需要為此有很大開銷。系統(tǒng)最終單機(jī)運(yùn)行既可,也不需要任何額外的花銷??偟膩碚f,系統(tǒng)開發(fā)過程以及開發(fā)完成之后的運(yùn)行都不需要多大開銷,從經(jīng)濟(jì)角度來說,開發(fā)此系統(tǒng)是完全可行的。2.2.2 操作可行性“練練看”小游戲是一款很大眾的小游戲,因此該游戲的使用者只要有基本的使用計(jì)算機(jī)的經(jīng)驗(yàn),就可對(duì)該游戲進(jìn)行操作,該游戲不存在操作可行性方面的問題。2.2.3 技術(shù)可行性圖形用戶界面(graphic user interface)簡(jiǎn)稱GUI,使用圖形的方式借助菜單、按鈕等標(biāo)準(zhǔn)界面元素和鼠標(biāo)操作,幫助用戶方便的向計(jì)算機(jī)系統(tǒng)發(fā)出命令,啟動(dòng)操作,并將系統(tǒng)運(yùn)行的結(jié)果同樣以圖形的方式顯示給用戶。圖形用戶界面操作簡(jiǎn)單,省去了字符界面用戶必須記憶各種命令的麻煩,已經(jīng)成為目前幾乎所有應(yīng)用軟件的集成標(biāo)準(zhǔn)。Java語言中,為了方便圖形用戶界面的開發(fā),設(shè)計(jì)了專門的類庫(kù)來生成各種標(biāo)準(zhǔn)圖形界面元素和處理圖形界面的各種事件。所以運(yùn)用java完全可以完成連連看小游戲的編寫,也不存在技術(shù)可行性方面的問題。2.3 開發(fā)環(huán)境的選擇和介紹2.3.1 編程環(huán)境的選擇Java是一種簡(jiǎn)單的、面向?qū)ο蟮?、分布式的、解釋?zhí)行的、健壯的、安全的、結(jié)構(gòu)中立的、可移植的、高效率的、多線程的和動(dòng)態(tài)的語言。它具有以下特點(diǎn):1.簡(jiǎn)單Java是一種簡(jiǎn)單的語言。Java是在C、C+的基礎(chǔ)上開發(fā)的,繼承了C和C+的許多特性,但同時(shí)也取消其他許多編程語言中繁瑣的、難以理解的、不安全的內(nèi)容,如指針、多重繼承等。JDK還提供了豐富的基礎(chǔ)類庫(kù),具有C或C+編程經(jīng)驗(yàn)的程序員都會(huì)很熟悉,無需經(jīng)過長(zhǎng)時(shí)間訓(xùn)練即可掌握它。2.面向?qū)ο驤ava是一種純面向?qū)ο蟮恼Z言。Java程序的設(shè)計(jì)思路不同于C語言基于過程的程序設(shè)計(jì)思路,而是采用面向?qū)ο蟮乃枷?。面向?qū)ο笃鋵?shí)是現(xiàn)實(shí)世界模型的自然延伸。現(xiàn)實(shí)世界中任何實(shí)體都可以看作是對(duì)象。對(duì)象之間通過消息相互作用。另外,現(xiàn)實(shí)世界中任何實(shí)體都可歸屬于某類事物,任何對(duì)象都是某一類事物的實(shí)例。如果說傳統(tǒng)的過程式編程語言是以過程為中心以算法為驅(qū)動(dòng)的話,面向?qū)ο蟮木幊陶Z言則是以對(duì)象為中心以消息為驅(qū)動(dòng)。用公式表示,過程式編程語言為:程序=算法+數(shù)據(jù);面向?qū)ο缶幊陶Z言為:程序=對(duì)象+消息。 所有面向?qū)ο缶幊陶Z言都支持三個(gè)概念:封裝、多態(tài)性和繼承,Java也不例外?,F(xiàn)實(shí)世界中的對(duì)象均有屬性和行為,映射到計(jì)算機(jī)程序上,屬性則表示對(duì)象的數(shù)據(jù),行為表示對(duì)象的方法(其作用是處理數(shù)據(jù)或同外界交互)。所謂封裝,就是用一個(gè)自主式框架把對(duì)象的數(shù)據(jù)和方法聯(lián)在一起形成一個(gè)整體??梢哉f,對(duì)象是支持封裝的手段,是封裝的基本單位。Java語言的封裝性較強(qiáng),因?yàn)镴ava無全程變量,無主函數(shù),在Java中絕大部分成員是對(duì)象,只有簡(jiǎn)單的數(shù)字類型、字符類型和布爾類型除外。而對(duì)于這些類型,Java也提供了相應(yīng)的對(duì)象類型以便與其他對(duì)象交互操作。 多態(tài)性就是多種表現(xiàn)形式,具體來說,可以用“一個(gè)對(duì)外接口,多個(gè)內(nèi)在實(shí)現(xiàn)方法”表示。舉一個(gè)例子,計(jì)算機(jī)中的堆棧可以存儲(chǔ)各種格式的數(shù)據(jù),包括整型,浮點(diǎn)或字符。不管存儲(chǔ)的是何種數(shù)據(jù),堆棧的算法實(shí)現(xiàn)是一樣的。針對(duì)不同的數(shù)據(jù)類型,編程人員不必手工選擇,只需使用統(tǒng)一接口名,系統(tǒng)可自動(dòng)選擇。運(yùn)算符重載(operatoroverload)一直被認(rèn)為是一種優(yōu)秀的多態(tài)機(jī)制體現(xiàn),但由于考慮到它會(huì)使程序變得難以理解,所以Java最后還是把它取消了。 繼承是指一個(gè)對(duì)象直接使用另一對(duì)象的屬性和方法。事實(shí)上,我們遇到的很多實(shí)體都有繼承的含義。例如,若把汽車看成一個(gè)實(shí)體,它可以分成多個(gè)子實(shí)體,如:卡車、公共汽車等。這些子實(shí)體都具有汽車的特性,因此,汽車是它們的“父親”,而這些子實(shí)體則是汽車的“孩子”。Java提供給用戶一系列類(class),Java的類有層次結(jié)構(gòu),子類可以繼承父類的屬性和方法。與另外一些面向?qū)ο缶幊陶Z言不同,Java只支持單一繼承。面向?qū)ο蟪绦蛟O(shè)計(jì),具備更好的模擬現(xiàn)實(shí)世界環(huán)境的能力和可重用性,將待解決的現(xiàn)實(shí)問題概念化成一組分離的程序?qū)ο?,這些對(duì)象彼此之間可以進(jìn)行交互。一個(gè)對(duì)象包含了對(duì)應(yīng)實(shí)體應(yīng)有的信息和訪問、改變這些信息的方法。通過這種設(shè)計(jì)方式,使所設(shè)計(jì)出來的程序更易于改進(jìn)、擴(kuò)展、維護(hù)和重用。Java語言提供類、接口和繼承等原語。為了簡(jiǎn)單起見,Java只支持類之間的單繼承,但支持接口之間的多繼承,并支持類與接口間的實(shí)現(xiàn)機(jī)制,關(guān)鍵字為implements。Java語言全面支持動(dòng)態(tài)綁定,而C+ 語言只對(duì)虛函數(shù)使用動(dòng)態(tài)綁定。3.分布式分布式包括數(shù)據(jù)分布和操作分布。數(shù)據(jù)分布是指數(shù)據(jù)可以分散在網(wǎng)絡(luò)的不同主機(jī)上,操作分布是指把一個(gè)計(jì)算分散在不同主機(jī)上處理。Java是一種分布式的語言。傳統(tǒng)的基于C/S(客戶端/服務(wù)器)架構(gòu)的程序,均采用客戶端向服務(wù)器提出服務(wù)請(qǐng)求,服務(wù)器再根據(jù)要求執(zhí)行適當(dāng)?shù)某绦虿⒔Y(jié)果返回,所以服務(wù)器負(fù)荷較重。Java采用Java虛擬機(jī)架構(gòu),可將許多工作直接交由終端處理,數(shù)據(jù)因此也可以分布式處理。此外,Java類庫(kù)的運(yùn)用,大大減輕了網(wǎng)絡(luò)傳輸?shù)呢?fù)荷;Java類庫(kù)包含了支持HTTP和FTP 等基于TCP/IP協(xié)議的子庫(kù),Java應(yīng)用程序可憑借URL地址打開并訪問網(wǎng)絡(luò)上的對(duì)象,其訪問方式與訪問本地文件系統(tǒng)幾乎完全相同。網(wǎng)絡(luò)環(huán)境是Java大顯身手和進(jìn)一步發(fā)展的地方。4.高效解釋執(zhí)行Java是高效解釋執(zhí)行的語言。高級(jí)語言程序必須轉(zhuǎn)換為機(jī)器語言程序才能執(zhí)行,但不同的計(jì)算機(jī)系統(tǒng)所使用的機(jī)器語言不同。Java為了實(shí)現(xiàn)“一次編譯,隨處運(yùn)行”的目標(biāo),Java 的源程序在編譯時(shí),并不直接編譯成特定的機(jī)器語言程序,而是編譯成與系統(tǒng)無關(guān)的“字節(jié)碼(Byte codes)”,由Java 虛擬機(jī)(Java Virtual Machine,JVM )來執(zhí)行,JVM使得Java程序可以“一次編譯,隨處運(yùn)行”。任何系統(tǒng)只有安裝了Java虛擬機(jī)后,才可以執(zhí)行Java 程序。JVM能直接在任何機(jī)器上執(zhí)行,為字節(jié)碼提供運(yùn)行環(huán)境。當(dāng)JVM解釋執(zhí)行Java程序時(shí),Java 實(shí)時(shí)編譯器(Just-In-Time,JIT)會(huì)將字節(jié)碼譯成目標(biāo)平臺(tái)對(duì)應(yīng)的機(jī)器語言的指令代碼。早先的許多嘗試解決跨平臺(tái)的方案對(duì)性能要求都很高。其他解釋執(zhí)行的語言系統(tǒng),如BASIC、TCL、PERL 都有無法克服的性能缺陷。然而,Java 卻可以在非常低檔的CPU上順暢運(yùn)行,這是因?yàn)镴ava字節(jié)碼是經(jīng)過精心設(shè)計(jì)的,能夠直接使用JIT編譯技術(shù)將字節(jié)碼轉(zhuǎn)換成高性能的本機(jī)代碼。事實(shí)上,Java的運(yùn)行速度隨著JIT編譯器技術(shù)的發(fā)展已接近于C+。因而“高效且跨平臺(tái)”對(duì)Java 來說已不再矛盾。5.健壯Java是健壯的語言。為了更好地理解Java的健壯性,先討論一下在傳統(tǒng)編程環(huán)境下程序設(shè)計(jì)失敗的主要原因:內(nèi)存管理錯(cuò)誤和誤操作引起的異?;蜻\(yùn)行時(shí)異常。在傳統(tǒng)的編程環(huán)境下,內(nèi)存管理是一項(xiàng)困難、乏味的工作。例如,在C或C+ 中,必須手工分配、釋放所有的動(dòng)態(tài)內(nèi)存。如果忘記釋放原來分配的內(nèi)存,或是釋放了其他程序正在使用的內(nèi)存時(shí),就會(huì)出錯(cuò)。在傳統(tǒng)的編程環(huán)境下,異常情況可能經(jīng)常由“被零除”、“Null指針操作”、“文件未找到”等原因引起,必須用既繁瑣又難理解的一大堆指令來進(jìn)行管理。對(duì)此,Java 通過自行管理內(nèi)存分配和釋放,從根本上消除了有關(guān)內(nèi)存的問題。Java提供垃圾收集器,可自動(dòng)收集閑置對(duì)象占用的內(nèi)存。通過提供面向?qū)ο蟮漠惓L幚頇C(jī)制來解決異常處理的問題。通過類型檢查、Null指針檢測(cè)、數(shù)組邊界檢測(cè)等方法,在開發(fā)早期發(fā)現(xiàn)程序錯(cuò)誤。6.安全Java是安全的網(wǎng)絡(luò)編程語言。Java常被用于網(wǎng)絡(luò)環(huán)境中,為此,Java提供了一系列的安全機(jī)制以防惡意代碼攻擊,確保系統(tǒng)安全。Java的安全機(jī)制分為多級(jí),包括Java 語言本身的安全性設(shè)計(jì)以及嚴(yán)格的編譯檢查、運(yùn)行檢查和網(wǎng)絡(luò)接口級(jí)的安全檢查。Java語言是強(qiáng)類型語言,而且每種類型都要求嚴(yán)格定義。首先,每個(gè)變量、表達(dá)式都有類型。其次,所有的數(shù)值傳遞,不管是直接的、還是通過方法調(diào)用經(jīng)由參數(shù)傳遞,都要進(jìn)行類型相容性檢查。有些語言沒有自動(dòng)進(jìn)行數(shù)據(jù)類型相容性檢查或?qū)_突的類型進(jìn)行轉(zhuǎn)換的機(jī)制;Java編譯器對(duì)所有的表達(dá)式和參數(shù)都要進(jìn)行類型相容性的檢查以確保類型是兼容的。任何類型的不匹配都是錯(cuò)誤的,在編譯完成之前,錯(cuò)誤必須全部被糾正。此外,Java 摒棄指針類型和數(shù)據(jù)類型的隱式轉(zhuǎn)換,從而對(duì)內(nèi)存訪問進(jìn)行了嚴(yán)格的限制。在編譯期間,Java 編譯器并不分配內(nèi)存,而是推遲到運(yùn)行時(shí)由解釋器決定,這樣編程人員就無法通過指針來非法訪問內(nèi)存。在運(yùn)行期間,Java的運(yùn)行環(huán)境提供了四級(jí)安全保障機(jī)制:字節(jié)碼校驗(yàn)器、類裝載器、運(yùn)行時(shí)內(nèi)存布局和文件的訪問限制。在網(wǎng)絡(luò)接口級(jí),用戶可按自己的需要來設(shè)置網(wǎng)絡(luò)訪問權(quán)限。另外,Java的未來版本將采用公開密鑰法以及其他加密技術(shù),來核實(shí)從網(wǎng)絡(luò)上傳輸過來的代碼的源主機(jī)及該代碼的完整性。7.中立Java是結(jié)構(gòu)中立的語言。Java的設(shè)計(jì)目標(biāo)是要支持網(wǎng)絡(luò)應(yīng)用程序。一般而言,網(wǎng)絡(luò)是由許多不同的系統(tǒng)構(gòu)成,包括各種CPU與操作系統(tǒng)結(jié)構(gòu)。為了讓Java應(yīng)用程序能夠在網(wǎng)絡(luò)上任何地方執(zhí)行,其編譯器會(huì)產(chǎn)生一種具備結(jié)構(gòu)中立性的對(duì)象文件格式即Java字節(jié)碼文件。Java字節(jié)碼可在任何安裝了Java虛擬機(jī)的平臺(tái)上運(yùn)行。8.可移植Java是平臺(tái)無關(guān)的語言是指用Java寫的應(yīng)用程序不用修改就可在不同的軟硬件平臺(tái)上運(yùn)行。平臺(tái)無關(guān)有兩種:源代碼級(jí)和目標(biāo)代碼級(jí)。C和C+具有一定程度的源代碼級(jí)平臺(tái)無關(guān),表明用C或C+寫的應(yīng)用程序不用修改只需重新編譯就可以在不同平臺(tái)上運(yùn)行。 Java主要靠Java虛擬機(jī)(JVM)在目標(biāo)碼級(jí)實(shí)現(xiàn)平臺(tái)無關(guān)性。JVM是一種抽象機(jī)器,它附著在具體操作系統(tǒng)之上,本身具有一套虛機(jī)器指令,并有自己的棧、寄存器組等。但JVM通常是在軟件上而不是在硬件上實(shí)現(xiàn)。(目前,SUN系統(tǒng)公司已經(jīng)設(shè)計(jì)實(shí)現(xiàn)了Java芯片,主要使用在網(wǎng)絡(luò)計(jì)算機(jī)NC上。 另外,Java芯片的出現(xiàn)也會(huì)使Java更容易嵌入到家用電器中。)JVM是Java平臺(tái)無關(guān)的基礎(chǔ),在JVM上,有一個(gè)Java解釋器用來解釋Java編譯器編譯后的程序。Java編程人員在編寫完軟件后,通過Java編譯器將Java源程序編譯為JVM的字節(jié)代碼。任何一臺(tái)機(jī)器只要配備了Java解釋器,就可以運(yùn)行這個(gè)程序,而不管這種字節(jié)碼是在何種平臺(tái)上生成的。另外,Java采用的是基于IEEE標(biāo)準(zhǔn)的數(shù)據(jù)類型。通過JVM保證數(shù)據(jù)類型的一致性,也確保了Java的平臺(tái)無關(guān)性。 Java的平臺(tái)無關(guān)性具有深遠(yuǎn)意義。首先,它使得編程人員所夢(mèng)寐以求的事情(開發(fā)一次軟件在任意平臺(tái)上運(yùn)行)變成事實(shí),這將大大加快和促進(jìn)軟件產(chǎn)品的開發(fā)。其次Java的平臺(tái)無關(guān)性正好迎合了“網(wǎng)絡(luò)計(jì)算機(jī)”思想。如果大量常用的應(yīng)用軟件(如字處理軟件等)都用Java重新編寫,并且放在某個(gè)Internet服務(wù)器上,那么具有NC的用戶將不需要占用大量空間安裝軟件,他們只需要一個(gè) Java解釋器,每當(dāng)需要使用某種應(yīng)用軟件時(shí),下載該軟件的字節(jié)代碼即可,運(yùn)行結(jié)果也可以發(fā)回服務(wù)器。由于Java是與平臺(tái)無關(guān)的語言,就決定了Java開發(fā)的程序是可移植的。結(jié)構(gòu)中立是確保程序可移植的必要條件,此外還需很多其他條件的配合。Java 在可移植性方面做了許多工作。Java語言規(guī)范中也沒有任何“同具體實(shí)現(xiàn)相關(guān)”的內(nèi)容,解決了所有可能會(huì)影響到Java可移植性方面的問題。如在Windows 3.1中整數(shù)(Integer)為16位,在Windows 95中整數(shù)為32位,在DEC Alpha中整數(shù)為64位,在Intel 486中為32位,不同的操作系統(tǒng)和CPU對(duì)數(shù)據(jù)類型及長(zhǎng)度都作了不同的定義,給程序的可移植性帶來了一定的難度。Java通過定義獨(dú)立于平臺(tái)的基本數(shù)據(jù)類型及其運(yùn)算,使Java數(shù)據(jù)得以在任何硬件平臺(tái)上保持一致。事實(shí)上,幾乎目前使用的所有CPU都能支持以上數(shù)據(jù)類型,都支持864位整數(shù)格式的補(bǔ)碼運(yùn)算和單/雙精度浮點(diǎn)運(yùn)算。Java語言的基本數(shù)據(jù)類型及其表示方式如表1-1所示。表2-1 java基本數(shù)據(jù)類型表示方式表Tablet.2-1Basic data type representation table基本數(shù)據(jù)類型 表示方式 基本數(shù)據(jù)類型 表示方式 byte 8位二進(jìn)制補(bǔ)碼 float 32位IEEE754浮點(diǎn)數(shù) Short 16位二進(jìn)制補(bǔ)碼 double 32位IEEE754浮點(diǎn)數(shù)int 32位二進(jìn)制補(bǔ)碼 char 16位unicode字符 long 64位二進(jìn)制補(bǔ)碼 9. 高效率Java是高效率的語言。每一次的版本更新,Java在性能上均做出了改進(jìn)。在歷經(jīng)數(shù)個(gè)版本變更后,Java號(hào)稱可以與C/C+擁有同樣甚至更好的運(yùn)行性能。如果解釋器速度不慢,Java可以在運(yùn)行時(shí)直接將目標(biāo)代碼翻譯成機(jī)器指令,來用JVM一秒鐘內(nèi)可調(diào)用 300 000個(gè)過程,與C/C+不相上下。10.多線程線程是操作系統(tǒng)的一種新概念,它又被稱作輕量進(jìn)程,是比傳統(tǒng)進(jìn)程更小的可并發(fā)執(zhí)行的單位。多線程是一種應(yīng)用程序設(shè)計(jì)方法。線程是一大進(jìn)程里分出來的,小的、獨(dú)立的進(jìn)程,使得在一個(gè)程序里可同時(shí)執(zhí)行多個(gè)小任務(wù)。多線程帶來的好處是具有更好的交互性能和實(shí)時(shí)控制性能。但采用傳統(tǒng)的程序設(shè)計(jì)語言(如:C/C+)實(shí)現(xiàn)多線程程序并非易事。C和C+采用單線程體系結(jié)構(gòu),而Java卻提供了多線程支持。 Java在兩方面支持多線程。一方面,Java環(huán)境本身就是多線程的。若干個(gè)系統(tǒng)線程運(yùn)行負(fù)責(zé)必要的無用單元回收,系統(tǒng)維護(hù)等系統(tǒng)級(jí)操作;另一方面,Java語言內(nèi)置多線程控制,可以大大簡(jiǎn)化多線程應(yīng)用程序開發(fā)。Java提供了一個(gè)類Thread,由它負(fù)責(zé)啟動(dòng)運(yùn)行,終止線程,并可檢查線程狀態(tài)。Java的線程還包括一組同步原語。這些原語負(fù)責(zé)對(duì)線程實(shí)行并發(fā)控制。利用Java的多線程編程接口,開發(fā)人員可以方便得寫出支持多線程的應(yīng)用程序,提高程序執(zhí)行效率。Java實(shí)現(xiàn)了多線程技術(shù),提供了簡(jiǎn)便的實(shí)現(xiàn)多線程的方法,并擁有一組高復(fù)雜性的同步機(jī)制。11.動(dòng)態(tài)Java 語言具有動(dòng)態(tài)特性。Java 動(dòng)態(tài)特性是其面向?qū)ο笤O(shè)計(jì)方法的擴(kuò)展,允許程序動(dòng)態(tài)地裝入運(yùn)行過程中所需的類,這是 C+ 進(jìn)行面向?qū)ο蟪绦蛟O(shè)計(jì)所無法實(shí)現(xiàn)的。C+ 程序設(shè)計(jì)過程中,每當(dāng)在類中增加一個(gè)實(shí)例變量或一種成員函數(shù)后,引用該類的所有子類都必須重新編譯,否則將導(dǎo)致程序崩潰。Java采取如下措施來解決此類問題。(1)Java編譯器不是將對(duì)實(shí)例變量和成員函數(shù)的引用編譯為數(shù)值引用,而是將符號(hào)引用信息在字節(jié)碼中保存后傳遞給解釋器,再由解釋器在完成動(dòng)態(tài)連接類后,將符號(hào)引用信息轉(zhuǎn)換為數(shù)據(jù)偏移量。存儲(chǔ)器生成的對(duì)象不在編譯過程中決定,而是延遲到運(yùn)行時(shí)由解釋器確定。這樣,對(duì)類中變量和方法進(jìn)行更新時(shí)就不至于影響現(xiàn)存的代碼。解釋執(zhí)行字節(jié)碼時(shí),這種符號(hào)信息的查找和轉(zhuǎn)換過程僅在一個(gè)新的名字出現(xiàn)時(shí)才進(jìn)行一次,隨后代碼便可以全速執(zhí)行。(2)在運(yùn)行時(shí)確定引用的好處是可以使用已被更新的類,而不必?fù)?dān)心會(huì)影響原有的代碼。如果程序連接了網(wǎng)絡(luò)中另一系統(tǒng)的某一類,該類的所有者也可以自由地對(duì)該類進(jìn)行更新,而不會(huì)使任何引用該類的程序崩潰。(3)Java還簡(jiǎn)化了使用一個(gè)升級(jí)的或全新的協(xié)議的方法。如果系統(tǒng)運(yùn)行 Java 程序時(shí)遇到了不知怎樣處理的程序,沒關(guān)系, Java 能自動(dòng)下載你所需要的功能程序。Java是一種比C/C+更具動(dòng)態(tài)特性的語言。在設(shè)計(jì)上強(qiáng)調(diào)為運(yùn)行中的運(yùn)算環(huán)境提供支持。Java是在運(yùn)行時(shí)為模塊與模塊之間建立連接,并能夠更直接地運(yùn)用面向?qū)ο笤O(shè)計(jì)體系。程序庫(kù)可以自由地增加新方法和實(shí)例變量,而不會(huì)對(duì)它們的客戶產(chǎn)生任何影響?;谝陨蟡ava的特點(diǎn)最終選擇的開發(fā)語言為java。JAVA運(yùn)行環(huán)境:JDK1.63 系統(tǒng)總體設(shè)計(jì)需求分析階段已經(jīng)完全弄清楚了目標(biāo)系統(tǒng)的各種需求,較好的解決了要讓所開發(fā)的軟件“做什么”的問題,并已在軟件需求規(guī)格說明和數(shù)據(jù)要求規(guī)格說明中詳盡和充分地闡明了這些需求。下一步就要著手實(shí)現(xiàn)軟件的需求,即要著手解決“怎么做”的問題。3.1 設(shè)計(jì)思路1. 用戶可以通過點(diǎn)擊菜單中的“開始游戲”選項(xiàng)。開始新游戲程序。程序會(huì)載入圖片,并通過特定的算法排列圖片,并標(biāo)記圖片,以便判斷圖片是否相同。記錄圖片坐標(biāo),以方便計(jì)算圖片是否可以相連。確定圖片的值,以確定用戶點(diǎn)擊的是哪張圖片。2. 用戶選擇兩張一樣的圖片,通過鼠標(biāo)進(jìn)行選取,如果用戶兩次點(diǎn)擊的圖片不相同,那么系統(tǒng)認(rèn)為用戶沒有點(diǎn),已完成用戶以后的選取工作。如果用戶選擇的是相同的圖片,那么系統(tǒng)會(huì)消除這兩張圖片,并使鼠標(biāo)標(biāo)記清0,同時(shí)消除這兩張圖片的標(biāo)記,使里面的圖片被標(biāo)記在外面,以便用戶可以進(jìn)行以后的選擇。3. 用戶也可通過使用“炸彈”功能進(jìn)行消除圖片。方法是點(diǎn)擊菜單中的“炸彈”選項(xiàng)使用,點(diǎn)擊后如果界面上有兩張可以相連的相同圖片就隨即消除兩張可以相連的相同的圖片。4. 炸彈數(shù)目是有限的,默認(rèn)數(shù)目為三,沒使用一次“炸彈”功能,炸彈數(shù)目就會(huì)自動(dòng)減一,當(dāng)炸彈數(shù)目為零時(shí),并且用戶想再次使用炸彈時(shí),系統(tǒng)會(huì)彈出對(duì)話框提示用戶。5. 當(dāng)系統(tǒng)開始游戲后,系統(tǒng)會(huì)在后臺(tái)記錄時(shí)間,界面中顯示時(shí)間倒計(jì)時(shí),如果在用戶還沒有消除所有圖片時(shí),系統(tǒng)時(shí)間到了,那么系統(tǒng)會(huì)彈出對(duì)話框,提示用戶,時(shí)間到了,游戲失敗。6.界面中圖片未完全消除,卻無任何圖片兩個(gè)相同圖片可消除情況,可點(diǎn)擊重置,使剩余圖片重新排列。7. 當(dāng)用戶點(diǎn)擊確定后,系統(tǒng)會(huì)彈出對(duì)話框詢問用戶是否重新開始,用戶選擇“是”時(shí),系統(tǒng)會(huì)開始新游戲;當(dāng)用戶選擇“否”或“取消”時(shí),系統(tǒng)會(huì)返回開始界面 8. 如果時(shí)間未到時(shí),用戶使所有的圖片都消失(兩兩消除,直到最后一對(duì)),系統(tǒng)會(huì)提示用戶游戲以通過,點(diǎn)“確定”后回到開始界面。9.如果游戲當(dāng)中出現(xiàn)“死鎖”狀態(tài),點(diǎn)擊“重排列”,可將剩余圖片的位置重新排列,繼續(xù)游戲。10.游戲可以對(duì)難度進(jìn)行設(shè)置,難度分為低、中、高三檔,三種難度的時(shí)間限制不同。4 系統(tǒng)詳細(xì)設(shè)計(jì)4.1 程序系統(tǒng)結(jié)構(gòu)4.1.1 系統(tǒng)功能模塊設(shè)計(jì)在設(shè)計(jì)連連看小游戲時(shí),需要編寫7個(gè)java源文件:MainFrame.java,ChessButton.java,MapUI.java,Setting.java,ArrayPoint.java,Map.java,DD.java1. MainFrame.java 主窗口部分定義了程序用函數(shù),實(shí)現(xiàn)了程序菜單的使用。2. ChessButton.java 按鍵部分定義按鍵的位置,代表的值。3 .MapUI.java 初步定義游戲界面,按鍵部分判斷點(diǎn)擊的圖片,判斷兩圖片是否可連,是否相同。判斷是否勝利,實(shí)現(xiàn)炸彈功能。4. ReMapUI.java重定義游戲界面,其他功能同MapUI.java5. Setting.java 數(shù)組確定了游戲各種參數(shù)屬性。6. ArrayPoint.java 確定部分定義圖片的值。7. Map.java算法部分通過算法確定兩張圖片是否連通8. DD.java定義倒計(jì)時(shí)顯示 圖4-1 功能模塊圖Fig.4-1 Function module chartMap.java源文件通過算法確定兩張圖片是否連通。JAVA版的連連看MapUI.java源文件初步定義游戲界面及功能。Setting.java源文件確定了游戲各種參數(shù)屬性ArrayPoint.java源文件定義圖片的值。DD.java源文件定義倒計(jì)時(shí)顯示。MainFrame.java源文件定義主程序窗口和菜單。ChessButton.java源文件定義鍵值。initMenuBar()子函數(shù)initialize()子函數(shù)reload()子函數(shù)initTimer()子函數(shù)getpoint()子函數(shù)initialize()子函數(shù)initChesses()子函數(shù)bomb()子函數(shù)toString()子函數(shù)ReMapUI.java重定義游戲界面及功能。reset()子函數(shù)4.2 系統(tǒng)流程圖4.2.1 主流程圖兩張圖片是否相同兩張圖片是否可以相連程序是否還有圖片未消除結(jié)束YYYNZHUNN進(jìn)入主函數(shù)開始游戲接受用戶點(diǎn)擊點(diǎn)擊圖4-2 主流程圖Fig .4-2Main Flow chart開始程序開始游戲接收用戶點(diǎn)擊是否使用炸彈是否二次點(diǎn)擊兩張圖片是否相同兩張圖片是否可以相連消除用戶點(diǎn)擊的兩張圖片消除點(diǎn)擊計(jì)數(shù)是否還有圖片未消除結(jié)束消除兩張一樣的可以相連的圖片消除點(diǎn)擊計(jì)數(shù)YYYYYNNNNN圖4-3 游戲進(jìn)行流程圖Fig.4-3 Game flow chart4.2.2 系統(tǒng)的具體功能實(shí)現(xiàn)的1.游戲進(jìn)行流程圖接受當(dāng)前時(shí)間開始游戲時(shí)間是否為零提醒用戶時(shí)間到結(jié)束NY圖4-4 計(jì)算時(shí)間流程圖Fig.4-4Computing time flowchart2.計(jì)時(shí)系統(tǒng)流程圖3.炸彈流程圖使用炸彈接收使用命令是否還有炸彈消除相同兩張可相連圖片提示用戶無炸彈結(jié)束NY圖4-5 使用炸彈流程圖Fig.4-5 Use a bomb flow chart4.3 系統(tǒng)具體功能的設(shè)計(jì)4.3.1 游戲的菜單界面設(shè)計(jì)游戲菜單共分兩欄:第一欄中又分五個(gè)菜單項(xiàng):開始游戲;重玩一次;炸彈;重排列;退出第二菜單欄Difficulty難度共分三種難度:低;中;高。每種難度時(shí)間長(zhǎng)短不同。圖4-6 連連看游戲的菜單結(jié)構(gòu)Fig.4-6 Link game menu struction連連看菜單界面FileDifficultStart gameOnce again BombResetExitEasyMiddleHigh實(shí)際游戲菜單如下:圖4-7 連連看游戲菜單界面圖Fig.4-7 Link game interface of the menu bar圖4-8 連連看游戲“文件”菜單欄界面圖Fig.4-8 Link game interface of the “file” menu bar圖4-9 連連看游戲“難度”菜單欄界面圖Fig.4-9 Link game interface of the “Difficulty” menu bar4.3.2 連連看游戲的游戲界面設(shè)計(jì)連連看游戲界面包括兩部分,上半部分為,倒計(jì)時(shí)時(shí)間顯示區(qū),下半部分為游戲區(qū)域圖4-10 連連看的游戲界面Fig.4-10 Link game interface游戲界面的功能主要包括時(shí)間控制,布局控制,連通控制,繪制屏幕圖4-11 連連看游戲界面的結(jié)構(gòu)組成Fig.4-11 Link game interface function連連看游戲界面倒計(jì)時(shí)顯示游戲區(qū)域游戲難度炸彈次數(shù)布局算法連通算法繪制屏幕時(shí)間控制4.3.3 連連看游戲的布局算法游戲界面中共分割成100塊,其中64塊用于游戲顯示,最外圍一圈隱藏。算法中定義大小為64的一維數(shù)組,每四個(gè)分為一組,按從116的順序存入數(shù)組中。調(diào)用nextInt(i),生成一隨機(jī)數(shù),數(shù)組任意位置的值交換,使數(shù)組中數(shù)字排列順序打亂。將一位數(shù)組的值按一定規(guī)律存入二維數(shù)組中,二維數(shù)組對(duì)應(yīng)游戲界面64塊。即完成了游戲界面的布局。具體算法見5.3 腳本4.3.4 連連看游戲的連通算法連連看游戲中的聯(lián)通規(guī)律是選擇一對(duì)相同的圖案進(jìn)行連線,此連線在避開其他圖案后,呈現(xiàn)的路徑不超過兩次轉(zhuǎn)彎。對(duì)練練看的連通規(guī)則進(jìn)行分析,發(fā)現(xiàn)路徑搜索范圍可以由整個(gè)游戲區(qū)域縮小到選中的兩個(gè)圖案所在的帶狀區(qū)域內(nèi),需要選擇的帶狀區(qū)域又根據(jù)選中圖案的相對(duì)位置,分為縱向帶狀區(qū)域,橫向帶狀區(qū)域,雙向帶狀區(qū)域三種情況,如下圖所示.其中紅色、綠色的方塊表示不同的圖案,黑色的直線表示連通路徑,同心圈表示連通的結(jié)點(diǎn)橫向帶狀區(qū)域縱向帶狀區(qū)域圖4-12 連通算法帶狀區(qū)域分析圖Fig.4-12 Zoster regional connectivity analysis of algorithms雙向帶狀區(qū)域針對(duì)以上三種搜索區(qū)域,連通算法分成了三個(gè)函數(shù)來實(shí)現(xiàn)。其中兩個(gè)函數(shù)分別進(jìn)行橫向帶狀區(qū)域、縱向帶狀區(qū)域的連通判斷,第三個(gè)函數(shù)進(jìn)行雙向帶狀區(qū)域的連通判斷,調(diào)用前面兩個(gè)函數(shù)實(shí)現(xiàn),這樣進(jìn)一步減小了代碼量,并且提高了程序的可讀性。如下圖所示:連通算法縱向帶狀區(qū)域連通判斷函數(shù)雙向帶狀區(qū)域連通判斷函數(shù)橫向帶狀區(qū)域連通判斷函數(shù)圖4-13 連通算法函數(shù)調(diào)用圖Fig.4-13 Call Graph fuction connectivity algorithm連通算法的橫向帶狀區(qū)域連通判斷函數(shù)定義與縱向帶狀區(qū)域連通判斷函數(shù)定義見5.3腳本。連連看游戲的圖案抽象成整形數(shù)存儲(chǔ)在二維矩陣Mapij中,不同的整數(shù)表示不同的圖案,整形數(shù)0表示該位置沒有圖案,用戶選中的兩個(gè)圖案位置信息分別存儲(chǔ)在變量priviousPoint和currPoint中,連通算法的流程圖如下所示:圖4-14 連通算法程序流程圖Fig.4-14 Connectivitly agorithms program flowchartNYNYYNY連通算法選擇第一個(gè)圖案選擇第二個(gè)圖案是否同一種圖案是否連通顯示連通路徑去掉選中圖案爆炸效果結(jié)束橫向帶狀區(qū)域連通判斷函數(shù)雙向帶狀區(qū)域連通判斷函數(shù)縱向帶狀區(qū)域連通判斷函數(shù)圖案是否在一條直線上N是否橫向帶狀區(qū)域 連通時(shí)轉(zhuǎn)折點(diǎn)數(shù)量的不同,連通狀態(tài)分為三種情況:直線連通:兩個(gè)圖案的坐標(biāo)值(x,y)中,必有一個(gè)值是相等的,連通狀態(tài)沒有結(jié)點(diǎn)。有1個(gè)轉(zhuǎn)折點(diǎn)的連通:兩個(gè)圖案的坐標(biāo)值(x,y),必然都不相等,連通結(jié)點(diǎn)坐標(biāo)(x,y),分別與兩個(gè)圖像塊坐標(biāo)值中的對(duì)應(yīng)分量相等。有2個(gè)轉(zhuǎn)折點(diǎn)的連通:連通的兩個(gè)轉(zhuǎn)折點(diǎn)坐標(biāo)(x,y),必有一個(gè)值是相等的,且另一個(gè)值分別與兩個(gè)圖案坐標(biāo)值中的一個(gè)值相等。如下圖所示,其中紅色、綠色的方塊表示不同的圖案,黑色的直線表示連通的路徑,同心圓表示連通的轉(zhuǎn)折點(diǎn)。直線連通一個(gè)轉(zhuǎn)折點(diǎn)兩個(gè)轉(zhuǎn)折點(diǎn)圖4-15 連通狀態(tài)圖Fig.4-15 Connected state diagram連通狀態(tài)判斷函數(shù)定義見5.3腳本。5 編碼5.1 概述開發(fā)工具及編程腳本5.1.1 概述開發(fā)工具開發(fā)工具的選擇本系統(tǒng)所用的開發(fā)工具是Eclipse。Eclipse 是一個(gè)開放源代碼的軟件開發(fā)項(xiàng)目,專注于為高度集成的工具開發(fā)提供一個(gè)全功能的、具有商業(yè)品質(zhì)的工業(yè)平臺(tái)。它由Eclipse項(xiàng)目、Eclipse工具項(xiàng)目和Eclipse技術(shù)項(xiàng)目三個(gè)項(xiàng)目組成,每一個(gè)項(xiàng)目由一個(gè)項(xiàng)目管理委員會(huì)監(jiān)督,并由它的項(xiàng)目章程管理。(1)開發(fā)平臺(tái)Eclipse+JDK1.6(2)開發(fā)工具 文檔創(chuàng)作采用Office系列軟件5.1.2 編程腳本在選擇開發(fā)語言問題上,我選擇了java作為系統(tǒng)的開發(fā)語言,Eclipse開發(fā)工具強(qiáng)有力的開發(fā)能力給我的程序設(shè)計(jì)帶來了很多方便,以前的課程設(shè)計(jì)的過程中,我積累了很多關(guān)于java編程的技巧,在這次畢業(yè)設(shè)計(jì)過程中,讓我對(duì)java進(jìn)行了更深入的研究,更加明確了java采用真正的面向?qū)ο蟮募夹g(shù),它將所有的事件、控制、函數(shù)和程序都以對(duì)象為單位封裝起來,具有“封裝”“多態(tài)”“繼承”的屬性。而Eclipse為開發(fā)人員提供了各種工具和一個(gè)集成的開發(fā)環(huán)境,創(chuàng)造了應(yīng)用開發(fā)時(shí)所需的各種部件,應(yīng)用的各種成分,包括窗口、菜單、程序、數(shù)據(jù)庫(kù)存取、數(shù)據(jù)庫(kù)管理、圖形、報(bào)表、調(diào)試、編譯等工作全都能在Eclipse的集成開發(fā)環(huán)境中完成。Eclipse是面向?qū)ο蟮木幊坦ぞ?,相?duì)于第四代面向過程編程語言,可讓程序員將更多的精力放到功能的實(shí)現(xiàn)而不是界面的實(shí)現(xiàn)上來。這些不僅能提高程序員的工作效率,同時(shí)還能極大地加快開發(fā)進(jìn)程。5.2 腳本習(xí)慣說明本系統(tǒng)代碼中所有的類名和變量名遵循如下的原則(1)名字應(yīng)該能夠標(biāo)識(shí)事物的特性。(2)名字盡量不使用縮寫,除非它是眾所周知的。(3)名字可以有兩個(gè)或三個(gè)單詞組成,但通常不應(yīng)多于三個(gè)。(4)在名字中,所有單詞第一個(gè)字母大寫。(5) 使用名詞或名詞短語命名類。 (6)少用縮寫。 (7) 不要使用下劃線字符 (_)。 (8)不允許隨意定義全局變量。(9) 一個(gè)變量只能有一個(gè)用途;變量的用途必須和變量的名稱保持一致。(10)所有變量都必須在類和函數(shù)最前面定義,并分類排列。5.3 腳本5.3.1連連看游戲的布局算法private void init() int tempArr = new intSettings.ROWS * Settings.COLUMNS; int len = tempArr.length; for(int i = 0;i len/maxKinds;i+) tempArri * 4 = i + 1; tempArri * 4 + 1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 出版業(yè)的生產(chǎn)流程管理考核試卷
- 錫冶煉中的廢物資源化考核試卷
- 金屬制品在建筑D打印中的材料研發(fā)考核試卷
- 防曬傘結(jié)構(gòu)與性能考核試卷
- 婦產(chǎn)科手術(shù)麻醉
- 衛(wèi)生間空間功能自我分析
- 醫(yī)院民生實(shí)事工作專題匯報(bào)
- 診斷學(xué)基礎(chǔ):肝臟疾病
- 麻醉科業(yè)務(wù)培訓(xùn)體系
- 傳染病預(yù)防控制體系構(gòu)建
- uni-app移動(dòng)應(yīng)用開發(fā)課件 7-智慧環(huán)保項(xiàng)目
- 2025年廈門大學(xué)嘉庚學(xué)院圖書館員招考高頻重點(diǎn)提升(共500題)附帶答案詳解
- 《oracle性能優(yōu)化》課件
- 小學(xué)生手工剪紙課件
- 中藥結(jié)腸透析治療慢性腎衰竭的技術(shù)規(guī)范
- 2024年廣東省廣州市中考英語真題卷及答案解析
- 化工設(shè)備機(jī)械基礎(chǔ)習(xí)題及參考答案
- 《課件旅游法培訓(xùn)》課件
- 高中生物(部編版)選擇性必修3知識(shí)清單(問答版)
- 山東師范大學(xué)《高級(jí)英語(二)》2021-2022學(xué)年第一學(xué)期期末試卷
- 手術(shù)體位擺放原則及注意事項(xiàng)
評(píng)論
0/150
提交評(píng)論