第一篇:水果連連看手機游戲設計與實現
引言 1.1 研究背景 現在信息化程度水平不斷提高,網絡的整體互動體系也已經基本完善,發展漸漸變得完備起來了,逐漸在使人們的日常生活發生一些變化。近幾年,據有關統計顯示,現在人們逐漸步入了高節奏的生活中去了,更多人們將手機作為一個玩具來玩,讓生活的重擔能夠有所減輕,很多游戲里面,最多的人玩的游戲就是連連看了,而現在手機的廣泛普及使得連連看這個游戲有了需要手游的需要,故研究并推行了這個水果連連看的 手游。
由于現在的信息化水平不斷提高,互聯網平臺工作運行的日益平穩發達,手機智能化逐步發展起來了,在智能手機里面具備的一些功能或是新上市的一些游戲也越發的豐富了。很多人都用上了智能化的手機,現在已經變成了大多數人們在生活過程中的不能或缺的一個部分了,手機的體系越發變得和人們的一些需求相關了,這其中因為安卓手機的價格親民,所以被應用的最為廣泛,現在已經作為了大多數人的首選,一直到2012年,安卓手機的銷售額已經超過了所有市場的一半了,在生活中人們運用安卓手機的數量也在逐年增加,使用更加便捷,運用更加多。現在,人們擁有手機的量已經遠遠超過了擁有計算機的量。伴隨著目前即將迎來的是5G的時代,所以移動的網絡更加具備方便快捷的特點,人們在生活中使用量比較多。智能手機的廣泛使用導致了大量應用的發展。目前,智能手機系統的主文件是安卓系統和蘋果系統的主流,其中安卓系統的價格很受歡迎。使用的人數要比蘋果的手機使用的更多,安卓系統的源碼比蘋果系統來講更加具備開放性,因而也被更多的人喜愛,為其占據了廣大的人們的手機市場提供了比較良好的基礎。光說人們對于水果連連看的游戲的需要來講,還有對于使用安卓系統的人數越來越多來說,對于手機中的系統進行增加水果連連看這一游戲的必要性就有所提升了。
現在信息的高速發展帶來的是越來越多的應用軟件的出現,這些軟件迅速在手機這一新的市場領域中發展起來,應用到市場上的規模也越來越大了,使用者也在不斷增加中,人們往往想要在繁忙的工作生活中抽出一些空閑的時間,可以做自己喜歡做的事情,能夠減輕在工作生活中的一些壓力。然而這款游戲,水果連連看就能夠把生活的重擔暫時忘卻,減輕壓力。
1.2 研究現狀 最近針對這些有關互聯網中這種智能化進行了了解和調查,發現在一些比較零散的空余時間人們就會進行一些運用互聯網上的一些軟件進行獲取一些資料,比如微博、電子書中進行獲取一些信息或是玩一些游戲來消遣。而這些活動大多數都是在空閑時間完成的。目前這些互聯網已經和生活中的一切息息相關了。之前的4G時代的進行已經給人們帶來了很大的便利,也給未來的互聯網的巨大商機中獲得了很大的能量?,F在的網絡工作已經逐漸飽滿起來了,但是對于移動網絡的發展還未結束,還在發展中。而傳統的網絡巨頭也將注意力轉移到了移動互聯網上。
隨著我國近十年互聯網事業的飛速發展,手機在此之前都被視為一中新奇的事物,到現在手機幾乎已經是人們生活過程中所必須品,人們現在完全可以通過手機完成自己生活中幾乎所有的生活事物,隨著人們生活中對手機使用更為普遍,手機上的一些應用開發也成為了一個不可忽略的巨大市場。隨著人們的生活方式逐漸地從線下遷移到線上,通過對市場的調研,人們對手機上的一些娛樂應用比如說一些娛樂游戲等的需求量特別的大,所以本次開發的水果連連看有機游戲也非常的貼近用戶需求。
由于手機自身的靈活性,他不同于iPad,電腦等設備,手機應用可以說是隨時隨地任意場所都可以玩耍,由于現代手機模式的發展不僅僅是當作通信工具,他現在更是一個非常全面的生活工具,它所能覆蓋的場景幾乎包括了我們所有的生活場景,而且他的使用人人群也在不斷地擴展,幾乎從老到幼都能夠操作它,再加上人們的生活節奏又非常的快,所以這種小游戲的受眾也會很多,比如上班族,學習的學生等等 不同的職業,在他們不忙的時間都可以作為一種解壓的方式,所以研究開發水果連連看游戲是很重要的一個部分。
1.3研究內容 這個設計中的體系具有的一些知識有對安卓系統游戲開發的整體框架的結構的理解,并對其進行全面的刨析。在一個程序第一次進行開發的過程中,對于體系的分析也是非常重要的一個部分,想要讓設計出來的軟件更加能夠滿足人們的需要,就要做好預先的研究,本來的基礎之上,還要進行一些創新的功能再進行比較全面的講解,盡力找出更加全面的新的創新。
通過對系統的全面了解之后,進行了一個新的系統叫做水果連連看的游戲,主要的任務包括:
(1)事先調研分析的過程是了解整個應用軟件的研發方向所運用的。
(2)通過分析調研報告找出這個軟件需要開發的相關功能的種類。
(3)畫出預先設計的構思圖。
(4)寫出進行開發操作的技術相關的文件。
(5)對代碼進行研發并寫出所有代碼。
(6)系統測試,測試每個單元的功能。
1.4論文結構 本次項目是完成水果連連看手機游戲的設計與實現,模擬類似于網上那樣的連連看游戲,具體劃分如下:
第一章:引言。
主要對果連連手機游戲的簡單解釋。敘述該研究課題的現狀和意義。
第二章:關鍵技術。研究確定系統開發需要的相關技術。
第三章:體系刨析。重點研究系確定統的開發環境,以及可行性研究分析,還有就是系統流程的分析。
第四章:系統設計與實現。完成系統結構設計,uml用例圖的設計,開發流程的設計,數據庫設計以及游戲界面的設計。
第五章:系統測試。主要完成系統的總體測試運行以及每個單元功能的具體測試。
關鍵技術 2.1 Android簡介 目前來說,全球有兩大智能手機陣營,其中就包括Android操作系統。它背后的公司也是全球知名的谷歌公司,Android最初也不是谷歌公司自己的產品。Andy 創建的Android公司被谷歌公司在2005年給收購了。在2007年才對外展示了Android的手機操作系統,并且建立了全球性的聯盟組織,來共同研發和優化改良Android系統。2008年9月份谷歌公司發布了版本1.0 的 Android系統,由于谷歌基于Linux開發了自己的Java虛擬機,所以基于Android開發的原生軟件的編程語言就采用Java語言。目前來說Android的版本已經更新到9.0了,可以說迭代更新也是非常的快。
Android平臺的特性和優勢如下:
開源:Android系統完全是對外開源的,由于Android基于Linux系統開發的,所以從底層的系統到上層界面類庫等等都是完全對外進行開放,所以所有人群,比如個人以及一些組織都可以查看源代碼進行學習,這也導致目前流行的一些手機廠商如華為,小米,三星等都有對自己的系統進行了自己的個性化設置,各廠商為了競爭優勢也對一些功能進行了修改。
多元化的設備支持:現在的Android系統我們不僅僅只會在手機上應用,該系統的應用可以說是非常廣泛,比如平板電腦,現在流行的互聯網電視,智能手表以及車載導航儀都廣泛應用安卓系統,這樣以來對于Android開發工程師來說他們的就業范圍也是相當的廣泛。
Dalvik虛擬機和Sun VM的對比表:
Dalvik 基于寄存器 運行.dex后綴文件 對低速cpu性能較高 Sun VM 基于堆棧 運行.class文件 對低速cpu性能較低 總結就是Dalvik虛擬機對移動設備做了進一步的優化,采用寄存器對于較大的程序來說,他們的編譯時間會更短[2],占用的資源也會更少,運行的效率相對更高。Dalvik對低速cpu上的高性能,對內存的高利用率,使得他就非常適用于移動設備。
開放的第三方應用:由于谷歌秉承開源開放,所以在Android上開發和發布app相對更加容易,我們開發人員也可以根據自己的需求去調用一些手機的硬件設備,比如攝像頭,陀螺儀等,也可以父王問本地的一些信息等,所以Android的整個應用市場非常豐富。
集成的瀏覽器:由于內部集成了基于開源的瀏覽器引擎(WebKit)。再加上Android手機本身的功能,瀏覽網頁時的效果會更加的好。
SQLite數據庫:SQLite作為一款嵌入式數據庫,其主要的特點就是輕量級,占用資源率低,同時它還支持當前一些主流的操作系統,也可以和類似于Java這樣的編程語言結合??傮w來說SQLite是一個開放性的輕量級[3]數據庫。
多媒體的支持能力:多媒體支持包括常見的音頻文件、視頻文件和一些靜態文件格式。
2.2 開發平臺的搭建 JDK的下載與安裝 在百度搜索欄中輸入JDK下載關鍵字,找到自己需要的JDK版本正確下載,推薦一般下載1.8版本。當然其他版本也行,但是版本不要太低。
下載完成后點擊JDK,通過網上的一些步驟一步一步進行操作就可以安裝上了。接下來就是要給JDK配置一定的環境,在安裝步驟進行完畢之后,再重新查看是否安裝好了。再經過快捷窗口輸入自己安裝之后顯示的一些信息來重新審視一下自己是不是已經安裝成功了。
圖2-1驗證JDK安裝是否成功 Eclipse下載與安裝 Eclipse這個進行編程的軟件是屬于Java研發出來的,而且是開發的一個平臺,被很快應用在了很多地方,而且還包含了很多方面,例如添加了一些附件,還有一些自己研發的軟件(JDK)。
Android SDK的安裝 由于我們開發不是在專門的Android開發平臺下開發我們的水果連連看手機游戲,在測試過程中我們是通過數據線連接手機的方式去模擬程序的運行去情況,所以在這里我們不需要安裝SDK。
ADT的安裝(1)打開Eclipse軟件,點 “Help”進到菜單,找到“Install New Software”進去。
點Add…...,彈出Name和Location框,在Location輸入http://dl-ssl.google.com/android/eclipse。如圖2-2所示:
圖2.2 ADT的安裝(2)確定之后,可以顯示出Developer Tools。勾選這個選項之后點擊finish按鈕完成。
(3)確認安裝完成后,在主菜單下選擇Window下的Preferences項,再彈出來的界面找到Android這個選項,然后在右邊找到browse并選中SDK路徑(這里的路徑是自己安裝的路徑),確認無誤后點擊apply按鈕配置完成。
創建AVD(1)打開eclipse軟件,在主菜單中選擇Windows下的Android SDK and AVD Manager選項,找到彈出面板中的Virtual Devices項并點擊,點New,如圖所示,按照圖片配置相應的信息后點擊OK后配置成功。
(2)再運行新型的模擬裝置,選擇將要運行的模擬裝置,然后單擊“start...”;
再單擊“launch”。運行成功之后,如下圖所示:
圖2-3 模擬器 2.4 JSP技術 什么是JSP:JSP也被叫做java服務器頁面,它是基于Java語言的一種動態頁面技術,其邏輯是從servlet中分離出來的。在那種普通的網頁傳統上會是HTML或JS去寫的純靜態的或行對交互不多的頁面,jsp技術是在傳統的網頁代碼中插入Java程序段和JSP標記(tag),從而形成,后綴名為(*.jsp)的JSP文件。
為什么使用JSP:在動態網頁中其實多數頁面元素還是不動的,如果采用servlet輸出頁面中需要動態改變的內容,這就導致所有的靜態頁面的內容也都需要用java程序代碼生成。這樣以來整個servlet程序的代碼量會非常大,顯得程序非常臃腫。一般來說后臺開發的人員肯定沒有純前端開發人員和美工對頁面的設計那么專業,也不一定那么熟悉這些開發語言。所以sun公司推出了jsp技術來解決這樣的問題。
本次系統采用不同的程序設計語言去合作開發,采用合適的語言和技術做出最合適的事情。充分體現開發語言和技術的靈活性。本次系統采用Java的B/S結構作為系統實現的主要框架[4],也就是采用jsp開發語言。
JSP這一次運用的技巧就是運用Java語言來完成。運用XML類進行一些處理變成網頁。通過對網頁發送一些請求來進行訪問一些互聯網中服務器的一些信息的處理。在進行技術完善的過程中完全實現在設計上以及顯示的分離,能夠更加方便。發送請求再進行處理,這個過程很透徹。
2.5 數據庫 體系的技術開發使用的數據庫是MySQL,MySQL也是當下最流行的關系型數據庫之一。程序員可以通過多種編程語言和不同的數據庫驅動連接和訪問MySQL數據庫。MySQL關系數據庫管理系統越來越多的人喜歡用,應用范圍也越來越廣。
MySQL的優點 1.簡單易用 :MySQL 是一個高性能并且相對來說較為簡單的數據庫體系,和數據體系中的一些設定和管控來對比,這其中復雜的程度比較低。
2.價格 :MySQL目前也是市場上完全免費的數據庫系統。
3.小巧 :目前主流的幾個大型數據庫中,MySQL數據庫安裝成功后相對別的數據庫來說對內存的占用是非常小的。
4.支持查詢語言 :結構化查詢語言(SQL)MySQL數據庫也可以支持,當然,大多數數據庫現在都支持SQL語言。MySQL還支持不同的數據庫連接池連接。
5.性能 :MySQL可以支持多個方式同時連到服務器上。使用者的數量沒有什么限定,也就是說一個數據庫可以同時有多個用戶去訪問。MySQL也提供了幾個不同的可視化工具,使用戶可以很容易地操作數據庫。
6.連接性和安全性 :完全網絡化的MySQL數據庫,用戶可以在有網的情況下在任何地方任何時間連接數據庫并且進行訪問,該數據庫也提供了管理工具,通過它控制和優化數據庫的一些操作來控制數據庫的安全性。
7.可移植性 :目前社會流行的一些操作系統都可以連接訪問MySQL數據庫。因此 在不同的環境下都能夠使用該數據庫,所以其具有較的移植性。
8.速度 :根據市場用戶體驗反應,MySQL數據庫的運行速度也很快,所以越來越多的用戶選擇使用MySQL數據庫。
2.6?Tomcat簡介? Tomcat由Apache,個人及一些公司共同開發而成,目前是市場上運用最為廣泛的一款輕量級的服務器。其中最為主要的開源并且免費。其官網下載網址為http://tomcat.apache.org/。
Tomcat的使用也很簡單,一般的開發平臺軟件基本上都有自己版本的Tomcat,通常用戶下載和安裝更高版本,安裝完成后,通常配置系統的環境變量。配置完成后,在瀏覽器的網址中輸入http://localhost:8080/,啟動服務器,然后打開瀏覽器,出現以下屏幕指示配置成功。系統分析 體系刨析能夠讓我們針對設計的體系能夠具有更加全面的了解,對于體系進行全面的了解之后可以更加確定將要了解的方向,確定可以進行的辦法,經過體系的刨析來讓我進行最后的解決辦法,幫助設計出更加合適的體系。
3.1 系統設計目標 設計這款連連看的手游的時候,需要確定下面的一些信息:
可靠性:科技發展的時代,伴隨著各種信息陷阱,所以我要保證信息的安全性。
先進性:首先要了解現代人們的審美和個性化需求,采用市場流行的技術,研發一些比較適合現代人們的游戲。
延展性:這次對于游戲的開發過程中,一定會帶來一些不同的游戲感受,所以開發這個游戲中的一些游戲的功能中,能夠感受到這個軟件的延展性,可以進行升級。
可行性:包括一些功能方面的有效果的性能,能夠更加充分的滿足這些用戶的要求。
3.2 可行性分析 體系對于可以實行的操作能夠更加全面的了解。經過全面的體系的刨析,可以確定最終研究的標準,尋找能夠執行的方式,可以確定最終的解決方案,設計出一個更合乎情理的體系。
3.2.1 操作可行性分析 這個水果連連看的手游是安卓系統,方法非常簡單,如果可以更加熟練進行使用這個智能化的手機,打開這個軟件,就可以選擇自己想玩的游戲模式進行游戲的玩耍,也可以查看所有玩家的分數排行榜等,操作簡單,完全可行。
3.2.2 技術可行性分析 首先。我們本次開發水果連連看游戲開發采用的是安卓開發,然而安卓是基于Java的一個開發環境,這對于我們來說很友好,因為它相對于C/C++語言,Java編程語言更易于使用,而我們的開發環境是Eclipse開發環境,這對大家來說比較熟悉,而我們不需要安裝Android開發軟件,只需要在Eclipse上安裝相應的插件就可以獲得Android SDK。因此,從技術上開發該系統是可行的。
3.2.3 經濟可行性分析 因為這個開發平臺是Eclipse,使用的數據庫是MySQL數據,然而兩者都是免費的平臺,所以在經濟上不會有太多的付出,所以經濟上可行。
總之,連連看這個手游還是比較可靠的。
3.3系統流程分析 調查分析系統所涉及到的每個環節的業務流程是要在系統流程分析中體現出來,用具體的用戶的需要以及涉及的一些功能方面的要求作為標準。掌握具體的操作流程的一些信息,對于輸入信息以及輸出一定要保證具有很強的準確度,而且能夠確保全部的體系數據庫中一些信息足夠完整對于信息處理也更加精準,以用戶具體的需要來繪制程序圖。
3.3.1注冊流程 對于沒有注冊過的客戶要進行相關操作,應該按照下面的流程進行。
圖3-2注冊信息流程圖 3.3.2登錄流程 新用戶進行注冊之后,可以再系統中輸入一些用戶的名字還有一些密碼。按照下面的流程進行操作。
圖3-3 登錄流程圖 3.3.3 操作流程 完成操作之后,進到游戲里開始玩這款游戲。用戶玩游戲最開始,要在設定好的時間內完成所有任務,才能進入下一關。假使規定時間內無法消掉所有的圖形的話,就會失敗。操作流程如下:
圖3-4系統操作流程圖 3.3.4 游戲詳細過程流程 客戶進行游戲中,如果選擇的兩個圖案是相同的,那么就可以被消除,體系會自動判別這個圖案是不是一樣的,如果是就會把它消掉,如果不是就不會消掉。如果設定時間內完成了對全部圖案進行消除,就可以進入下一個關卡,如果不行,表示失敗。如圖3-5所示是這個游戲的解讀。
圖3-5 游戲詳細過程流程圖 3.4系統運行環境 硬件:安卓智能化的手機 軟件:Android2.2版本及以上 用具研發:Eclipse 數據庫:MYSQL 4、系統設計與實現 4.1系統結構設計 整體體系的設計就是把一個很大的任務劃分成若干個比較小的任務,并且分階段完成并且把這些任務結合起來形成一個完整的任務。具體操作流程:
(1)體系被劃分成很多模塊(2)將每個小模塊進行先預設計(3)小模塊之間的聯系形成一個模擬的關系的設計(4)每個模塊之間進行界面的設計以及之間信息的傳遞的設計 整體對于這個游戲的設計過程中,為了確定比較精確的設計的方案來完成每個小的方案的一個目的,針對每一個小的目的來說,一定要事先了解到一些相關的需要的資料信息。再進行設計方案的實行,并逐漸對它進行優化,再設計出來一個可以實施的系統的結構。
在最完整的設計過程,想要將每個小的模塊的目標完成的具體要進行實施的方法,針對每個小的目標,第一步要解決的就是有關的對于需求量的分析。再初步設計,逐步優化。
這次安卓系統的手機中水果連連看的游戲的結構圖如圖4-1所示。
圖4-1系統結構圖 4.2系統UML用例設計 UML的建模表達方式也是每一個程序員應該掌握的一種建模語言,UML建模也是每一個項目必須的一個設計流程,他可以把我們理解的一個抽象的對象或者是類用建模的形式標記,同時負責開發的人員也可以通過它來了解系統想要的功能以及對整個系統流程多前期工作。以下就是我對水果連連看有績效游戲的UML建模分析。
本Android水果連連看手機游戲主要功能包括:注冊,登錄,娛樂模式,極速模式,進階模式,排行榜。
圖4-2 系統用例圖 4.3系統開發流程設計 進行要發構思這個手機連連看的時候,要先對產品進行研究,然后構思規劃一下軟件的整體框架,然后填充軟件的內容以及進行檢測,設計出來的成果的流程如下所示。
圖4-3 軟件設計流程圖 4.4數據庫設計 一個設計成熟的資料庫能夠影響到軟件開發程度的好壞,而信息資料庫的構思取決于結構表的構思,以及圖標間的聯系,以及系統開發需要設計的數據表內容等信息。設計信息資料庫的時候,需要足夠的時間來進行構思,才能設計出一個完美的信息資料庫。
4.4.1 數據庫E-R圖設計 E-R圖是一種表示明確信息種類之間聯系的一種圖形方法,能夠在整體方面顯示出現實與虛擬之間的聯系。圖里比較主要的東西就是實體、聯系與屬性。該圖即由這些因素組成。本Android水果連連看手機游戲的E-R表如圖顯示:
(1)玩家數據具體屬性E-R圖如下4-4所示:
圖4-4用戶信息實體E-R圖(2)分數數據實體屬性E-R圖如下顯示:
圖4-5分數信息實體屬性E-R圖 4.3.2 數據庫表設計 本游戲的鏈接郵箱使用的是MYSQL數據庫管理軟件,基本信息庫表明細數據如下:
表4-1 users用戶信息表 字段名 數據類型 是否允許空 字段含義 id int(11)NOT NULL 編號 name varchar(255)NULL 用戶名 password` varchar(255)NULL 密碼 dates varchar(20)NULL 注冊時間 表4-2 scores分數信息表 字段名 數據類型 是否允許空 字段含義 id int(11)NOT NULL 編號 name varchar(255)NULL 用戶名 score` varchar(255)NULL 分數 dates varchar(20)NULL 注冊時間 4.5界面設計 次游戲的主界面構思方案如下所示:
4.5.1 注冊登錄界面 玩家需要輸入自己的ID,密碼并且確認密碼是否正確然后即可登錄游戲,其界面如圖4-6所示 圖4-6 注冊登錄界面圖 private void loginEvent(){ if(!isLogined){ String name=mLoginUserEdit.getText().toString();String password=mLoginPasswordEdit.getText().toString();if(name!=null&&password!=null&&name.length()>0&&password.length()>0){ loginHttpClient(name, password);}else { showTip(“請填寫完整用戶名和密碼!“);} } } private void registEvent(){ String name=mRegistUserEdit.getText().toString();String password=mRegistPasswordEdit.getText().toString();String passwordone=mRegistPasswrodmorEdit.getText().toString();String phone=mRegistCodeEdit.getText().toString();if(phone!=null&&password!=null&&passwordone!=null &&!phone.equals(““)&&!password.equals(““)&&!passwordone.equals(““)){ if(password.length()>5&&passwordone.length()>5)if(password.equals(passwordone)){ registHttpClient(phone, password);}else {showTip(“兩次密碼都不同“)} }else {showTip(“密碼必須高于6位數“)} }else {showTip(“請填寫完整信息“);} } 4.5.2 游戲界面 用戶可以選擇娛樂模式,極速模式,進階模式進行開始游戲,其界面如圖4-7所示 圖4-7 游戲界面圖 private void tounchEvent(Context context){ this.context=context;this.setOnTouchListener(new OnTouchListener(){ public boolean onTouch(View v, MotionEvent event){ switch(event.getAction()){ case MotionEvent.ACTION_DOWN: performClick();float x=event.getX();float y=event.getY();if(isFail==false){ downPic(x, y);} invalidate();break;case MotionEvent.ACTION_MOVE: performClick();float x1=event.getX();float y1=event.getY();invalidate();break;case MotionEvent.ACTION_UP: performClick();invalidate();break;}return true;} });} private boolean ispause=true;public void resetevent(){//重置參數 ispause=false;} 4.5.3 排行榜界面 用戶可以點擊查看排行榜信息,設置該功能的意義在于讓玩家自我評定一下自己的游戲能力,看到自己以及別人的分數,使其有了彼此的對比,增加游戲的樂趣性。其界面如圖4-8所示 圖4-8 排行榜界面圖 該排行榜顯示數據庫中系統部分排名靠前的一些用戶信息,包括用戶名和分數等字段的信息。
系統測試 5.1測試定義 軟件檢測的目的是為了鑒別軟件運行是否有問題,編寫的代碼有無差錯以及功能設定是否達到要求。軟件檢測是一個游戲能否成功發行的重要步驟。即便游戲的設計理念天衣無縫,在進行軟件檢測的時候也會有很多沒有被注意到的缺陷存在。
所有的軟件開發都要有檢測這一過程,主要是為了找出其中的差錯,將玩家的需求和軟件客戶的標準的差距進行協調,并且協商好這些矛盾,才能制作出一個讓更多人滿意的水果連連看手機游戲。
軟件檢測應該經常進行,才能夠及時糾正開發過程中出現的錯誤,提高軟件開發的效率。判斷軟件是否達標不但要看軟件編碼是否有誤,還應該考慮系統構思以及歷史環境。軟件缺陷,可能是代碼編寫有誤,還有可能是設計過程中的瑕疵與錯誤,亦或者是在需求研究的過程中出現了差錯。從現實角度出發,一開始或許只是一個小失誤,但是就像多米諾骨牌一樣,一步錯步步錯。所以要及時進行安全測試,及時發現錯誤并且改正,有效防止后面出現更大的錯誤。在進行軟件檢測的時候,設計者應該多為玩家考慮來進行軟件開發,監測方法為黑盒檢測。檢測是為了游戲的畫風符合玩家的審美,構思的版面與風格一致。另外,升級版的游戲更加完美,更加能夠獲得玩家的一致好評,同時還要對游戲的設計進行合理規劃。
5.2測試目的 (1)以設計人的角度來講,目的其目的在于測試軟件能否正常運行,以此來保證玩家的擁護。想要自己的游戲能夠達到玩家內心滿意的程度,按照他們內心所想的進行,比如說不同的客戶對軟件的目標、可行性和安全性的要求也不一樣。達到了這一要求我們才能精準定位到缺陷所在,并且早日糾正。
(2)從玩家方面來看,在他們的日常使用過程中,就可以發現游戲的很多不足之處,并不是說一個發行的軟件就沒有錯誤。
(3)在客戶需求的方面出發,則必須思考系統在運行的時候可能會產生的紕漏,并且提前解決好或者做好準備,由此來增加客戶的信任度以及好感度。
檢測軟件的易用性、兼容度、穩定程度以及可用性等方面,及時為玩家的建議解答疑惑。然后將檢測后的軟件進行深度分析,從而方便未來進行持續升級。
這個游戲的設計只有在安卓的手機上才能夠正常使用,主要為了服務于廣大玩家,因此要做到的是想玩家之所想,做出令廣大玩家滿意的游戲,這就需要我么及時采納玩家的建議對產品進行不斷地升級更新,致力于讓廣大玩家們滿意。
5.2 性能測試 軟件使用性檢測一般是進行虛擬軟件運行,從而來檢測軟件運行是否達到預期目標。所需要的技術一般為:軟件運行速度,軟件打開的速度。
軟件檢測一般進行如下檢測:安全性、依從性、可操作性、準確性以及適用性能。具體數據如表5-1所示:
檢測項目 檢測結果 依從性 好 適用性能 好 可操作性 好 安全性 較好 準確性 好 表5-1 軟件性能檢測 5.2.1單元檢測(1)如下測試的是用戶注冊信息的數據庫同步測試,用戶按照正常流程填寫用戶注冊信息后,點擊注冊按鈕之后用戶數據就會同步保存到數據庫中。測試結果如下圖5-1所示。
(2)如下要測試的是玩家在玩關卡時所得分數,結束關卡后將用戶所得分數保存到數據庫中。測試的結果如圖5-2所示 5.3 測試結果分析 因為之前也沒有開發這種Android游戲的項目經驗,整個游戲的流程以及一些游戲流程也是在網絡上找了一些類似的游戲去體驗和總結他們的游戲流程。在代碼實現那一塊,在剛開始的時候也出現了一些各種各樣的系統漏洞。在最開始的整個工程中,測試的時候發現自己書寫的代碼與自己設想的結果不一致。尤其是在游戲繪圖方面,本來保證的是每個水果圖片都是偶數個,結果測試了幾次發現還是有奇數個圖片的情況,在經過幾次測試之后最終也找到了問題并且要修改測試通過了。還有就是在數據庫方面,用戶的排名方面總是與數據庫的數據不能夠同步。最后發現數據庫的數據沒有同步更新。雖然在測試的過程中出現了很多問題,但是也是每個項目必然會有的問題,所以在我反反復復的測試和修改之后這些問題也都通過了。在整個項目完成開發完成之后,統一測試的時候發現就沒有那么多問題了。在整個測試過程中也發現了一些自己開發的陋習,比如命名不規范等。
通過游戲進行進行檢測研究,保證游戲的可玩性能夠達到更多玩家的滿意。能夠擁有充足的新鮮感,并且不會因為操作太過復雜導致玩家棄游,基本不存在技術上的缺陷,還是值得大家一玩的。
結 論 因為這么長時間研究水果連連看的運行方案,所以對于軟件的運行具有了一定的了解,在游戲的開發當中,我們應該先對該方案有一個精準的認知,正確的定位,了解其目的,才能夠繼續對其功能進行開發,進而對細節進行雕琢,從而一步步的進行下去直至游戲研發成功。對于這一系列步驟,我銘記于心。與此同時,還豐富了我對軟件開發的知識,這一路走來收獲頗豐。
想要設計一款成功的游戲,就必須懂得軟件開發的程序,對這方面的信息進行研究學習。然后弄懂其中的原理,接下來盡心整體構思,填充細節、進行編碼,最后還要進行終極檢測,如果檢測成功,即可完成。隨著游戲開發的成功,內心的自豪感油然而生,沖談了工作時所有的壓力與苦悶。
在學習與操作中跌跌撞撞的行走著,最終設計也步入尾聲了。開發的水果連連看基本已經完成,即便稍有瑕疵,卻也是包含著我所有的靈感與愛的結晶。當然它還有很大的進步空間,我的學業隨著設計的結束亦走到了尾聲,我希望能夠親手為它寫下一個圓滿的結局。在進行研發的時候,因為實踐讓我學到了許多之前并不了解的知識,能夠有機會發揮自己的想象力,展示自己的實力。由此我懂了并不是學習好就一切都好的,重要的還是要不斷地進行實踐。雖然也曾有挫折困苦,但我從未想過放棄。在不斷糾錯的過程中我得到了很多的寶貴經驗,是我人生中的財富。
在對游戲進行研發的不斷摸索的進程中,讓我了解到了許多之前在課上沒有觸及到的東西,學到了很多實戰中才會得到的經驗,認識到自己還有很多不足。當今時代計算機網絡發展迅速,其涉及范圍也非常廣闊,如果想要不被該領域所拋棄,所以就要求我們必須加倍努力學習,通過實踐不斷充實自己。即便面臨畢業,我也不會停下我學習的腳步,日后不論在哪里,都不能驕傲自滿,要隨著時代的發展不斷進步,不能被世界所拋棄。
致 謝 經過這么長時間的艱苦奮斗,我也終究是要畢業了,在這里必須要真誠的謝謝我的知道老師,這次畢業設計能夠順利完成離不開指導老師朱惠娟老師的細心教導,在這整個過成中,老師也為我提供一些解決方法,比如畢設需要完成的內容,畢業設計的一些格式方面的修改等,尤其非常感謝老師在我們畢業設計上面的一些知道,由于我的畢業設計項目是我之前從來沒有接觸過的項目,在一開始對項目沒有什么概念,在老師的指導下也提供了一下解決方案,比如讓我去網上找一些相似的游戲去試玩體驗總結 該類游戲需要完成的功能,聽從老師的建議通過在網上試玩了一些類似游戲,終于找到了靈感,對自己的畢業設計項目需要有的功能模塊以及功能流程有了初步的了解。在這個工程中,也讓我對這種沒有概念的問題學會了一些解決的方法。在次特別感謝我的指導老師。
然后,也要感謝學校四年的培養,由于之前也開設了Android開發的課成,Java課程以及Web課程,使得在項目開發的這個過程中所用到的一些開發語言都有熟練的掌握,使得在開發的難度上降低了很多。
參 考 文 獻 [1] 佐冰冰.Android平臺下Launcher啟動器的設計與實現[D].哈爾濱工大,2012.[2] 張利國,代聞,龔海平.Android移動開放案例詳解[M].北京:人民郵電出版社, 2010.[3] Rafael Ufology.GOOGLE ANDROID MARKET[J].Computer Canada,2009,25(13):24-25.[4] 陳立偉,張克非,黎秀紅.精通JAVA手機游戲與應用程序設計[M].北京:中國青年出版社,2005.[5] E2Ecloud 工作室.深入淺出 Google Android[M].北京:人民郵電出版社,2009.[6] 熊剛.基于Android的智能手機的設計與實現[D]:[碩士學位論文].武漢:計算機應用技術系,2010.[7] 余成鋒,李代平.Android3.0 內存管理機制分析[M].計算機應用軟件,2013.[8] 楊云君.Android 的設計與實現[M].北京:機械工業出版社,2013.[9] 明日科技.Android從入門到精通 [M].清華大學出版社.2012.9 [10] 孫宏明.Android手機程序設計入門運用到精通 [M].中國水利水電出版社.2012.[11] 余成鋒,李代平,毛永華.Android3.0 內存管理機制分析[M].計算機應用與軟件,2013.[12] 郭志宏.Android應用開發詳解[M].電子工業出版社.2010.[2] 楊豐盛.Android應用開發揭秘[M].機械工業出版社.2010.[13] 姚昱旻,劉衛國.Android的架構與應用開發研究[J].計算機系統應用,2008,24(11):3-7.[14] 楊豐盛著.Android應用開發揭秘[M].北京:機械工業出版社,2010.96.[15] W.Frank Ableson(美)Charlie Collins RobiSen(美)著.張波,高朝勤,楊越譯.Google Android揭秘[M].北京:人民郵電出版社,2010:2-7.[16] 朱桂英.Android開發應用從入門到精通[M].北京:中國鐵道出版社,2011:21.[17] 余志龍,陳昱勛,鄭名杰等著.Google Android SDK開發范例大全[M].北京:人民郵電出版社,2010:2.[18] 郭宏志著.Android應用開發詳解[M].北京:電子工業出版社,2010:96.
第二篇:水果兒童游戲
2011.3.13親子活動:水果寶寶
練湖中心幼兒園 毛夕鳳
一、親親熱熱《寶貝在哪里?》
活動目標:
1、能夠大膽介紹自己,愿意積極參與活動。
2、培養增進與教師之間的情感。
活動準備:家長帶孩子入座前帶孩子小便,安撫幼兒情緒。為上課做準備?;顒舆^程:
師:寶貝們好!幼:老師好!
師:準備點名字。幼兒:我就 點名字。
師:XXX 你在哪里???幼:我在這里??!大家好!師:寶貝。真棒!來親一親或抱一抱。
家長提示:引導并鼓勵幼兒大聲地介紹自己。
二、說說唱唱《分果果》
兒歌:大蘋果,大大大。小蘋果,小小小。小蘋果小,給寶寶。大蘋果大,給媽媽。
目標:
1、認識蘋果、香蕉并能完整的說出他們的名字及顏色。
2、能夠積極參與活動,體驗學習的快樂。
準備:2種水果的圖片,放圖片的小簍子人手一個 過程:
師:今天老師給小朋友帶來了一個魔術袋子,想知道,里面是什么嗎?看老師來變、變、變?。ń處熢谝粋€魔術袋中變出了一個蘋果的圖片)
1、認識蘋果,師:這是什么啊?(蘋果)請幼兒大膽地說出蘋果的名字。師:蘋果是什么顏色的啊?學會說:“紅紅的蘋果”。
2、第二次變出一個小的紅蘋果。
師:這兩個蘋果一樣嗎?(區分大、?。?/p>
3、學習兒歌
師:這兩個蘋果如果給寶寶和媽媽吃的話,大的應該給誰吃?小的又應該給誰吃?
4、學習兒歌
教師示范后,幼兒學習兒歌。
家長提示:幼兒在認識水果的時候,鼓勵他們大聲地說,積極參與活動,在家長與幼兒一起認讀環節,能夠和幼兒一起認知,幫助幼兒復習鞏固。鼓勵幼兒大聲念兒歌)
三、開開心心《小兔跳圈》
目標:
1、發展幼兒的大肌肉及下肢活動,學會跳。
2、愿意積極參與活動,體驗游戲的快樂。
3、體驗親子游戲的快樂,增進親子情感。準備:圈 過程:
小朋友們坐了這么久累了嗎?我們和爸爸媽媽一起來做個游戲吧!
1、家長站在圈內,幼兒在兩米處學小兔子,雙手和家長一起跳圈。
2、把小圈擺成圓形,播放音樂,幼兒和家長一起跳圈。
3、鉆小圈。家長把圈圈豎起來,幼兒鉆小圈。
家長提示:和幼兒一起參與活動,帶領幼兒一起游戲,運用多種形式方法,使幼兒得到鍛煉。
三、玩玩做做《水果排序》
活動目標:
1、鍛煉幼兒小肌肉的發展
2、感知規律,能大膽的動手操作
3、體驗活動的快樂
活動準備:標記圖 水果圖片 活動過程:
1、水果交替排序
師:今天不光蘋果寶寶來到了,瞧,香蕉寶寶們也來了,老師來幫他們排排隊。教師邊操作邊講解操作過程。
教師示范水果排序:一個蘋果、一個香蕉、一個蘋果?? 師:寶寶,我們一起來說說他們是怎么排隊的。
2、幼兒操作
3、所有幼兒做好后,教師給每個幼兒笑臉花獎勵。
4、讓幼兒把材料送給老師,有序擺放。
家長提示:盡量讓幼兒自己動手做,家長給與適當的幫助。
五、蹦蹦跳跳《快來吧》
目標:
1、通過游戲鍛煉寶寶跳的運動能力。
2、體驗愉悅的情感。準備:音樂《快來吧》
過程:
1、教師教幼兒簡單的動作。
2、配上音樂示范。
3、和幼兒一起蹦蹦跳跳。
快來吧,我們一起游戲,快來吧,我們一起跳舞??靵戆?,我們一起拍拍,快來吧,我們一起跳跳。伸出你的雙手拍拍,抬起你的雙腳跳跳。拍拍你的屁股扭扭,高興你就大聲嗨嗨。快來吧,一起扭扭扭,快來吧,一起嗨嗨嗨。家長提示:讓幼兒積極參與,動起來。
六、放松活動
教師帶領幼兒和家長一起放松,放緩慢,輕柔音樂。親子間相互拍打。拍一拍,輕輕拍,重重拍。揉一揉,輕輕揉,重重揉。捏一捏,輕輕捏,重重捏。
注意引導家長和幼兒相互拍打,放松。
七、結束活動
播放音樂《再見》引導幼兒和老師,其他家長相互說再見。
第三篇:五子棋游戲總體設計與實現
4.系統總體設計與實現
4.1 總體設計分析
總體設計是軟件開發過程中的另一個重要階段,在這一階段中將根據需求分析中提出的邏輯模型,科學合理地進行物理模型的設計。這個階段的主要目標是將反映用戶信息需求的邏輯方案轉換成物理方案,并為下一階段提供必要的技術資料。
4.1.1 總體設計原則
(1)整體性:軟件是作為統一整體而存在的。因此,在總體設計中要從整個軟件的角度進行考慮。
(2)靈活性:為保持軟件長久的生命力,要求該手機游戲軟件具有很強的環境適應性。為此,游戲軟件應具有較好的開放性和結構的可變性。
(3)可靠性:可靠性是指軟件抵御外界干擾的能力及受外界干擾時的恢復能力。
(4)經濟性:經濟性是指在滿足游戲軟件需求的前提下,盡可能地減小游戲軟件的開銷。
4.1.2 軟件模塊總體設計
軟件中各模塊之間的關系通常利用層次圖來表示。它是一種一系列多層次的用樹形結構的矩形框描繪數據的層次結構框圖。一個單獨的矩形框作為樹形結構的頂層,各個數據的子集由下面的各層矩形框代表,最底層的各個矩形框代表組成這個數據的實際數據元素(不能再分割的元素),它代表完整的數據結構。這模式非常適合于需求分析階段的需要,層次方框圖對數據結構描繪隨著結構精細化也越來越詳細。反復細化沿著圖中每條路徑,從對頂層信息的分類開始,直到確定了數據結構的全部細節為止。
開始游戲重新游戲游戲選項悔棋認輸五子棋游戲背景音樂退出游戲先后手設置游戲設置棋盤底紋設置棋盤大小設置游戲幫助幫助關于 圖4-1 游戲功能結構
本研究中將游戲軟件分為三大模塊,如圖4-1所示,包括:游戲選項、游戲設置和幫助。按照在調研中搜集的資料對每個模塊的功能進行編排制作。依據上述功能的分析,本研究中,將游戲軟件在三大模塊的基礎上又對每一大模塊又分為幾個子模塊:
游戲選項包括六個模塊:開始游戲、重新游戲、悔棋、認輸、背景音樂和退出游戲。
游戲設置包括三個模塊:先后手設置、棋盤底紋顏色設置和棋盤大小設置。
幫助包括兩個模塊:游戲幫助和關于。
4.2 游戲設計
4.2.1 游戲前的準備
本游戲在開發之前需要做一些前期準備工作,尤其是對于精通五子棋游戲的Java 游戲開發者來說。通常情況下,一款運用起來比較熟練地 J2ME 開發工具
是必不可少的。本游戲使用的是J2ME的簡化開發工具 Sun Java(TM)Wireless Toolkit 2.5.2 for CLDC,他需先將Java虛擬機安裝調試好之后才能使用。WTK 2.5.2 不帶有文本編輯功能,所以需要另尋搭配使用。本游戲采用 Ultra Edit 進行編輯。本游戲需要幾張后綴名為.png格式的卡通圖,除了一張用作五子棋游戲的 Logo 外,其余的都將在游戲中使用。4.2.2 游戲界面和事件驅動設計
游戲的界面設計采取傳統游戲界面風格,如圖4-2所示。游戲設計中采用傳統界面游戲風格,首先啟動游戲,然后進入游戲開始界面,界面中放置“設置”、“開局”、“幫助”、“關于”四個選項供玩家選擇。其中“設置”選項主要是對游戲的相關功能進行設置,如游戲難度設置。另外還有“悔棋”、“重玩”等項目的設置。除此之外還包括查看游戲幫助、游戲介紹等。
圖4-2 游戲界面設計
所謂事件驅動,簡單地說就是你點什么按鈕(即產生什么事件),電腦執行什么操作(即調用什么函數)。當然事件不僅限于用戶的操作。我們知道,事件是事件驅動的核心自然是。從事件角度說,一個事件收集器、一個事件發送器和一個事
件處理器組成了事件驅動程序的基本結構。事件收集器專門負責收集包括來自硬件的(如時鐘事件等)、來自用戶的(如鍵盤、鼠標事件等)及來自軟件的(如應用程序本身、操作系統等)的所有事件。將收集器收集到的事件分發到目標對象中則由事件發送器負責完成。具體的事件響應工作則由事件處理器完成,它需要運用虛函數機制(函數名取為類似于 Handle Msg 的一個名字),它往往要到實現階段才完全確定。事件處理器對于框架的使用者來說是他們唯一能夠看到的。棋類游戲通常具備兩個重要特性,首先是對戰雙方輪流落子,其次是落子間隔通常是不確定的,尤其是對戰后期,可能每一步棋都要經過深思熟慮,無論是人還是計算機,都無法對時間間隔有事先的預期?;谝陨蟽蓚€特性,本游戲摒棄了大多數游戲采用的線程或定時器驅動游戲的方法,而采用了事件驅動的方法,即玩家的鍵盤或觸摸筆觸發游戲的下一個動作。事件驅動大大減少了不必要的工作量,只有玩家發出消息時,計算機才啟動運算,而在玩家思考期間,計算機不做任何運算和重繪操作。4.2.3 游戲的類設計
五子棋游戲屬于二維棋類游戲,因此可以定義一個 Chesses 類來表示棋子,用一個 Chess 類型的二維數組來包含棋盤上的所有棋子,對于該棋子玩家的區分使用Chesses 的 boolean 型的變量 is Player1 來區分??梢钥紤]直接生成數組的每一個對象而不是在數組建立后,而是把每一個棋子對象(Chesses)放在游戲的進行中生成,這主要是考慮到移動設備的資源有限,盡可能減少系統資源占用。這樣在游戲進行時,可以避免還沒有下的棋子在一開始就占用了系統內存,玩家每下一步棋,在數組相應位置生成該棋子的對象。
對于游戲中的每一類的設計,首先就是一個 MIDlet 類,Gobang 類繼承自MIDlet 類,通過方法 start App,pause App,destroy App 來通知游戲的開始,暫停和銷毀結束,用于連接設備的應用程序管理器(Application Manager)。
本游戲共由7個類組成,它們各自的功能如下:
(1)Gobang MIDlet類
負責程序的啟動和屏幕之間的切換;
(2)Gobang Canvas 類
玩家的對戰平臺,他繼承于 Canvas 類;(3)Setting 類
用于創建游戲的各項設置參數表單;
(4)Gobang Logic 類
游戲的邏輯類,負責勝負判斷和計算機落子;
(5)Dot 類
棋子類,包含了棋子的位置信息;(6)Help 類
游戲的幫助類,包含五子棋的一些常識信息和五子棋教學內容;(7)About類
游戲的關于類,包含游戲的版本、版權等信息。各個類之間的關系如圖4-3所示:
圖4-3游戲類設計
4.2.4 游戲的流程設計
對于棋盤界面的更新,游戲進行繪制棋子時是按照棋子的二維數組來完成的,玩家下棋后,設置is Player1 值,程序修改數組相應位置,然后重新繪制(repaint)。為了使游戲的操作盡可能的簡便,本文設計上不在游戲進入時設計菜
單,玩家可以直接開始對戰,而是在開始游戲的過程中設置重新開始和退出的按鈕。即一鍵開始,運行即玩,重來或退出都使用一鍵操作。游戲流程的設計依據主要是游戲的界面設計和游戲的類的設計。游戲啟動時,Gobang MIDlet 對象先顯示游戲的主屏幕,在屏幕下方一側是出軟鍵(軟鍵指描述抽象客戶端設備如何顯示),另一側是用軟件構成的菜單,菜單元素主要有“開局”、“游戲設置”、“游戲幫助”、“關于”選項。當玩家選擇“游戲設置”軟鍵時,則顯示游戲參數設置表單;當玩家選擇“開局”軟鍵時,則顯示游戲對戰主界面;當玩家選擇“游戲幫助”軟鍵時,則顯示游戲幫助表單;當玩家選擇“關于”軟鍵時,則顯示游戲關于表單。玩家進入游戲參數設置表單,當玩家按下“確定”軟鍵時,則確認當前游戲參數,返回游戲主屏幕;當玩家按下“取消”軟鍵時,則放棄此次對游戲的修改,直接返回游戲主屏幕。玩家進入游戲對戰畫布,對戰中畫布有兩個軟鍵,當玩家按下“返回主菜單”軟鍵時,則退出游戲到達游戲主菜單;當玩家按下“悔棋”軟鍵時,則進行悔棋操作;當游戲結束時,“悔棋”軟鍵被換成了“重玩”軟鍵。玩家進入游戲介紹表單,當玩家按下“確定”軟鍵時,返回游戲主屏幕。4.2.5 游戲算法的設計
1、五子棋的獲勝組合
有哪些獲勝組合是在一場五子棋的游戲中計算機必須要知道的,因此,獲勝組合的總數必須要求得。在本文中我們假定當前的棋盤為15*15:
(1)每一列的獲勝組合是11,共15列,計算水平方向的獲勝組合數,所以水平方向的獲勝組合數為:11*15=165。
(2)每一行的獲勝組合是11,共15列,則可計算垂直方向的獲勝組合總數,垂直方向的獲勝組合數為:11*15=165。
(3)同理,可計算正對角線方向的獲勝組合總數,正對角線上的獲勝組合總數為11+(10+9+8+7+6+5+4+3+2+1)*2=121。
(4)計算反對角線上的獲勝組合總數。計算反對角線方向的獲勝組合總數可計算為11+(10+9+8+7+6+5+4+3+2+1)*2=121。這樣可計算得所有的獲勝組合數為:165+165+121+121=572。
2、設計獲勝棋型
通過上面的計算,一個15*15的屋子棋盤在此已經計算出了會有572中獲勝方式,因此,我們就可以利用數組建立一些常規棋型,棋型的主要作用是:
(1)判斷是否有任何一方獲勝;
(2)根據當前格局判斷最可能的落子方式。
然而在現實中,高手留給我們的經驗就是把握前奏,如“沖四”、“活三”,除了“連五”以外,這些也是同向勝利的捷徑。
3、攻擊與防守
獲勝棋型的算法是中性的,不區分計算機和玩家,這就涉及到攻擊和防守何者優先的問題。而許多高手都認為五子棋的根本是“防守”,“攻擊”是靈魂。進攻是取勝的手段,是防守的延續和發展。許多經驗和研究表明,一個棋手只要掌握了全面的、基本的防守原理和技巧,就能和比自己棋力高一個等級的進攻型選手對抗,起碼能立于不敗之地。對手進過越偏激,則防守的效果越好。沒有進攻的防守就像只開花不結果,沒有實際意義,頑強的防守是反攻的前奏,沒有進攻的延續,防守也失去了價值。而這缺一不可。根據以上原理,計算機在接受最佳的攻擊位置之前,還要計算當前玩家的最佳攻擊位置。如果玩家存在最佳攻擊位置,那么計算機就將下一步的棋子擺在玩家的最佳攻擊位置上以阻止玩家的進攻,否則計算機便將棋子下在自己的最佳攻擊位置上進行攻擊。
4、用到的典型算法(1)坐標變換算法
游戲的實質其實是對所下棋子的位置進行操作和判斷,因此將己方、對方以及棋盤上空點的位置坐標存儲在相應的List中。我對所下棋子的坐標進行了處理,因為我所采用的棋盤為15*15,所以棋子橫坐標為0到14的整數,縱坐標也為0到14的整數。因此,每次在棋盤上下子之后,計算機在存儲該點的坐標時,便要對坐標進行加工。假設左上角點為firstPoint,它的實際坐標為(x1,y1),而我是將它作為(0,0)存儲的,其它的坐標,其它點都是以該點為標準進行變換的,假設棋盤上每個格子的寬度為w,某實際點為(x2,y2),變換后的坐標為(x,y),x=(x2-x1)/w,y=(y2-y1)/w。
(2)勝負判斷算法
勝負判斷的規則很簡單,就是判斷游戲雙方的棋子在同一條水平線、同一條豎線或是同一條斜線上誰先出現5個連續的棋子,誰先達到這樣的目標,誰就獲得勝利。在本設計中,是在每次下完一個子后進行判斷,看己方是否達到了勝利的標準,若勝利游戲便結束;否則,游戲繼續。
(3)人工智能算法
人工智能算法的主體思想分為以下三個步驟:
第一步:根據雙方的當前的形勢循環地假設性的分別給自己和對方下一子(在某個范圍內下子),并判斷此棋子能帶來的形勢上的變化,如能不能沖4,能不能形成我方或敵方雙3等。
第二步:根據上一步結果,組合每一步棋子所帶來的所有結果(如某一步棋子可能形成我方1個活3,1個沖4(我叫它半活4)等),包括敵方和我方的。
第三步:根據用戶給的規則對上一步結果進行排序,并選子(有進攻形、防守形規則)。
5、典型類的具體設計(1)應用程序類
Gobang 類用于連接設備的應用程序管理器(Application Manager),Gobang類繼承自 MIDlet 類,通過 Gobang 類的方法 start App,pause App,destroy App 來通知游戲的開始,暫停和銷毀結束。源代碼如下:
package com.occo.j2me.game.gobang;import javax.microedition.lcdui.Display;
import javax.microedition.midlet.MIDlet;public class Gobang extends MIDlet
//定義游戲界面的 Canvas 類 Gobang Canvas 的對象 Gobang public { Gobang Canvas gobang;Gobang(){
super();
gobang=new Gobang Canvas(this);//生成 Gobang Canvas 類的對象 gobang
} protected void start App(){
Display.get Display(this).set Current(gobang);
} protected void pause App(){
} protected void destroy App(boolean arg0){
}} //在屏幕上繪出游戲見面 gobang(2)游戲界面類
Gobang Canvas 類繼承自 Canvas,游戲的核心類是 Gobang Canvas 類,此類將完成游戲的繪圖、互動、控制、邏輯、等所有功能,此類的框架代碼如下:
Package com.occo.j2me.game.gobang;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Command;import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command Listener;public Gobang Canvas(Gobang gobang){
this.gobang=gobang;
}
protected void paint(Graphics g){
}
import javax.microedition.lcdui.Graphics;public class Gobang Canvas extends Canvas implements Command Listener{protected Gobang gobang;
public Gobang Canvas(){
}
}(3)棋子類
整個棋盤是一個 Chesses 類型的二維數組,棋盤上的每一個棋子都對應著一個Chesses 的對象,此類定義了一個棋子,源代碼如下:
package com.occo.j2me.game.gobang;public Chesses(){
}
public class Chesses {boolean is Player1;
public Chesses(boolean is Player1){
this.is Player1=is Player1;
}}
4.3 游戲實現
4.3.1 主類的實現
YpkWuZiQiActivity類是五子棋游戲的主類,同時也是五子棋游戲的入口,它繼承自Activity類。進入程序后,首先調用init()方法,init()方法通過調用setContentView(R.layout.welcomeview)顯示登錄該游戲的第一個界面。welcomeview.xml是一個布局文件,里面存儲了界面信息。該界面中有四個Button,分別為welButton1、welButton12、welButton3、welButton4,點擊每個Button都會觸發一個事件,其中點擊welButton1和welButton2還會給它的成員變量FIGHTINGMODE賦值,因為在人人對戰和人機對戰是寫在同一個ChessBoard類中的,所以需要通過FIGHTINGMODE的值來區分是人人對戰還是人機對戰。
點擊welButton1時,FIGHTINGMODE=1,然后會調用initTwo()方法,該方法通過調用setContentView(R.layout.chess)方法,來顯示對戰的界面。chess.xml文件存儲了對戰界面的信息。在chess.xml文件中調用了ChessBoard類,該類中主要定義了棋盤的信息,下文會對該類做具體的介紹的。在對戰界面中也有四個Button,分別是b1、b2、b3、b4。
首先來介紹一下b2,該Button的功能是返回主頁,調用init()方法就可以實現。b3的功能是重新開始,這個也只需要調用initTwo()方法。b3的功能是退出,調用了系統方法:System.exit(1)。下面重點介紹一下b1,該Button的功能是悔棋。該Button設定的點擊事件詳細內容如下:
b1.setOnClickListener(new OnClickListener(){ public void onClick(View v){ ChessBoard chess =(ChessBoard)findViewById(R.id.chess);Point temp = null;if(chess.whoRun == 1){
if(chess.firstPlayer.getMyPoints().size()>=1 &&chess.secondPlayer!=null){ temp=chess.secondPlayer.getMyPoints().get(chess.secondPlayer.getMyPoints().size()-1);
chess.secondPlayer.getMyPoints().remove(temp);chess.freePoints.add(temp);temp=chess.firstPlayer.getMyPoints().get(chess.firstPlayer.getMyPoints().size()-1);chess.firstPlayer.getMyPoints().remove(temp);chess.freePoints.add(temp);chess.freshCanvas();
}
} if(chess.whoRun == 2){ if(chess.firstPlayer.getMyPoints().size()>=1 && chess.secondPlayer!=null){ temp=chess.firstPlayer.getMyPoints().get(chess.firstPlayer.getMyPoints().size()-1);chess.firstPlayer.getMyPoints().remove(temp);chess.freePoints.add(temp);temp=chess.secondPlayer.getMyPoints().get(chess.secondPlayer.getMyPoints().size()-1);chess.secondPlayer.getMyPoints().remove(temp);chess.freePoints.add(temp);chess.freshCanvas();
} })首先獲取ChessBoard對象,該對象繼承自View,詳細的定義了棋盤信息,主要負責顯示棋盤的內容。接下來判斷一下觸發悔棋事件的是哪一個玩家,再判斷是否符合悔棋的條件,這個條件很簡單,就是棋盤上至少要有兩個棋子。之后便進行悔棋操作,分別將兩個玩家最后下的棋子取出,程序實現就是將兩個ArrayList的最后一個元素remove出來,再分別放到記錄棋盤中沒有棋子的點的}
}
集合中,最后更新一下畫布,主要是調用ChessBoard的invalidate()方法。通過以上步驟之后,呈現在我們面前的便是悔完棋的畫面了。
點擊welButton2時,FIGHTINGMODE=2,之后的步驟便會點擊welButton1是相同的了,不同的是,由于對戰模式的改變,從人人對戰變成了人機對戰。
點擊welButton
3時,通
過
initThree()
方
法
調
用setContentView(R.layout.netchess)方法實現網絡對戰。詳細的對戰實現細節將會在下文一一介紹。在這個界面中只保留了兩個Button:b2和b4。這兩個Button所實現的功能和上面的b2和b4是相同的。
最后,welButton4比較簡單。它所實現的功能為退出應用程序,調用System.exit(1)方法。4.3.2 游戲設置類的實現
游戲設置表單用來對游戲參數進行設置,包括棋盤大小、先手選擇、智能級別。表單中使用了 Gauge 和 Choice Group 兩種高級用戶界面組件。
1、棋盤尺寸選擇
標準的五子棋棋盤為 15*15,但為了滿足不同玩家的需求,這里提供了大小為10*10 到 20*20 的棋盤,用戶可以通過 Gauge 組件改變。棋盤的最小值為 10,而Gauge 組件的最小值為 0,所以當前的 Gauge 值需要角上 10 才是當前棋盤大小。創建 Gauge 組件的代碼如下:
form = new Form(“ 游戲設置”);// 創建參數設置表單并添加標簽 gauge Size = new Gauge(“棋盤規格: ” + board Size + “ X ” + board Size, true, 10, board Size-10);//棋盤規格
form.append(gauge Size);
圖4-4 棋盤尺寸的設計
在Gauge交互模式下可以為Gauge對象所在的表單對象綁定一個Item State Listener 事件監聽器,并在監聽器上捕捉 Gauge 對象的事件,當 Gauge 的值發生變化時就會觸發事件。這里將根據 Gauge 的當前值改變標簽,顯示當前的棋盤大小。其代碼如下:
public void item State Changed(Item item){
if(item == gauge Size)//當 Gauge 組件發生變化時
{
int bs = gauge Size.get Value()+ 10;//獲取當前的 Gauge 值并計算棋盤大?。?0)
gauge Size.set Label(“棋盤規格: ” + bs + “ X ” + bs);//改變 Gauge 組件的標簽
}
}
2、難度選擇
游戲的難易程度根據計算機的智能級別來控制,創建及添加選項的方法和復選框一樣,所不同的是在創建 Choice Group 對象時,類型設置為 1(單選)。對于單選框,set Selected Index 只能用來指定某個選項被選中,因此,布爾值 selected 的值必然為 true,否則便沒有意義。
游戲共有 3 個難度級別,分別是:拜師學藝、棋行天下、誰與爭鋒(此游戲中并未作出區分),初始情況下為拜師學藝,該選項的索引值為 0。創建難度選擇單選框的代碼如下:
level = 1;//默認情況下的難度級別
choicelevel = new Choice Group(“電腦智能級別:”, 1);//創建難度級別選項組 choicelevel.append(“拜師學藝”, null);//難度 1 choicelevel.append(“棋行天下”, null);//難度 2 choicelevel.append(“誰與爭鋒”, null);//難度 3
choicelevel.set Selected Index(level-1 , true);//設置默認情況為難度 1,索引值為0
form.append(choicelevel);//將選項組添加到主表單中
游戲設置選項表單還有兩個 Command 對象,分別用于玩家卻熱和取消,所以表單需要監聽軟鍵事件和組件事件:
public class Setting implements Command Listener, Item State Listener
3、棋手選擇
選擇先手和難度等級用 Choice Group 組件來實現。Choice Group 組件用來構造選擇框,其構造函數如下:
Choice Group(String label, int choice Type)選擇先手的選項框為選擇組件,屬性為復選框,標簽名為空。創建好選擇組件后,逐條添加選項元素。添加選項的方法如下:
int append(String string Part, Image image Part)該方法追加一個選項元素到選擇組中,追加的選項為選擇組中的最后一個元素,選擇組的大小加 1。
對于多選類型的 Choice Group,還可以設置個別選項的選擇狀態。設置初始選擇狀態的方法如下:
void set Selected Index(int element Num, Boolean selected)這里創建一個只有一個選項元素的多選框用于玩家設置是否計算機先行,在默認情況下為true,創建完成多選框后將其添加到主表單中,代碼如下:
Computer First = true;//在默認情況下為計算機先行 choice First = new Choice Group(null, 2);//創建復選框 choice First.append(“電腦先手”, null);//添加選項元素
choice First.set Selected Index(0, Computer First);//設置多選框的默認狀態 form.append(choice First);//將多選框添加到主表單中 4.3.3 棋子類的實現
1、棋子的行列位置
此五子棋游戲是一個二維棋類游戲,所以定了了一個 Dot 類來表示棋子。由于移動設備的局限性,所以程序不在下每一步棋時生成一個對象,而是在游戲進行時,玩家或者計算機沒下一步棋,在數組相應位置生成該棋子的對象,而將已經下過的棋子保存到數組中隨時檢索,這樣可以避免過多棋子對象占用系統內存。Dot 類的 UML 圖如圖 4-5 所示:
圖4-5棋子行列設計
Dot 類主要有兩個變量 row 和 col,分別表示行和列:
public int row;//行
public int col;//列
2、檢查越位
棋子的位置并非是任意的,玩家和計算機每走一步棋之前都要線檢查該位置的合法性,即棋子是否在棋盤上,否則判為無效落子。檢查是否越界的代碼如下:
public boolean is In Board(int board Size)//判斷棋子是否越界(超出棋盤){ return row >= 0 && row < board Size && col >= 0 && col < board Size;}
3、修改棋子位置
在創建好 Dot 對象后,Dot 類提供了兩種方法更改棋子位置,包括設置行列位置和從已有棋子中復制參數。
public void set Row Col(int r, int c)//設置棋子位置
{
row = r;col = c;
}
public void copy From(Dot d)//復制已有的棋子
{
row = d.row;
col = d.col;
} 4.3.4 對戰邏輯類的實現
1、建立數據結構
本程序以數組保存當前盤面的情況,每個位置可能有三種狀態:空、玩家的落子、計算機的落子,分別用 0、1、2 來表示。代碼如下:
public static int PLAYER_NONE = 0;//該位置為空
public static int PLAYER_COMPUTER = 1;//該位置有電腦的落子
public static int PLAYER_HUMAN = 2;//該位置有玩家的落子
棋盤在初始情況下為空,即棋子上沒有任何棋子,在Gobang Logic類的構造函數中對棋盤進行初始化:
table = new int[board Size][board Size];//創建棋盤數組 for(int r = 0;r < board Size;r++){
for(int c = 0;c < board Size;c++)
table[r][c] = 0;//初始化盤面為空 }
除了記錄棋盤上每個位置的落子狀態外,程序還將對每種狀態的位置個數進行統計,以對算法進行簡化。對三種狀態的統計存儲在整型數組中,該數組為全局變量。
private int player Counter[];
在 Gobang Logic 類的構造函數中對三種狀態的計數進行初始化,即棋盤上都是空、計算機的落子或玩家的落子狀態的個數為 0,在數據結構上,把空也當做某一特殊玩家。
初始化代碼如下:
player Counter = new int[3];//落子狀態計數器
player Counter[0] = board Size * board Size;//整個棋盤都是空的狀態 player Counter[1] = 0;//電腦落子0 player Counter[2] = 0;//玩家落子0
2、落子和悔棋
這里使用了一個 Dot 類棋子對象來記錄最后一步棋的位置,當玩家下了一步棋后需要將上一步重新繪制,以消除旗子上的引導框。另外,還是用了堆棧來存儲最近的幾步落子,以便玩家悔棋。
private Dot last Dot;//棋子對象,存儲最后一步落子 private Stack steps;//棋子對象的堆棧
最后一步棋子和棋子堆棧在 Gobang Logic 類的構造函數中進行初始化;
last Dot = new Dot(board Size);//創建棋子對象用來存儲最后一步棋,初始化
位置為棋盤中央steps = new Stack();//堆棧對象,用來存儲最近的幾部棋在棋盤上落子的代碼如下:
private void go At(int row, int col, int player)//電腦或人在 row、col 位置上走
{
int last Row = last Dot.row;//記錄上一步的行坐標
int last Col = last Dot.col;//記錄上一步的列坐標
table[row][col] = player;//當前位置填充玩家代碼
last Dot.set Row Col(row, col);//將這一部設置為“最后一步”
game Canvas.repaint At(last Row, last Col);//重新繪制上一步(將引導框去掉)
game Canvas.repaint At(row, col);//繪制當前這步
switch(player)//統計雙方落子數量
{
case 1:
player Counter[1]++;//電腦的步數
break;
case 2:
player Counter[2]++;//玩家的步數
break;
}
player Counter[0]--;//空白的個數
if(steps.size()> 10)//堆棧數量超過上限(10)
steps.remove Element At(0);//清除棧底
steps.push(new Dot(row, col));//將當前這步棋子壓入堆棧
}
Stack(堆棧類)從 Vector 集成而來,它使用 push()方法進入堆棧,需要時使用 pop()方法從堆棧的頂部將其取出。悔棋動作由玩家做出,從數據結構來看,是同時后退兩步(將最后兩步棋位置的落子狀態設置為空)。
Stack 類的 peek()方法將獲取棧頂對象,但不移。悔棋代碼如下: :
public boolean undo()//悔棋
{
if(steps.size()>= 3)
{
Dot d = new Dot();//創建棋子對象
d.copy From((Dot)steps.pop());//從堆棧彈出的棋子中復制行列位置坐標
table[d.row][d.col] = 0;//將該位置設置為空
game Canvas.repaint At(d.row, d.col);//在棋盤上重新繪制該位置
d.copy From((Dot)steps.pop());//從堆棧彈出的棋子中復制行列位置坐標
table[d.row][d.col] = 0;//將該位置設置為空
game Canvas.repaint At(d.row, d.col);//在棋盤上重新繪制該位置
d.copy From((Dot)steps.peek());//獲取棧頂對象,作為最后一步棋存儲 last Dot.copy From(d);
game Canvas.repaint At(d.row, d.col);//重新繪制最后一步(添加引導框)return true;//悔棋成功
}
else
{
return false;
//悔棋失敗
}
} 4.4 本章小結
本章主要內容是游戲的實現,包括主類的實現,如構造函數、事件處理等,游戲幫助和介紹表單類的實現,游戲設置類的實現,如棋盤、選手、難度等,旗子類的實現,如棋子行列位置、檢查越界等,對戰邏輯類的實現,如落子和悔棋、邏輯運算等的實現。
第四篇:QT基于linux的五子棋游戲設計與實現
課題名稱:基于linux的五子棋游戲設計與實現
專業:計算機科學與技術(計算機工程方向)
開發工具及語言:,ubuntu12.04,QT
運行環境:linux下的QT
論文字數:1w左右
是否需要PPT:是
是否需要安裝說明:是
所在城市:武漢市
所在學校:華中農業大學楚天學院
功能需求分析
系統的基本功能需求分析如下:
(1)游戲進入界面的菜單選擇,有自我對戰、人機對戰、網絡對戰和退出 游戲四個選項;
(2)進入游戲之后,顯示一個十三行十三列的五子棋的棋盤。棋盤旁邊顯 示一個菜單,菜單選項有棋局重現、繼續上步、上級菜單和退出游戲,在界面上可以在棋盤落子操作和菜單操作之間進行切換,用鍵盤的按鍵來控制,棋局重現功能是在某方勝利之后才能手動操作一步步查看并回顧雙方下棋的過程;繼續上步可以切換回棋盤操作;上級菜單功能可以使五子棋游戲退出當前的游戲模塊(自我對戰、人機對戰、網絡對戰其中的一種),回到游戲開始界面時候的菜單,進行重新選擇;退出游戲是退出整個游戲界面;
(3)棋盤上顯示光標,可以對光標進行移動操作,也可以在棋盤和菜單來 回切換的時候重繪和擦除;
(4)在上面棋盤將光標移動到上面對應的位置,可以落子,棋盤上將在光 標顯示處出現相應的棋子,并且棋子在橫縱交點處;
(5)自我對戰的過程中有悔棋的功能;
(6)游戲的過程中會有提示信息,如該哪一方落子,棋盤旁邊顯示相應按 鍵對應的操作列表;
(7)可以自動判斷勝負,勝利一方形成一列的五個或5個以上的棋子閃 爍數次,顯示是黑方或者白方已經勝利的字樣,并且停止落子的功能;
(8)能夠實現三種游戲模式,自我對戰、人機對戰和網絡對戰。
非功能需求分析
非功能需求如下:
(1)在程序運行的過程中程序不能崩潰,更不能使系統出現問題,造成 災難性的后果;
(2)希望在此項目的基礎上不做改動或做很少的改動就能在其他的系統 或設備上運行;
(3)界面清晰容易看懂,方便玩家操作;
(4)游戲運行速度不能太慢,要反應及時,以免影響玩家的興趣。
(5)程序代碼必須每行都有詳細注釋。以上是要登記的內容。這個是例子。自己修改相關信息。一定要寫的詳細,開發以文檔為依據。注意請把文件名換成自己的作品名,以防技術開發錯誤
注意事項:
第五篇:游戲手機產生
手機功能細分的因素分析
隨著互聯網技術的發展和生活壓力的增大,越來越多的年輕人愿意呆在家里,沉迷于自己的興趣愛好中。你可能是一個DIY愛好者,你也可能是一個文字愛好者,你或許還是一個音樂影視愛好者,甚至你可能更加偏愛游戲。
移動手機設備在現在的日常生活中越來越重要,無論是老人還是小孩子,成為人們生活中不可或缺的一部分。曾經看到一個關于現在聚會時的形容,菜品上桌時拍照傳微博,等菜的時候就是在聊微信或者其他即時通訊,可是面對面的朋友卻是各人玩各人的零交流。是不是這樣在印證距離產生美,面對面大家只需低頭玩手機么?無論是在刷網頁還是聊天,你會發現手機是一刻也不能離身的。
在移動的交通工具上,你會在不經意瞥見玩手機的男性,大多數是在玩游戲,無論是益智類還是休閑類游戲,而女性多是在看視頻或者聽歌。休息在家時,一臺電腦就可以陪伴你一天,無論是游戲、購物、電影、音樂。足不出戶,你就可以知曉眾生百態。人們總是說游戲人生,你是這樣的么?在家你是不是也是如此沉迷游戲而不能自拔呢?
而且現在各大游戲網站都在不斷的創新,為用戶提供更加有趣的游戲。在手機應用App中,你會發現各大游戲推薦平臺,不僅會為你節省尋找游戲的時間而且還會根據網絡最熱門游戲搜索排名更新排名,讓你更加直接了解游戲相關資訊。特別是一些簡單的頁游或者手游更容易吸引游戲眼球,會迅速的吸納游戲用戶,快速的在網絡上傳播。現在的手機市場也在漸趨飽和的市場中尋找新的出路,譬如視頻手機領域開始有了聯合愛奇藝推出的100+V6視頻手機,游戲手機領域據說有雷羽游戲手機的出現。
我覺得游戲手機和視頻手機領域的發展是有市場的。第一,現在手機成為人們生活中必不可少的一部分,手機市場細分是消費者對手機功能細化的必然要求。第二,上班族的壓力山大,游戲與音樂影音成為了大多數的選擇。第三,家庭主婦一族,不愿出去逛街的時候,游戲與影音成為她們打發時間的首要選擇。當然不排除其他的活動,例如我們的國粹麻將。第四,學生一族,除了繁重的學業之外,游戲與影音成為他們緩解學習壓力的娛樂選擇。
其實無論是哪種細分市場,手機功能細分的出現有其必然發展的趨勢。但是最后的發展結果不僅看產品已有的知名度,還要看產品的市場推廣是否精準,是
否能有效的引起目標消費群體的情感共鳴。如果沒有精準的目標市場推廣,將會造成企業成本的浪費,與此同時也會造成社會資源的浪費,最后的結果也許就是不容樂觀的吧!