




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
畢業(yè)設計(論文)原創(chuàng)性聲明本人鄭重聲明:所提交的畢業(yè)設計(論文),是本人在導師指導下,獨立進行研究工作所取得的成果。除文中已注明引用的內容外,本畢業(yè)設計(論文)不包含任何其他個人或集體已經發(fā)表或撰寫過的作品成果。對本研究做出過重要貢獻的個人和集體,均已在文中以明確方式標明并表示了謝意。論文作者簽名:日期:年月日摘要隨著手機行業(yè)發(fā)展蓬勃迅速,尤其是以Android系統(tǒng)為例,越來越多的手機搭載了Android智能系統(tǒng),該系統(tǒng)是以Linux為基礎的開放源代碼操作系統(tǒng),其開放性、不受運營商限制、豐富的硬件支持、良好的擴展性,受到了外界良好評價與使用支持。Android的系統(tǒng)架構分為三個部分:應用部分,核心部分,底層部分。除了上述劃分方式以外,從系統(tǒng)實際的架構模型來看,Android則可以分成以下幾個層次:①應用層②框架層③運行時④核心類庫⑤硬件抽象層⑥Linux內核。本文主要闡述了以面向對象的程序開發(fā)語言Java,以eclipse為開發(fā)工具,基于Android系統(tǒng)開發(fā)一款數(shù)獨游戲。數(shù)獨是一種運用紙、筆進行演算的邏輯游戲。玩家需要根據(jù)9×9盤面上的已知數(shù)字,推理出所有剩余空格的數(shù)字,并滿足每一行、每一列、每一個粗線宮內的數(shù)字均含1-9,不重復。每一道合格的數(shù)獨謎題都有且僅有一個唯一答案,推理方法也以此為基礎,任何無解或者多解的題目都是不合格的。本程序實現(xiàn)了難度選擇功能,計時功能,成績保存,重來功能等。關鍵詞:Android;手機游戲;數(shù)獨ABSTRACTWiththedevelopmentofmobilephoneindustryboomingrapidly,especiallyintheAndroidsystem,forexample,agrowingnumberofmobilephonewithAndroidintelligentsystem,thissystemisbasedontheLinuxopensourceoperatingsystem,itsopenness,withoutbeinglimitedbytheoperators,richhardwaresupport,goodexpansibility,goodevaluationandusethesupportbytheoutsideworld.Androidsystemarchitectureisdividedintothreeparts:thepart,thecorepart,thebottompart.Inadditiontotheclassifiedmethods,fromthepointofthearchitectureofthesystemmodel,theAndroidcanbedividedintothefollowingseverallevels:(1)theapplicationlayer(2)frameworklayer(3)theruntime(4)coreclasslibraries(5)hardwareabstractionlayer(6)Linuxkernel.Thisarticlemainlyelaboratedinanobject-orientedprogramminglanguageJava,eclipseasthedevelopmenttool,developedasudokugamebasedonAndroidsystem.Sudokuisakindofusepaperandpenciltocalculuslogicgame.Playersneedtoaccordingto9x9knownfiguresonthedisksurface,reasoningoutalltherestofthespace,andsatisfyeachrow,everycolumn,everyhouseNumbersarethicklinewith1-9,don'trepeat.Everyqualifiedsudokupuzzlehasonlyoneandonlyoneanswer,reasoningmethodsandonthisbasis,thetopicofanykindofsolutionorsolutionisnotqualified.Thisprocedurerealizethefunctionofdifficultchoice,timingfunctions,performancepreservation,tofunction,etc.Keywords:Android;Mobilephonegames;Sudoku目錄TOC\o"1-3"\u第一章緒論 11.1游戲背景 11.2游戲簡介 11.2.1數(shù)獨題目的數(shù)量 11.2.2數(shù)獨題目的最少組成 11.3手機游戲特征 21.4國內外研究現(xiàn)狀 3本章小結 3第二章技術介紹 42.1Android簡介 42.2Android平臺架構與特征 42.2.1Android平臺特征 42.2.2Android平臺架構 52.3Android應用程序組件 7本章小結 8第三章系統(tǒng)分析與設計 93.1系統(tǒng)需求分析 93.1.1功能需求分析 93.1.2安全性需求分析 93.2系統(tǒng)的結構設計 9本章小結 10第四章基于Android平臺數(shù)獨游戲的實現(xiàn) 114.1Android開發(fā)環(huán)境介紹 114.2Android開發(fā)平臺搭建步驟 114.3系統(tǒng)的主要功能 124.2游戲中主要類的簡要介紹 144.2.1難易度選擇界面相關類 144.2.2數(shù)獨列表界面相關類 144.2.3游戲界面相關類 144.3游戲中主要功能詳解 154.3.1選擇難易度界面 154.3.2關卡選擇界面 174.3.3正式游戲界面 234.4數(shù)獨數(shù)據(jù)庫存儲 274.4.1數(shù)據(jù)庫代碼 274.4.2數(shù)據(jù)庫關系E-R圖 284.4.3游戲的數(shù)據(jù)檢測 29本章小結 29第五章游戲的測試和運行 305.1游戲測試概述 305.2測試環(huán)境 315.3游戲運行結果 31本章小結 33第六章總結和展望 346.1總結 346.2展望 34結束語 35致謝 36參考文獻 37附錄第一章緒論1.1游戲背景“九宮格”一詞想必大家并不陌生,它作為數(shù)獨的前身,最早起源于中國。但九宮格游戲較為復雜,需要從縱向、橫向、斜向三個方向的數(shù)字之和全部等于15,不適合現(xiàn)在快節(jié)奏的生活,所以人們對經典的九宮格游戲進行了改良,形成了數(shù)獨游戲。洛書河圖是我國目前已發(fā)現(xiàn)的最早的九宮格游戲記載,到了18世紀末,瑞士數(shù)學家萊昂哈德?歐文又發(fā)明了一種叫做“拉丁方塊”的游戲,之后不久,美國的一家雜志機構也刊登了類似的游戲,從此這個游戲受到了更多的歡迎,之后日本市場也引進了這個游戲,并進行廣泛的傳播[1]。2004年,在英國《泰晤士報》上,第一個“數(shù)獨”游戲被刊登在此報上,從那時起數(shù)獨游戲才真正為世界所知曉,并且很快風靡全球。其原因得益于此類游戲操作簡單,不需要進行復雜的數(shù)字運算且可玩性高、鍛煉思維、開發(fā)大腦,也不需要特定的語言基礎。1.2游戲簡介1.2.1數(shù)獨題目的數(shù)量到底有多少個9×9的拉丁方陣呢?答案是:5524751496156892842531225600個。但是由于數(shù)獨的規(guī)則是每行、每列、每個小九宮格都是要1到9之間的不同數(shù)字,這與拉丁方陣有很大不同,所以數(shù)獨的謎題要比拉丁方陣少很多。直到2005年底,數(shù)學家貝米耳(StanleyE.Bammel)與羅思坦(JeromeRothstein)才算出一共有6670903752021072936960種可能的數(shù)獨謎題[2]。為了慶賀這一結果,這兩個數(shù)學家專門寫了一份研究報告。但是在同一個數(shù)獨中,數(shù)獨是可以變換的,像行交換、列交換,還有可能是代碼交換(比如1和8交換、2和5、3和6……)。若進行上述變換,用不了幾次就很難分清是否來自同一數(shù)獨了。為了解決這一難題,西澳大利亞大學教授GordonRoyle博士利用圖形理論,研究出了辨別數(shù)獨變換的方法。他將數(shù)獨謎題利用Nauty程序圖形的轉化來做比對,該研究結果把利用這一方法將宮格內的行交換、列交換、代碼交換等變換方法產生的等價題都扣除,最后計算出本質上共有5472730538個不同的數(shù)獨謎題。此結果表明數(shù)獨謎題的數(shù)量之大,若全球每天通過互聯(lián)網(wǎng)和報紙刊登10000個本質上不同的數(shù)獨謎題,仍需要花上一萬多年才能全部羅列完這接近55億的數(shù)獨謎題。1.2.2數(shù)獨題目的最少組成好的數(shù)獨題目要求已知的數(shù)字是點對稱的,而且謎題要有唯一解甚至已知的數(shù)字越少越好。目前最好的紀錄是給定18個數(shù)字就可以產生出唯一解的數(shù)獨謎題。如果放寬條件到不需要點對稱,那么最少可以給定的數(shù)字是17個。許多玩家和學者對數(shù)獨游戲癡迷不已,當然也包括很多計算機程序人員,他們在網(wǎng)上提供了眾多免費下載的數(shù)獨謎題程序。例如,才華橫溢的數(shù)學家和組合學家Zeilberger曾寫了一個在Maple上跑的程序供大家解出數(shù)獨謎題[3],可以發(fā)現(xiàn),難度高的題目不一定給出較少的數(shù)字,有時候提供的數(shù)字很多但仍然難度很高。反之,提供的數(shù)字少也許反而比較容易解題。也就是說,謎題的難易程度與提供的數(shù)字多少不是絕對相關的,謎題的難易程度和設計者的邏輯思維模式有關[4]。1.3手機游戲特征1.易于學習:既然手機游戲面向的是普通消費者而不是計算機專家,那么他們不可能深入的學習游戲技巧。因此手機游戲的控制應當盡量簡單,且易于學習。即便游戲計劃的控制方式要求很多很復雜,開發(fā)商也應當考慮將其簡化。與主機控制器相比,手機和平板電腦的按鍵和控制選項更少,這意味著手機游戲開發(fā)商需要進行創(chuàng)新。許多成功游戲的控制都很簡單。比如流行游戲《翼飛沖天》需要的玩家輸入便很簡單,點擊屏幕可以使下坡加速,在上坡的時候放開即可[5]。2.可中斷性:多任務處理是手機生活方式的基本特征。在手機設備上,接到電話會導致游戲馬上退出,所以在游戲中采用智能中斷設置是必要之舉。如果用戶在接完電話后發(fā)現(xiàn)自己剛才的游戲狀態(tài)已消失,那么自然不會對游戲產生良好的印象。將來用戶再玩該游戲的可能性也會減小,因為擔心再接到電話導致他們前功盡棄。所以一個好的手機游戲應該提供短時間的娛樂功能,并且允許用戶在游戲與工作模式之間順利切換。3.基于訂閱:手機游戲的盈利成功取決于他們巨大的使用量。一開始開發(fā)與設計每個游戲都是昂貴的。如果一個手機游戲開發(fā)者要贏利的話,重要的是消耗一個游戲引擎,多個標題,基本的故事情節(jié)類似。基于訂閱的游戲是不斷產生收入的最好方法。4.豐富的社會交互:不管一個游戲設計得多好,只要玩家找到了它的根本模式或者玩完了所有的游戲路徑很快就會厭煩這個游戲。對于一個基于訂閱的游戲,重要的是與別的玩家合作以增強所玩游戲的智力與隨機性。在今天紛繁復雜的多玩家游戲中具有豐富社會交互的游戲證明是成功的。5.好的網(wǎng)絡基礎設備:巨額的手機技術研發(fā)費用都花在提高設備與網(wǎng)絡的可用性與可靠性上面。因此,手機設備硬件與網(wǎng)絡協(xié)議與桌面/控制臺世界(如全球定位系統(tǒng)(GPS)擴展、條形碼掃描儀、與短消息服務(SMS)/多媒體信息服務(MMS)通訊)有著非常大的差別。好的手機游戲應該利用那些更新的設備特征與網(wǎng)絡基礎設備的優(yōu)點。6.有效利用屏幕實用面積:任何屏幕上的使用面積都是有限的,開發(fā)商必須考慮到這一點。比如玩《僵尸時代》需要用你的拇指控制兩個屏幕上的“虛擬操縱桿”。這需要占據(jù)大片屏幕實用面積,使游戲玩起來較為困難。平板電腦有著更大的實用面積,但依然會出現(xiàn)上述問題。如果用平板電腦來玩《僵尸時代》,操縱桿依然很難使用,觸控精確性有一定的問題,因為相比手機來說兩個操縱桿相隔更遠。7.功能反饋:由于缺乏按動按鍵或震動等觸覺反饋,手機游戲必須使用不同的方式來告知用戶他們的動作已經被游戲接受,它們應當在屏幕上提供不顯眼卻能夠傳達信息的反饋。比如,在手游《無盡之劍》中會高亮玩家按動的屏幕按鍵[6],并在屏幕上呈現(xiàn)相關文本。這些信號立馬便可以告知玩家攻擊或格擋是否成功。同樣,當受到傷害時,所受傷害數(shù)值也會顯示在屏幕上,同時生命值扣除相應數(shù)值。1.4國內外研究現(xiàn)狀Android操作系統(tǒng)是基于Linux平臺的開發(fā)的手機操作系統(tǒng),他是由著名的互聯(lián)網(wǎng)公司Google公司進行開發(fā)的。Android操作系統(tǒng)包括用戶界面、手機操作系統(tǒng)和手機應用程序等移動設備所需要的所有軟件能夠保證正常的使用,而且Android操作系統(tǒng)不存在和以前手機操作系統(tǒng)上的阻礙移動通信設備上所需創(chuàng)新的所有權障礙,因為他是一個開源的手機操作系統(tǒng)。Google與開放手機聯(lián)盟合作開發(fā)了Android,這個聯(lián)盟由包括中國移動、摩托羅拉、高通、宏達電和T-Mobile在內的30多家技術和無線應用的領軍企業(yè)組成[7]。Google通過與運營商、設備制造商、開發(fā)商和其他相關各方結成深層次的合作伙伴關系,希望借助建立標準化、開放式的移動設備軟件平臺,在移動產業(yè)內形成一個開放式的生態(tài)系統(tǒng)。
Androind操作系統(tǒng)作為谷歌企業(yè)戰(zhàn)略的重要組成部分,將進一步推進“隨時隨地為每個人提供信息”這一企業(yè)目標的實現(xiàn)。Android手機操作系統(tǒng)將作為Google擴展移動設備市場的一個奠基石,而后為Google應用的推廣起到了良好的作用。但Android操作系統(tǒng)不會替代谷歌長期以來奉行的移動發(fā)展策略:通過與全球各地的手機制造商和運營商結成合作伙伴,開發(fā)既有用又有吸引力的移動服務,并推廣這些產品[8]。本章小結本章介紹了數(shù)獨游戲的起源、數(shù)獨游戲玩法和規(guī)則,手機游戲的特征,以與Android系統(tǒng)的國內外現(xiàn)狀,希望能讓大家對數(shù)獨有更深入的了解。第二章技術介紹2.1Android簡介Android(安卓),是一個以Linux為基礎的開源移動設備操作系統(tǒng),主要用于智能手機和平板電腦,由Google成立的OpenHandsetAlliance(OHA,開放手持設備聯(lián)盟)持續(xù)領導與開發(fā)中。Android已發(fā)布的最新版本為Android5.0(Lollipop)。Android系統(tǒng)最初由安迪·魯賓(AndyRubin)等人開發(fā)制作[9],最初開發(fā)這個系統(tǒng)的目的是創(chuàng)建一個數(shù)碼相機的先進操作系統(tǒng);但是后來發(fā)現(xiàn)市場需求不夠大,加上智能手機市場快速成長,于是Android被改造為一款面向智能手機的操作系統(tǒng)。於2005年8月被美國科技企業(yè)Google收購。2007年11月,Google與84家制造商、開發(fā)商與電信營運商成立開放手持設備聯(lián)盟來共同研發(fā)改良Android系統(tǒng),隨后,Google以Apache免費開放原始碼許可證的授權方式,發(fā)布了Android的原碼,讓生產商推出搭載Android的智能手機,Android后來更逐漸拓展到平板電腦與其他領域上。2010年末數(shù)據(jù)顯示,僅正式推出兩年的Android作業(yè)系統(tǒng)在市場占有率上已經超越稱霸逾十年的諾基亞Symbian系統(tǒng),成為全球第一大智能手機操作系統(tǒng)[10]。2.2Android平臺架構與特征2.2.1Android平臺特征隨著科技的發(fā)展,移動電話(MobilePhone)正朝著智能化的方向發(fā)展,逐步成為多種工具的功能載體,而Android就是這樣一個智能手機的平臺、一個多種工具的功能載體。通信工具移動電話的最基本功能為通信功能,因此使用運營商提供的通信網(wǎng)絡進行語音通話也是Android平臺的最基本功能。除了傳統(tǒng)的語音通話功能外,Android平臺還具有短消息功能,以與通常移動電話都具有的個人信息系統(tǒng)管理方面的功能(如電話本等)。2.網(wǎng)絡工具隨著數(shù)字業(yè)務使用的普遍化,移動電話通常被作為網(wǎng)絡工具使用,即移動電話可以完成電腦的部分功能。而Android平臺在網(wǎng)絡方面的功能主要包括瀏覽器、IM(即時信息)、郵件等。3.媒體播放器隨著多媒體技術的發(fā)展應用,在移動電話上進行音頻和視頻播放已經成為經常使用的功能。由此,Android平臺具有支持更多的音頻/視頻格式,支持更高分辨率的視頻,可更流暢地播放視頻,以與支持網(wǎng)絡流媒體等功能。4.媒體獲取設備隨著移動電話與媒體獲取設備的集成日益增強,Android平臺提供了照相機、錄音機、攝像機等功能。5.多類型的連接設備Android平臺提供了多種連接方式,如USB、GPS、紅外、藍牙、無線局域網(wǎng)等。6.具有友好和絢麗的用戶界面Android平臺具有友好的用戶界面,使用戶容易學習和操作;同時具有絢麗的用戶界面,具有良好的視覺效果。7.可以個性化定制的平臺Android平臺針對于用戶的個性化需求,提供了全面自定義手機的功能。除了上述介紹的Android平臺的功能以外,其在技術上還具有以下幾個方面的特性:全開放智能移動電話平臺;支持多硬件平臺;使用眾多的標準化技術;核心技術完整、統(tǒng)一;完善的SDK和文檔;完善的輔助開發(fā)工具。2.2.2Android平臺架構從圖2.1我們可以看出,Android操作系統(tǒng)的體系結構可分為4層,由上到下依次是應用程序、應用程序框架、核心類庫和Linux內核,其中第三層還包括Android運行時的環(huán)境。下面分別來講解各個部分。圖2.1Android操作系統(tǒng)體系結構1.程序應用Android連同一個核心應用程序包一起發(fā)布,該應用程序包包括E-mail客戶端、SMS短消息程序、日歷、地圖、瀏覽器、聯(lián)系人管理程序等。所有的應用程序都是用Java編寫的[11]。2.應用程序框架開發(fā)者完全可以訪問核心應用程序所使用的API框架。該應用程序框架架構用來簡化組件軟件的重用,任何一個應用程序都可以發(fā)布它的功能塊并且任何其他的應用程序都可以使用其所發(fā)布的功能塊(不過得遵循框架的安全性限制)。該應用程序重用機制使得組件可以被用戶替換。以下所有的應用程序都由一系列的服務和系統(tǒng)組成,包括:(1)一個可擴展的視圖(Views)可以用來創(chuàng)建應用程序,包括列表(lists)、網(wǎng)絡(grids)、文本框(textboxes)、按鈕(buttons),甚至是一個可嵌入的Web瀏覽器。(2)內容管理器(ContentProviders)使得應用程序可以訪問另一個應用程序的數(shù)據(jù)(如聯(lián)系人數(shù)據(jù)庫),或者共享它們自己的數(shù)據(jù)。(3)一個資源管理器(ResourceManager)提供非代碼資源的訪問,如本地字符串、圖形和分層文件(layoutfiles)。(4)一個通知管理器(NotificationManager)使得應用程序可以在狀態(tài)欄中顯示客戶通知信息。(5)一個活動類管理器(ActivityManager)用來管理應用程序生命周期并提供常用的導航回退功能。3.Android程序庫Android包括一個被Android系統(tǒng)中各種不同組件所使用的C/C++集庫。該庫通過Android應用程序框架為開發(fā)者提供服務。以下是一些主要的核心庫[12]:(1)系統(tǒng)C庫:一個從BSD繼承來的標準C系統(tǒng)函數(shù)庫(libc),專門為基于EmbeddedLinux的設備定制。(2)媒體庫:基于PacketVideoOpenCORE;該庫支持錄放,并且可以錄制許多流行的音頻視頻格式,還有靜態(tài)映像文件包括MPEG4、H.264、MP3、AAC、JPG、PNG。(3)SurfaceManager:對顯示子系統(tǒng)的管理,并且為多個應用程序提供2D和3D圖層的無縫融合。(4)LibWebCore:一個最新的Web瀏覽器引擎,用來支持Android瀏覽器和一個可嵌入的Web視圖。(5)SGL:一個內置的2D圖形引擎。(6)3Dlibraries:基于OpenGLES1.0APIs實現(xiàn);該庫可以使用硬件3D加速(如果可用)或者使用高度優(yōu)化的3D軟加速。(7)FreeType:位圖(bitmap)和向量(vector)字體顯示。(8)SQLite:一個對于所以應用程序可用、功能強勁的輕型關系型數(shù)據(jù)庫引擎。4.Android運行庫Android包括了一個核心庫,該核心庫提供了Java編程語言核心庫的大多數(shù)功能。每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。Dalvik是針對同時高效地運行多個VMs實現(xiàn)的。Dalvik虛擬機執(zhí)行.dex的Dalvik可執(zhí)行文件,該格式文件針對最小內存使用做了優(yōu)化。該虛擬機是基于寄存器的,所有的類都是經由Java匯編器編譯,然后通過SDK中的DX工具轉化成.dex格式由虛擬機執(zhí)行[13]。Dalvik虛擬機依賴于Linux的一些功能,比如線程機制和底層內存管理機制。5.Linux內核Android的核心系統(tǒng)服務依賴于Linux內核,如安全性、內存管理、進程管理、網(wǎng)絡協(xié)議棧和驅動模型[14]。Linux內核也同時作為硬件和軟件棧之間的硬件抽象層。2.3Android應用程序組件應用程序組件是Android應用程序的基本構建單元。每個組件是系統(tǒng)進入你的應用程序的不同入口點。不是所有的組件對于用戶都是實際上的入口點,有些是互相依賴的,但是每個組件都有特定的作用——每個都是唯一的構建單元,這些構建單元定義你應用程序的全部行為這里有6個組件,它們是Android應用程序的基石[15]:(1)Activities(活動)應用程序的顯示層。每一個畫面對應于你的應用程序,將會是Activity類的擴展。Activity使用Views去構建UI來顯示信息和響應用戶的行為。就桌面開發(fā)而言,一個Activity相當于一張Form。(2)Services(服務)應用程序中不可見的“工人”。Service組件運行時不可見,但它負責更新的數(shù)據(jù)源和可見的Activity,以與觸發(fā)通知。它們常用來執(zhí)行一些需要持續(xù)運行的處理,當你的Activity已經不處于激活狀態(tài)或不可見。(3)Content(內容)提供共享的數(shù)據(jù)存儲。ContentProvider(內容提供器)用來管理和共享應用程序的數(shù)據(jù)庫。在應用程序間,ContentProvider是共享數(shù)據(jù)的首選方式。這意味著,你可以配置自己的ContentProvider去存取其他的應用程序或者通過其他應用程序暴露的ContentProvider去存取它們的數(shù)據(jù)。Android設備本身包含了幾個ContentProvider來訪問像聯(lián)系人信息等有用的數(shù)據(jù)庫。(4)Intents(意圖)簡單的消息傳遞框架。使用Intent,你可以在整個系統(tǒng)內廣播消息或者給特定的Activity或者服務來執(zhí)行你的行為意圖。系統(tǒng)會決定那個(些)目標來執(zhí)行適當?shù)男袨椤?5)BroadcastReceivers(廣播接收器)Intent廣播的“消費者”。通過創(chuàng)建和注冊一個BroadcastReceiver,應用程序可以監(jiān)聽符合特定條件的廣播的Intent。BroadcastReceiver會自動的啟動你的應用程序去響應新來的Intent。BroadcastReceiver是事件驅動程序的理想手段。(6)Notifications(通知)用戶通知的框架。Notification用來在不需要焦點或不中斷它們當前Activity的情況下提示用戶。它們是Service或BroadcastReceiver獲得用戶注意的首選方式。例如,當設備收到文本信息或外部來電時,它通過閃光,發(fā)聲,顯示圖標或顯示對話框信息來提醒你。本章小結本章主要講述了開發(fā)基于Android系統(tǒng)的數(shù)獨游戲的技術做了一些概述,通過本章的內容我們要了解Android的簡介,Android平臺的特征、架構、以與Android平臺應用程序組件。第三章系統(tǒng)分析與設計3.1系統(tǒng)需求分析需求分析完成的好壞直接影響后續(xù)軟件開發(fā)的質量,它的重要性由此可見一斑?,F(xiàn)實情況往往是,用戶不了解計算機的相關知識,而開發(fā)人員也對相關業(yè)務領域不甚了解。受思維定式的影響,用戶和開發(fā)人員往往對同一問題有不同的理解,這樣就對系統(tǒng)的功能確定帶來了很大的麻煩。所以,開發(fā)人員和用戶之間要進行充分和有效的溝通,甚至開發(fā)人員要置身于相關的業(yè)務領域,以確保開發(fā)出來的系統(tǒng)能夠真正滿足用戶的需要[16]。3.1.1功能需求分析此次程序設計任務是Android平臺下的數(shù)獨游戲設計,程序將在Android模擬器中運行調試。此次程序設計用戶界面要求較為友好,由于針對的用戶為Android智能手機用戶,因此程序的操作非常簡單容易操作。游戲進行時通過底部鍵盤中的數(shù)字鍵輸入答案,程序中儲存了90個分三個難度的數(shù)獨題目,供用戶娛樂,此次程序設計的操作系統(tǒng)要求為Windows7,且此次程序設計需要在Eclipse環(huán)境下開發(fā)。1.重來功能重來功能主要實現(xiàn)用戶想要重新開始本謎題。2.選關功能選關功能主要實現(xiàn)用戶可以自主選擇關卡。3.計時功能計時功能主要實現(xiàn)對用戶解決謎題的計時。4.成績保存功能成績保存功能主要實現(xiàn)對用戶解決本謎題所用時間的保存。5.難易程度選擇功能難易程度選擇功能主要實現(xiàn)用戶根據(jù)自己實際水平選擇適合自己難度的題目。6.退出功能退出功能主要實現(xiàn)退出游戲。3.1.2安全性需求分析因該游戲不涉與到用戶信息等,因此不需要考慮信息的泄漏。3.2系統(tǒng)的結構設計系統(tǒng)結構為進入主界面顯示選擇難度界面,在用戶選擇難度之后,進入相應的關卡選擇界面,選擇具體關卡之后,將進入正式游戲界面。在正式游戲界面時,系統(tǒng)將會自動計時,用戶按返回鍵則暫停計時,并返回關卡選擇界面,若用戶要重解本謎題,則可以使用菜單選項,按Restart鍵即可重新解答本謎題。當用戶成功解決本謎題時,系統(tǒng)將會自動停止計時,并保存用戶解決本謎題所用的時間(即成績保存)。本程序中這三個界面之間都是可以通過返回鍵互相切換的,具體系統(tǒng)結構圖如圖3.1所示。啟動游戲啟動游戲選擇難易度游戲主界面選則關卡重來功能計時功能退出功能圖3.1系統(tǒng)結構圖本章小結本章對Android數(shù)獨游戲做了需求分析,并對系統(tǒng)結構做了簡單介紹,可以從下一章中具體看到這些界面與具體的實現(xiàn)方法和部分代碼。第四章基于Android平臺數(shù)獨游戲的實現(xiàn)4.1Android開發(fā)環(huán)境介紹Android的上層應用程序是用Java語言開發(fā),同時還需要基于Dalvik虛擬機,所以,Google公司推薦使用主流的Java繼承開發(fā)環(huán)境Eclipse[17]。只有Eclipse還不夠,因為是使用Java語言進行開發(fā),還應該有由SUN公司提供的JavaSDK(其中包括JRE:JavaRuntimeEnvironment)。此外,Android的應用程序開發(fā)和Java開發(fā)有較大區(qū)別的,所以還需要有Google提供的AndroidSDK。同時,還需要在Eclipse安裝ADT,為Android開發(fā)提供開發(fā)工具的升級或者變更,是Eclipse下開發(fā)工具的升級下載的工具[18]。 簡言之,需要以下軟件,才能搭建Android開發(fā)環(huán)境,從而進行Android應用程序的開發(fā)。(1)JavaSDK(2)Eclipse(3)AndroidSDK(4)ADT4.2Android開發(fā)平臺搭建步驟1.首先到/downloads/下載Eclipse集成開發(fā)環(huán)境并且解壓,這里推薦下載JavaEE集成版本,可以為平臺的搭建省下不少工作。接著再去/javase/downloads/index.jsp站點下載SDK后安裝,下載/android/android-sdk-windows-1.5_r1.zipAndroidSDK1.5后解壓。第一步下載工序就結束了。2.雙擊Eclipse解壓后目錄中的eclipse.exe然后啟動,選擇Eclipse菜單中的Help->InstallNewSoftware->選項卡上的AvailableSoftware,點擊右側的“Add”輸入/android/eclipse/后確定,然后在“Workwith”下拉菜單中選擇剛才輸入的網(wǎng)址。過一會就會出現(xiàn)一個DeveloperTools選項,勾上以后點擊Next以后Eclipse會自動網(wǎng)上查找Android開發(fā)工具插件,然后找到AndroidDDMS和AndroidDevelopmentTools,選中這兩個點擊Finish,Eclipse就會自動下載并安裝Android插件了,最后會提示重啟Eclipse。3.重啟后選擇Eclipse菜單中的Windows->Preferences在左側的Android項目中SDKLocation中填入AndroidSDK解壓后的目錄,然后點擊Apply。4.在WindowsXP的系統(tǒng)變量中的path變量中添加一個值,該值指向解壓后的AndroidSDK目錄下的tools文件夾[19]。4.3系統(tǒng)的主要功能數(shù)獨游戲的規(guī)則很簡單,只需在空格處填入1~9的數(shù)字,并保證每個數(shù)字在每個九宮格內只能出現(xiàn)一次,且每個數(shù)字在每一行、每一列也只能出現(xiàn)一次[20],然后玩家需要在空白處填上相應的數(shù)字使其滿足游戲規(guī)則。該游戲的運行步驟如下:啟動游戲后首先進入的便是游戲難度選擇界面,效果如圖4.1所示,在難度選擇界面中,用戶可以選擇Easy,Medium,Hard三個難度等級。圖4.1難度選擇界面圖4.2關卡選擇界面當用戶隨意選擇一個難度以后,將進入具體關卡選擇界面,效果如圖4.2所示,在任意難度中都有30個關卡。當用戶隨意選擇一個關卡后,將正式進入數(shù)獨游戲界面,效果如圖4.3所示。在游戲界面,由9×9的九宮格和底部的數(shù)字鍵盤組成。圖4.3數(shù)獨游戲界面圖4.4返回界面在這里,我們可以看到,在正式游戲界面頂部,有計時功能,從玩家打開本謎題時開始計時,當玩家按返回鍵時,則暫停計時,并且改變游戲狀態(tài),效果如圖4-4所示。因為我們演示的是第二個謎題,當玩家按返回鍵時,則暫停計時,第二個謎題狀態(tài)變?yōu)椋≒laying)。我們知道,當玩家已經知道一個謎題的正確解法,但已經錯誤太多時候,這時就需要有重新開始本謎題的功能,在這里我們先隨意填寫幾個數(shù)字,當我們通過菜單功能按下(Restart)鍵時,本謎題將清除已填數(shù)字,且計時也重新開始,效果如圖4.5,4.6所示。圖4.5重新開始按鈕圖4.6重新開始以后的游戲當玩家正確填滿謎題之后,將會彈出對話框完成對話框,且計時功能暫停,若沒有正確填寫則不彈出對話框,計時功能也將繼續(xù),直到全部正確填寫完成之后才結束,效果如圖4.7所示。當完成謎題之后,按返回鍵回到關卡選擇界面,此時,被完成的謎題狀態(tài)改變,且完成的成績被保存在謎題后面,效果如圖4.8所示。圖4.7正確填寫謎題結果圖4.8謎題狀態(tài)與成績保存4.2游戲中主要類的簡要介紹為了讓讀者更好地理解后面的代碼,下面將對游戲中的各個類逐一進行簡要說明。關于這些類的詳細代碼將在后面的章節(jié)中相繼給出。4.2.1難易度選擇界面相關類FolderListActivity類該類為選擇難易度界面的實現(xiàn)類,主要負責選擇難易度界面的繪制,是整個應用程序的入口。此類讓activity繼承ListActivity,并且舍棄XML布局文件,全部采用默認布局中存在的布局來布局。此類重寫onCreate()方法,onResume()方法,onWindowFocusChanged()方法,onPause()方法,onDestroy()方法,onSaveInstanceState()方法(保存數(shù)據(jù))等。4.2.2數(shù)獨列表界面相關類SudokuListActivity類該類為數(shù)獨列表(關卡)界面的實現(xiàn)類,主要負責數(shù)獨關卡界面的繪制,此類繼承了ListActivity,同樣舍棄了XML布局文件,全部采用默認布局中存在的布局來布局。4.2.3游戲界面相關類(1)SudokuPlayActivity類SudokuPlayActivity類是游戲中最主要的一個類,游戲規(guī)則、游戲模型都包含在此類當中。同時該類還負責繪制游戲的畫面、接收玩家的響應。(2)Cell類Cell類負責9×9九宮格中每一個小格的操作。(3)數(shù)獨生成器DatabaseHelper類該類繼承了SQLiteOpenHelper類,為游戲隨機提供存放數(shù)獨數(shù)字的二維數(shù)組,該類存儲了本程序所有的謎題數(shù)據(jù)。(4)Timer類該類負責對游戲的計時功能。有start()功能,stop()功能,reset()功能,isRunning()功能,getTime等功能。(5)IMNumpad類該類是游戲進行時底部的鍵盤,負責輸入數(shù)字。數(shù)字鍵盤主體部分有1-9的數(shù)字,和一個(C)清除符號。4.3游戲中主要功能詳解4.3.1選擇難易度界面圖4.9選擇難度界面選擇難度界面主要代碼如下:1.OnCreat()方法負責選擇難易度界面的窗口生成,此窗口由三個ContentView組成。protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.folder_list); ViewgetMorePuzzles=(View)findViewById(R.id.get_more_puzzles); setDefaultKeyMode(DEFAULT_KEYS_SHORTCUT);getListView().setOnCreateContextMenuListener(this); mDatabase=newSudokuDatabase(getApplicationContext()); mCursor=mDatabase.getFolderList(); startManagingCursor(mCursor); SimpleCursorAdapteradapter=newSimpleCursorAdapter(this,R.layout.folder_list_item, mCursor,newString[]{FolderColumns.NAME,FolderColumns._ID}, newint[]{R.,R.id.detail}); mFolderListBinder=newFolderListViewBinder(this); adapter.setViewBinder(mFolderListBinder);setListAdapter(adapter);Changelogchangelog=newChangelog(this);changelog.showOnFirstRun(); }2.onListItemClick()方法負責點擊所觸法的功能。比如,當玩家點擊Easy難度,將會進入下個Easy界面關卡中。protectedvoidonListItemClick(ListViewl,Viewv,intposition,longid){ Intenti=newIntent(this,SudokuListActivity.class); i.putExtra(SudokuListActivity.EXTRA_FOLDER_ID,id); startActivity(i); }3.自定義類FolderListViewBinder來對接口進行回調,它的作用很簡單,就是綁定數(shù)據(jù)到view,用戶點擊不同的難度將會自動連接到綁定的數(shù)據(jù)庫中。privatestaticclassFolderListViewBinderimplementsViewBinder{ privateContextmContext; privateFolderDetailLoadermDetailLoader; publicFolderListViewBinder(Contextcontext){ mContext=context; mDetailLoader=newFolderDetailLoader(context); } @Override publicbooleansetViewValue(Viewview,Cursorc,intcolumnIndex){ switch(view.getId()){ caseR.: ((TextView)view).setText(c.getString(columnIndex)); break; caseR.id.detail: finallongfolderID=c.getLong(columnIndex); finalTextViewdetailView=(TextView)view; detailView.setText(mContext.getString(R.string.loading)); mDetailLoader.loadDetailAsync(folderID,newFolderDetailCallback(){ publicvoidonLoaded(FolderInfofolderInfo){ if(folderInfo!=null) detailView.setText(folderInfo.getDetail(mContext)); } }); } returntrue; }4.3.2關卡選擇界面圖4.10關卡選擇界面關卡選擇界面主要代碼如下:1.OnCreat()方法負責關卡選擇界面窗口的生成,此界面顯示了30道題庫和每個謎題的狀態(tài),以與謎題是否完成。protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); AndroidUtils.setThemeFromPreferences(this); setContentView(R.layout.sudoku_list); mFilterStatus=(TextView)findViewById(R.id.filter_status); getListView().setOnCreateContextMenuListener(this); setDefaultKeyMode(DEFAULT_KEYS_SHORTCUT); mDatabase=newSudokuDatabase(getApplicationContext()); mFolderDetailLoader=newFolderDetailLoader(getApplicationContext()); Intentintent=getIntent(); if(intent.hasExtra(EXTRA_FOLDER_ID)){ mFolderID=intent.getLongExtra(EXTRA_FOLDER_ID,0); }else{ Log.d(TAG,"No'folder_id'extraprovided,exiting."); finish(); return; } finalSharedPreferencessettings=PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); mListFilter=newSudokuListFilter(getApplicationContext()); mListFilter.showStateNotStarted=settings.getBoolean(FILTER_STATE_NOT_STARTED,true); mListFilter.showStatePlaying=settings.getBoolean(FILTER_STATE_PLAYING,true); mListFilter.showStateCompleted=settings.getBoolean(FILTER_STATE_SOLVED,true); mAdapter=newSimpleCursorAdapter(this,R.layout.sudoku_list_item, null,newString[]{SudokuColumns.DATA,SudokuColumns.STATE, SudokuColumns.TIME,SudokuColumns.LAST_PLAYED, SudokuColumns.CREATED,SudokuColumns.PUZZLE_NOTE}, newint[]{R.id.sudoku_board,R.id.state,R.id.time, R.id.last_played,R.id.created,R.id.note}); mAdapter.setViewBinder(newSudokuListViewBinder(this)); updateList(); setListAdapter(mAdapter); }2.onKeyDown()方法實現(xiàn)當用戶按下返回鍵時,實現(xiàn)界面從關卡選擇界面到難度選擇界面的之間的切換。publicbooleanonKeyDown(intkeyCode,KeyEventevent){ if(isTaskRoot()&&keyCode==KeyEvent.KEYCODE_BACK){ Intenti=newIntent(); i.setClass(this,FolderListActivity.class); startActivity(i); finish(); returntrue; } returnsuper.onKeyDown(keyCode,event); }3.onListItemClick()方法負責在此界面選擇任意關卡將執(zhí)行的操作。比如,當玩家選擇了第二關,則相應的進入正式游戲界面。protectedvoidonListItemClick(ListViewl,Viewv,intposition,longid){ playSudoku(id); }4.playSudoku()方法表示當用戶選擇關卡以后將調用SudokuPlayActivity,進入謎題解答界面。privatevoidplaySudoku(longsudokuID){ Intenti=newIntent(SudokuListActivity.this,SudokuPlayActivity.class); i.putExtra(SudokuPlayActivity.EXTRA_SUDOKU_ID,sudokuID); startActivity(i); }5.自定義類SudokuListViewBinder來對接口進行回調,它的作用很簡單,就是綁定數(shù)據(jù)到view,當玩家選擇了一個關卡,則會進入已綁定題庫的游戲界面。此類包含游戲狀態(tài)函數(shù),游戲成績保存函數(shù)getDateAndTimeForHumans()。privatestaticclassSudokuListViewBinderimplementsViewBinder{ privateContextmContext; privateGameTimeFormatmGameTimeFormatter=newGameTimeFormat(); privateDateFormatmDateTimeFormatter=DateFormat.getDateTimeInstance( DateFormat.SHORT,DateFormat.SHORT); privateDateFormatmTimeFormatter=DateFormat .getTimeInstance(DateFormat.SHORT); publicSudokuListViewBinder(Contextcontext){ mContext=context; } publicbooleansetViewValue(Viewview,Cursorc,intcolumnIndex){ intstate=c.getInt(c.getColumnIndex(SudokuColumns.STATE)); TextViewlabel=null; switch(view.getId()){ caseR.id.sudoku_board: Stringdata=c.getString(columnIndex); CellCollectioncells=null;; try{cells=CellCollection.deserialize(data); }catch(Exceptione){ longid=c.getLong(c.getColumnIndex(SudokuColumns._ID)); Log.e(TAG,String.format("Exceptionoccurredwhendeserializingpuzzlewithid%s.",id),e); } SudokuBoardViewboard=(SudokuBoardView)view; board.setReadOnly(true); board.setFocusable(false); ((SudokuBoardView)view).setCells(cells); break; caseR.id.state: label=((TextView)view); StringstateString=null; switch(state){ caseSudokuGame.GAME_STATE_COMPLETED: stateString=mContext.getString(R.string.solved); break; caseSudokuGame.GAME_STATE_PLAYING: stateString=mContext.getString(R.string.playing); break; } label.setVisibility(stateString==null?View.GONE :View.VISIBLE); label.setText(stateString); if(state==SudokuGame.GAME_STATE_COMPLETED){ label.setTextColor(Color.rgb(187,187,187)); }else{ label.setTextColor(Color.rgb(255,255,255)); } break; caseR.id.time: longtime=c.getLong(columnIndex); label=((TextView)view); StringtimeString=null; if(time!=0){ timeString=mGameTimeFormatter.format(time); } label.setVisibility(timeString==null?View.GONE :View.VISIBLE); label.setText(timeString); if(state==SudokuGame.GAME_STATE_COMPLETED){ label.setTextColor(Color.rgb(187,187,187)); }else{ label.setTextColor(Color.rgb(255,255,255)); } break; caseR.id.last_played: longlastPlayed=c.getLong(columnIndex); label=((TextView)view); StringlastPlayedString=null; if(lastPlayed!=0){ lastPlayedString=mContext.getString(R.string.last_played_at, getDateAndTimeForHumans(lastPlayed)); } label.setVisibility(lastPlayedString==null?View.GONE :View.VISIBLE); label.setText(lastPlayedString); break; } returntrue; }4.3.3正式游戲界面圖4.11正式游戲界面正式游戲界面主要代碼:1.onCreate方法負責窗口生成。首先要對窗口進行全屏操作,然后加載計時功能,最后加載數(shù)字鍵盤功能。publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState); Displaydisplay=getWindowManager().getDefaultDisplay(); if((display.getWidth()==240||display.getWidth()==320) &&(display.getHeight()==240||display.getHeight()==320)){ requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); mFullScreen=true; } AndroidUtils.setThemeFromPreferences(this); setContentView(R.layout.sudoku_play); mRootLayout=(ViewGroup)findViewById(R.id.root_layout); mSudokuBoard=(SudokuBoardView)findViewById(R.id.sudoku_board); mTimeLabel=(TextView)findViewById(R.id.time_label); mDatabase=newSudokuDatabase(getApplicationContext()); mHintsQueue=newHintsQueue(this);mGameTimer=newGameTimer();mGuiHandler=newHandler();if(savedInstanceState==null){ mSudokuGameID=getIntent().getLongExtra(EXTRA_SUDOKU_ID,0); mSudokuGame=mDatabase.getSudoku(mSudokuGameID);}else{ mSudokuGame=newSudokuGame(); mSudokuGame.restoreState(savedInstanceState); mGameTimer.restoreState(savedInstanceState);}if(mSudokuGame.getState()==SudokuGame.GAME_STATE_NOT_STARTED){ mSudokuGame.start();}elseif(mSudokuGame.getState()==SudokuGame.GAME_STATE_PLAYING){ mSudokuGame.resume();}if(mSudokuGame.getState()==SudokuGame.GAME_STATE_COMPLETED){ mSudokuBoard.setReadOnly(true);}mSudokuBoard.setGame(mSudokuGame); mSudokuGame.setOnPuzzleSolvedListener(onSolvedListener); mHintsQueue.showOneTimeHint("welcome",R.string.welcome,R.string.first_run_hint); mIMControlPanel=(IMControlPanel)findViewById(R.id.input_methods); mIMControlPanel.initialize(mSudokuBoard,mSudokuGame,mHintsQueue); mIMControlPanelStatePersister=newIMControlPanelStatePersister(this);mIMPopup=mIMControlPanel.getInputMethod(IMControlPanel.INPUT_METHOD_POPUP);mIMSingleNumber=mIMControlPanel.getInputMethod(IMControlPanel.INPUT_METHOD_SINGLE_NUMBER);mIMNumpad=mIMControlPanel.getInputMethod(IMControlPanel.INPUT_METHOD_NUMPAD);}2.在此窗口,還要調用View的繼承類SudokuBoardView中的onDraw()方法,此方法用來繪制九宮格的游戲界面,下面只給出部分主要代碼。protectedvoidonDraw(Canvascanvas){ for(intc=0;c<=9;c++){ floatx=(c*mCellWidth)+paddingLeft; canvas.drawLine(x,paddingTop,x,height,mLinePaint); } for(intr=0;r<=9;r++){ floaty=r*mCellHeight+paddingTop; canvas.drawLine(paddingLeft,y,width,y,mLinePaint); } intsectorLineWidth1=mSectorLineWidth/2; intsectorLineWidth2=sectorLineWidth1+(mSectorLineWidth%2); for(intc=0;c<=9;c=c+3){ floatx=(c*mCellWidth)+paddingLeft; canvas.drawRect(x-sectorLineWidth1,paddingTop,x+sectorLineWidth2,height,mSectorLinePaint); } for(intr=0;r<=9;r=r+3){ floaty=r*mCellHeight+paddingTop; canvas.drawRect(paddingLeft,y-sectorLineWidth1,width,y+sectorLineWidth2,mSectorLinePaint); } }3.當玩家點擊MENU菜單時調用onOptionsItemSelected方法,并彈出菜單欄,玩家點擊Restart按鈕,實現(xiàn)重來功能(restart())。publicbooleanonOptionsItemSelected(MenuItemitem){switch(item.getItemId()){caseMENU_ITEM_RESTART: showDialog(DIALOG_RESTART);returntrue;}returnsuper.onOptionsItemSelected(item); }4.一個Dialog一直被創(chuàng)建與作為Activity的一部分顯示的時候,一般情況下,你應該使用回調方法onCreateDialog(int)創(chuàng)建Dialog,當你使用這個方法的時候,Android系統(tǒng)會自動的管理每一個Dialog的狀態(tài),并有效的控制著每個Dialog,同樣的,每個Dialog也會繼承Activity中的某些特性。就像當一個Dialog顯示的時候,按下菜單鍵顯示Activity定義的選項菜單或者使用音量鍵調整音視頻音量的大小,當你想顯示一個Dialog的時候,調用showDialog(int)方法,傳遞的參數(shù)是唯一能標識你想顯示的對話框的整數(shù)。此處有兩個對話框,分別是正確解決謎題時彈出的DIALOG_WELL_DONE:對話框,以與當玩家點擊restart按鈕彈出的DIALOG_RESTART對話框,以下是對話框的詳細代碼。protectedDialogonCreateDialog(intid){ switch(id){ caseDIALOG_WELL_DONE:returnnewAlertDialog.Builder(this).setIcon(android.R.drawable.ic_dialog_info).setTitle(R.string.well_done).setMessage(getString(R.string.congrats,mGameTimeFormatter.format(mSudokuGame.getTime()))).setPositiveButton(android.R.string.ok,null).create(); caseDIALOG_RESTART:returnnewAlertDialog.Builder(this).setIcon(android.R.drawable.ic_menu_rotate).setTitle(R.string.app_name).setMessage(R.string.restart_confirm).setPositiveButton(android.R.string.yes,newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intwhichButton){ mSudokuGame.reset(); mSudokuGame.start(); mSudokuBoard.setReadOnly(false); if(mShowTime){ mGameTimer.start(); }}}).setNegativeButton(android.R.string.no,null).create(); } returnnull;}5.GameTimer類負責此程序的計時功能。privatefinalclassGameTimerextendsTimer{ GameTimer(){ super(1000); } protectedbooleanstep(intcount,longtime){ updateTime();returnfalse;} }4.4數(shù)獨數(shù)據(jù)庫存儲4.4.1數(shù)據(jù)庫代碼本程序共有90個謎題,分3個難度,Easy,Medium,Hard。每個難度有30個謎題,在本程序中我們采用DatabaseHelperextendsSQLiteOpenHelper,定義了類DatabaseHelper,繼承了SQLiteOpenHelper,謎題的數(shù)據(jù)都存在類DatabaseHelper中的OnCreat()方法中,但由于題庫量較大,此處只給出2個題庫數(shù)據(jù),具體代碼如下:publicvoidonCreate(SQLiteDatabasedb){db.execSQL("CREATETABLE"+SudokuDatabase.SUDOKU_TABLE_NAME+"("+SudokuColumns._ID+"INTEGERPRIMARYKEY,"+SudokuColumns.FOLDER_ID+"INTEGER,"+SudokuColumns.CREATED+"INTEGER,"+SudokuColumns.STATE+"INTEGER,"+SudokuColumns.TIME+"INTEGER,"+SudokuColumns.LA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計算機三級重要試題及答案解析
- 公路設計變更管理試題及答案
- 計算機三級數(shù)據(jù)庫學習方法試題及答案
- 理解數(shù)據(jù)庫與互聯(lián)網(wǎng)的緊密聯(lián)系試題及答案
- 全面解析的軟件測試工程師考試試題及答案
- 機電工程考試常見錯誤分析及試題與答案
- 嵌入式界面設計原則研究試題及答案
- 教育機構的數(shù)據(jù)安全管理與培訓實踐
- 燈光藝術裝置設計與實現(xiàn)企業(yè)制定與實施新質生產力項目商業(yè)計劃書
- 游泳入門課程行業(yè)跨境出海項目商業(yè)計劃書
- 自考00061國家稅收歷年真題及答案
- 疾控中心考試試題及答案
- 冠狀動脈介入診斷治療
- 高效催化劑的開發(fā)與應用-全面剖析
- 冀少版(2024)七年級下冊生物期末復習知識點填空練習題(無答案)
- (四調)武漢市2025屆高中畢業(yè)生四月調研考試 物理試卷(含答案)
- (2024)仁愛科普版七年級下冊英語全冊知識點總結 (2022新課標 完整版)
- 醫(yī)院普法知識培訓課件
- 先兆早產護理教學查房
- 法律盡職調查委托協(xié)議
- 妊娠合并甲減護理查房
評論
0/150
提交評論