freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于android平臺連連看游戲設(shè)計與實現(xiàn)畢業(yè)論文-資料下載頁

2025-06-25 14:24本頁面
  

【正文】 對于游戲的倒計時和幫助次數(shù)的更新,這里通過了一個TimerTask來實現(xiàn)TimerTask是對于游戲的倒計時和幫助次數(shù)的更新。還需要更新剩余時間,剩余時間的計算方法remainTime=totalTime((()startTime)/1000);剩余時間的計算方法,得除以1000才是秒計時。這里定義了游戲總時間為100S,在TimerTask中,計算出游戲剩余時間,并向redrawHandler發(fā)送消息。在游戲控制器中提供了startGame方法,用來開始一個新的游戲。public void startGame(Main m){generateMap()。remainTime =totalTime。resume(m)。}可以看到在startGame方法中,先調(diào)用了generateMap()來生成游戲布局,將剩余時間變量進行初始化,之后調(diào)用了resume方法。其實開始一個新游戲和恢復(fù)游戲的區(qū)別就在于前者對游戲數(shù)據(jù)進行初始化,而后者這些數(shù)據(jù)已經(jīng)有了值。如果你想對游戲數(shù)據(jù)持久化,除了activity中的游戲狀態(tài)還需要保存控制其中的map以及remainTime變量。Resume是繼續(xù)一個游戲的方法,游戲暫停時計時器停止計時,在resume方法中,實例化并初始化了GameView類[19]。 算法詳細設(shè)計 游戲布局下面是一個游戲布局的例子,用戶看到的是一個的游戲界面(中間涂色部分),實際上在外圍有一圈隱含空白路徑,所以實際節(jié)點總數(shù)為。1) 先定義每個節(jié)點的數(shù)據(jù)結(jié)構(gòu),用于記錄每個節(jié)點的信息:typedef struct _CELL_NODE{ int value。char row。 char column。int connect_flag。int boundary_flag。 struct _CELL_NODE *next。)}CELL_NODE。其中 int value 表示節(jié)點的值。它決定了用戶看到的每個方格中的內(nèi)容。根據(jù)界面顯示的結(jié)果,所有的節(jié)點分為兩類, 一類是圖案節(jié)點,即待消的節(jié)點;另一類是路徑節(jié)點,圖案節(jié)點成功消對后,成為路徑節(jié)點,游戲布局外圍的隱藏節(jié)點也是“路徑”節(jié)點。如果是路徑節(jié)點,則value為1;如果是圖案節(jié)點,其范圍為[0,Enum],在本次設(shè)計的瘋狂連連看中 Enum的數(shù)值為所有配對的可消除圖案組數(shù)目。我們可以調(diào)整Enum的大小,控制游戲的難易程度:Enum越大,游戲中的單元種類就月多,隨之相應(yīng)的游戲難度越大。Char row 指的是節(jié)點所在的行號[0, HEIGHT+2],HEIGHT為用戶可見的列數(shù)。Char column 表示節(jié)點所在的列號[0, WIDTH+2], WIDTH為用戶可以見的行數(shù)。 int connect_flag 表示連通標(biāo)記,在路徑搜索中將被用到。int boundary_flag表示邊界標(biāo)記,在路徑搜索中用到。struct _CELL_NODE *next 表示指向下一個節(jié)點(不一定是相鄰的),這在后面的節(jié)點列表中將會用到。2) 節(jié)點列表的數(shù)據(jù)結(jié)構(gòu),將同value的節(jié)點串聯(lián)起來(不包含空白的節(jié)點):typedef struct _CELL_LIST{int count。 //鏈表中的節(jié)點個數(shù)。CELL_NODE *link。 //同value的節(jié)點。 }CELL_LIST。說明:在程序?qū)崿F(xiàn)中,使用一個數(shù)組:CELL_ST g_cell_list[ENUM], 數(shù)組中的每一個元素對應(yīng)一種value的鏈表;該數(shù)據(jù)結(jié)構(gòu)在游戲布局確定后生成。隨著游戲的進展,節(jié)點將逐漸從列表中移除,從而成為“路徑”節(jié)點;在某些游戲模式中,例如左移或右移模式,隨著游戲的進展,有些節(jié)點會在列表之間移動;最終游戲結(jié)束時該鏈表為空;該鏈表的作用有三個:一是初始化游戲布局時;二是在需要判斷游戲是否“死鎖”時;三是發(fā)生“死鎖”需要重新生成游戲布局時。3) 代表整個布局的二維數(shù)組g_cell[WIDTH+2][HEIGHT+2],其中的每個元素就是CELL_NODE指針,指向布局中相應(yīng)位置的節(jié)點:a指定行和列,可以得到該位置的節(jié)點指針。CELL_NODE *get_cell(int column, int row){return g_cell + (WIDTH+2)*row + column。}b從某節(jié)點(src_cell)出發(fā),訪問相鄰的其他節(jié)點(dst_cell)。左節(jié)點: dst_cell = src_cell – 1;右節(jié)點: dst_cell = src_cell+ 1;上節(jié)點: dst_cell = src_cell– (WIDTH+2);下節(jié)點: dst_cell = src_cell+ (WIDTH+2)。 連通算法本次設(shè)計的“連連看”中的連通,分為一線連通、二線連通和三線連通:1) 一線連通其充分必要條件是:a兩節(jié)點同行或同列;b兩節(jié)點相鄰或之間的所有節(jié)點都是路徑節(jié)點。 實現(xiàn)函數(shù)如下:int check_1_line_connect(CELL_NODE *first, CELL_NODE *second){int column1 = firstcolumn。int row1 = firstrow。int column2 = secondcolumn。int row2 = secondrow。int step。CELL_NODE *temp_cell。if(row1 == row2)step = column2column1?1:1。 //同行,根據(jù)兩節(jié)點的左右關(guān)系計算從firstsecond的步長。else if(column1 == column2)step = row2row1?(WIDTH+2):(WIDTH+2)。 //同列,根據(jù)兩節(jié)點的上下關(guān)系計算從firstsecond的步長。else return MAYBE_CONNECT。//不同行不同列,則肯定不是一線連通。temp_cell = first + step。while(temp_cell != second){if(temp_cellvalue != CELL_VALUE_PATH) MAYBE_CONNECT。//在從first到second的遍歷過程中,如果遇到某個節(jié)點不是空白路徑,則肯定不是一線連通,則返回。temp_cell += step。}return ONE_LINE_CONNECT。//兩節(jié)點間不存在圖案節(jié)點,一線連通成功。} 說明: ,從A遍歷到B, 其步長為1, 反之為1;從C遍歷到D, 其步長(WIDTH+2), 反之為 (WIDTH+2); b CELL_VALUE_PATH是一個常量,值為1,表示該節(jié)點是路徑節(jié)點;c MAYBE_CONNECT,表示當(dāng)前不能斷定是否連通;ONE_LINE_CONNECT,表示可以一線連通。2) 二線連通 其充分必要條件是: a. 兩節(jié)點不同行且不同列; b. 兩節(jié)點的拐角節(jié)點是路徑節(jié)點; c. 拐角節(jié)點與兩個節(jié)點可以一線連通。, A與B是兩個待定節(jié)點,而C和D就是他們的拐角節(jié)點,顯然C、D的坐標(biāo)可以從A,B的坐標(biāo)推導(dǎo)出來。 二線連通圖具體實現(xiàn)函數(shù)如下:int check_2_line_connect(CELL_NODE *first, CELL_NODE *second, CELL_NODE **ret_corner){ CELL_NODE *corner。if((firstcolumn == secondcolumn))//同列,肯定不是二線連通 return MAYBE_CONNECT。if((firstrow == secondrow))//同行,肯定不是二線連通。return MAYBE_CONNECT。corner = get_cell(firstcolumn, secondrow)。//得到其中一個拐角節(jié)點if(cornervalue==CELL_VALUE_PATH){//判斷拐角節(jié)點與兩節(jié)點是否可以一線連通。if(check_1_line_connect(first, corner)==ONE_LINE_CONNECTamp。amp。 check_1_line_connect(second,corner)==ONE_LINE_CONNECT){*ret_corner = corner。 //二線連通成功,返回該拐角節(jié)點,以便輸出連通路徑。return TWO_LINE_CONNECT。}}corner = get_cell(secondcolumn, firstrow)。//得到另一個拐角節(jié)點。if(cornervalue==CELL_VALUE_PATH){if(check_1_line_connect(first,corner)==ONE_LINE_CONNECTamp。amp。 check_1_line_connect(second, corner)==ONE_LINE_CONNECT){*ret_corner = corner。return TWO_LINE_CONNECT。} return MAYBE_CONNECT。 //當(dāng)前不能確定是否連通;3) 三線連通節(jié)點A和B可以三線連通的充分必要條件是:a.存在兩個路徑節(jié)點C和D;b.A與C可以一線連通, B與D可以一線連通;c. C與D可以一線連通。因此,三線連通的關(guān)鍵就是找到符合上述條件的C和D。 三線連通,我們需要找的C和D一定是在以A和B為中心的兩個十字線上, 。 C和D的位置這些標(biāo)記了的節(jié)點就是C、D的候選點。因為C與D是可以一線連通的,因此如果C點在線段X上,則D點一定在線段W上;而如果C點在線段Y上,則D點必在線段Z上。接下來,我們只需沿著平行線X/W和Y/Z判斷候選節(jié)點C和D是否一線連通即可。 該函數(shù)將確定節(jié)點first 和 second是否三線連通,如果成功,則將拐角節(jié)點保存在corner1和corner2?,F(xiàn)在三個過程串聯(lián)起來就可以判斷任何兩個節(jié)點是否連通:int check_connect(CELL_NODE *first, CELL_NODE *second, PATH *path){int ret=0。CELL_NODE *corner1=NULL, *corner2=NULL。ret = check_0_line_connect(first, second)。//該函數(shù)做一些初始檢查,例如用戶輸入的兩個節(jié)點的值不同,顯然不可能連通,也就不需要進行下面的判定了。if(ret==NO_CONNECT)goto CHECK_CONNECT_RETURN。ret = check_1_line_connect(first, second)。if(ret == ONE_LINE_CONNECT)goto CHECK_CONNECT_RETURN。ret = check_2_line_connect(first, second, amp。corner1)。if(ret == TWO_LINE_CONNECT)goto CHECK_CONNECT_RETURN。ret = check_3_line_connect(first,second, amp。corner1, amp。corner2)if(ret == THREE_LINE_CONNECT)goto CHECK_CONNECT_RETURN。return NO_CONNECT。CHECK_CONNECT_RETURN:produce_path(first, second, corner1, corner2, path, ret)。return ret。}至此我們完成了連連看中的連通算法。通過查看一些質(zhì)料了解的連連看的連通算法很多,而我認(rèn)為該算法的最大
點擊復(fù)制文檔內(nèi)容
物理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1