软件项目管理第四周作业(招标书)
小組成員:龍淼 ?武凡棨
一、項目概述
開發(fā)這款游戲的初衷是希望用戶通過簡單的操作便能體會到其中樂趣,工作學(xué)習(xí)的閑暇之余可以放松身心。
項目概覽圖:
二、項目內(nèi)容
1.玩法介紹
《2048》是一款益智類小游戲,玩法規(guī)則是:玩家控制全部方塊朝同方向運動,兩個同數(shù)字方塊碰撞后,合并的數(shù)字為它們之和,每次操作都會隨機生成2或者4數(shù)字,結(jié)果得出2048的方塊則為游戲勝利。
三、技術(shù)要求
1.Android操作系統(tǒng)
Android具有開放性強,硬件資源豐富,方便開發(fā)的優(yōu)勢。
Android開發(fā)的平臺允許任何移動終端廠商加入到Android聯(lián)盟中來。顯著的開放性可以使其擁有更多的開發(fā)者;對于消費者來講,最大的受益正是豐富的軟件資源。
但同時也會帶來更激烈的競爭,這需要我們考慮自身能否脫穎而出。
2.Java語言
Java是一門面向?qū)ο蟮木幊陶Z言,不僅吸收了C++語言的各種優(yōu)點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,極好地實現(xiàn)了面向?qū)ο罄碚?#xff0c;允許程序員以優(yōu)雅的思維方式進行復(fù)雜的編程
3.2048相關(guān)算法
2048的游戲界面可以看做是一個二維數(shù)組。我們的所有操作,實際上都是針對這一個二維數(shù)組的。我們可以將二維數(shù)組看成多個一維數(shù)組來處理,比如左右移動時一行一行的處理,上下移動時一列一列的處理。接下來以向右移動為例去實現(xiàn)它。
假設(shè)當(dāng)前在某一行,我們希望實現(xiàn)數(shù)字的相加。首先將這一行讀取出來,當(dāng)做一維數(shù)組來處理。逐個枚舉每一個數(shù)字,如果有相鄰且相等的數(shù)就直接相加。這時候問題就來了,相等的數(shù)中間隔著0怎么處理?我們可以選擇用一個變量記錄之前的非零數(shù),然后跳過0,繼續(xù)枚舉后面的數(shù),遇到相同的再相加,最后將一整行的非零數(shù)都移到右邊即可。在這里不妨換種思路,為何不先將所有的零數(shù)移動到最左邊后再去執(zhí)行加法呢?
讀取一行數(shù)字后,我們先將所有的零存進進一個新數(shù)組的左側(cè),2 0 2 0 就成了 0 0 2 2。然后從最右邊開始,將相同且相鄰的數(shù)字相加,后一個數(shù)置0,防止相加后又參與了相加的問題;接著繼續(xù)枚舉下一個數(shù)字,處理完后再進行一次移0操作,然后將結(jié)果返回給二維數(shù)組。
確定了相加的算法后,繼續(xù)思考其過程可以發(fā)現(xiàn):數(shù)字是往玩家操作的方向堆積的,但相加的方向是反過來的。例如數(shù)字向右移動,但卻是從最右邊開始往左相加的;數(shù)字向上移動,但卻是從最上面開始往下相加的。不管向哪個方向移動,移0和復(fù)制的操作都是一樣的,因此在考慮這一塊時只需要注意實現(xiàn)上的細微差別即可。
另外就是需要設(shè)計隨機數(shù)的生成。隨機數(shù)是在空白格子上隨機生成的,因此要定義一個空白格子結(jié)構(gòu)體,結(jié)構(gòu)體內(nèi)存的是空白格子在二維數(shù)組中的下標(biāo)。用一個結(jié)構(gòu)體數(shù)組來存儲每次移動后的所有空白格子,隨機挑選一個空白格子,隨機生成2或者4(兩者生成概率最好不要完全一樣)即可。
五、建設(shè)內(nèi)容
1.開始設(shè)計
注冊賬號并且登錄之后,點擊主頁面的“開始游戲”按鈕,即可開始。
2.計分設(shè)計
當(dāng)有數(shù)字合并時,記錄此時合并的數(shù)字,加到相應(yīng)的分數(shù)中。
3.結(jié)束設(shè)計
當(dāng)游戲界面中沒有得到2048且沒有兩個相同的格子時判定游戲結(jié)束。
4.觸控交互設(shè)計
用戶通過手指滑動屏幕,從起始位置獲得水平或垂直方向的偏移量以此來判斷用戶意圖。
5.游戲流程設(shè)計
總結(jié)
以上是生活随笔為你收集整理的软件项目管理第四周作业(招标书)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。