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

正文內容

基于android平臺連連看游戲設計與實現畢業(yè)論文-閱讀頁

2025-07-10 14:24本頁面
  

【正文】 連線的轉折點不能超過兩個也就是連線不能超過三條線。3) 僵局判定算法所謂的僵局,顧名思義就是說玩家在游戲時,不能夠繼續(xù)找出新的一對可消除圖案,游戲不能繼續(xù)進行。僵局判定算法就是要及時的發(fā)現僵局,以便程序產生新的游戲布局,使游戲繼續(xù)下去。描述了系統(tǒng)的主要功能,展示了游戲運行的界面圖。對游戲UI、核心算法進行了詳細的解釋。剛開始我們需要下載Android開發(fā)時會用到的整合開發(fā)環(huán)境Eclipse。所以開發(fā)前必須先安裝Java 開發(fā)套件(Java Development Kit,JDK)。安裝好JDK 后,我們可以前往Eclipse網站下載Eclipse這個方便的整合開發(fā)環(huán)境。下載完同樣先解壓縮到適當目錄下。Eclipse不需要安裝,只要確認你的系統(tǒng)上有安裝Java,即可直接開啟Eclipse資料夾,點擊Eclipse開始執(zhí)行Eclipse 整合開發(fā)環(huán)境。一般使用Eclipse預設的工作目錄即可。3) Eclipse安裝ADT 擴充套件。選擇HelpSoftware Updates選項,這選項會帶出一個新視窗。選擇右上角的Local按鈕,并選取剛下載的Android 最新開發(fā)工具檔案,選到之后按下OK按鈕離開。4) 下載Android SDK。下載下來的SDK檔案需要先解壓縮。將解壓縮后的Android SDK檔案夾命名為Android_sdk。這樣Android SDK就設定完畢。 連連看游戲開始界面顯示這部分的代碼全部都寫在布局組建(Layout)里面,LinearLayout可以進行水平布局或豎直布局,如果將LinearLayout的布局方向設置為vertical,那么表明是豎直布局。如果設置為horizontal,那么表明是水平布局,也就是從左到右依次進行排列布局。本程序選擇的是豎直布局。這里有4個組件:TextView來顯示菜單標題,如果用戶過關超時,可將標題改為相應的文字。繼續(xù)游戲按鈕在開始時不可用,用戶在游戲中暫停游戲回到菜單時才可見。進入游戲后右下方顯示剩余時間,這部分的游戲界面也是寫在布局組建(Layout)中,其中有兩個組件,TextView用來顯示游戲剩余時間和剩余幫助次數,下面的LinearLayout用于放置自定義的游戲視圖,現在這里占個位。WRAP_CONTENT意味著當前View的大小只需要包裹住View里邊的內容即可[20]。public static final int STATE_GAME=1。public static final int STATE_LOSE=3。通過設置和訪問activity的state變量,可以知道程序處在什么狀態(tài)。state變量被初始化為STATE_MENU,這是程序最初始的菜單。定義游戲存儲圖標的變量一共有十種圖片。并將下載到的10中圖片資源存放在drawable文件夾中。我們將游戲控制器對象初始化為null。將這些變量定義為靜態(tài)變量,只要程序進程不退出,每次用戶進入程序時都可重復使用這些變量資源,這樣程序的狀態(tài)可以記錄下來,圖標資源也只需要加載一次。在這5種狀態(tài)中,除了STATE_GAME,都有顯示菜單,只不過菜單內容有所區(qū)別。如果程序是第一次啟動,則新建游戲控制器對象并加載圖表資源。最后根據程序的狀態(tài) 來調整界面的顯示。for(int i=0。i++) {icons[i]=((BitmapDrawable)(+i)).getBitmap()。還定義了一個shuffle方法,來對圖標進行隨機互換。此時還要播放music0這段音樂來作為游戲的背景音樂。 連連看在游戲中點擊圖標后的界面上圖為單擊動物頭像的游戲界面,可以明顯地看到圖片四周出現紅色準心。首先判斷游戲的狀態(tài),如果不是正在游戲,不需要處理按鍵事件。如果用戶在游戲中按了home鍵退到Home界面或通過其他方式切換到其他activity,要暫停游戲。如果圖片與上次選中的圖片可以相連,則畫出連線然后擦去連線和兩個圖片,否則選中該圖片。用戶在規(guī)定的時間內沒有完成游戲,此時剩余時間remainTime=0,則STATE_LOSE賦給state,系統(tǒng)得知要顯示游戲失敗的界面,程序回到菜單,提示游戲失敗,并可以選擇開始新游戲或退出,同時播放music2這一段比較憂傷的背景音樂。所以當我們點擊重試時游戲又重新加載一次圖標資源,重新進入了初始化布局界面。 (sucess)。}用戶在規(guī)定的時間內連完所有的圖片,則將STATE_WIN賦給變量state,系統(tǒng)得知此玩家已經成功完成游戲,程序回到菜單,并提示用戶過關,點擊確定可以選擇再玩一遍,同時播放music1這一段比較歡快的背景音樂。所以當我們點擊再玩一遍時,游戲又重新加載一次圖標資源,重新進入了初始化布局界面。在這里,不需要考慮游戲邏輯,只需要考慮需要哪些數據,暴露些什么接口[16]。每次可以有多個圖片被選中(其實最多應該有兩個,邏輯部分在我們的控制器中實現,這里不需要管),所以被選中的圖片坐標用一個list來存儲。Path數組變量為連線的折點,有控制其計算好了傳過來,在視圖中畫出連線。Map數組是游戲的布局數組,在前面的算法介紹中提到過,是帶邊界的,而邊界如果在界面中與其他位置統(tǒng)一處理會浪費很多屏幕空間,因此通過offsetX、offsetY變量來調整。if(changed){//offsetX、offsetY具體的計算方法offsetX=iconWidth(rightleft()*iconWidth)/2。}}這里說明一個橫向偏移值的計算,縱向同理。視圖的寬度減去圖片在橫向占的總像素數為橫向空白的像素數,因為要橫向居中,這個數值除以2為最左側圖片的左側離視圖左側的距離。因為邊界不需要這么寬,需要將圖片橫坐標向左移的距離為兩者之差。private Point screen2index(int x,int y){ return new Point((x+offsetX)/iconWidth,(y+offsetY)/iconHeight)。}下面看一下GameView的核心部分,是onDraw方法的實現:首先,在被選中的圖片四周畫一個與圖片大小一樣的紅色準心,這樣被選中的圖片有了標記。map數組中以0表示空位,不用畫,其他的數字減去1就是圖片在icons數組中的索引。我們提供的index2screen方法轉換出來的是對應位置的圖片的左上角坐標,需要取中間的坐標。在這個視圖中提供了drawLine方法,傳入一個path數組并刷新視圖。通過onDraw方法知道,這次刷新map數組對應的位置已經置0,消除效果將在下次刷新視圖時發(fā)生。這次刷新有個延時,還有動畫效果,由控制器來控制,視圖中不予考慮[17]。OnItem ClickListener是個接口。}這個事件監(jiān)聽用來通知監(jiān)聽者用戶單擊了哪個圖片,即map數組對應的什么位置。視圖類的onTouchEvent方法里面的ACTION_DOWN事件。通過事件,可以得知用戶在屏幕上單擊的點在視圖中的坐標,通過前面提到的screen2index方法轉成了對應map數組的元素。這個監(jiān)聽者是在控制器中實現的,后面將會看到。它的成員變量包括:列數、行數和圖片大小。圖片大小設置成45。這個是對程序activity的一個引用,后面用得到。這個變量上面提到的自定義的視圖,用它來呈現游戲界面。這是保存程序的布局的數組。private ListPointpath=new ArrayListPoint()。對界面的刷新有兩部分:一個是為了實現連線消除動畫,對GameView延時刷。由于Timer會另起一個線程,而刷新界面需要在UI線程中執(zhí)行,所以程序用到了Handler。論文中定義了RefreshHandler和它的一個實例redrawHandler。在handleMessage方法中對這兩種消息分別處理。否則需要判斷游戲是否還能往下進行,來決定是否需要調整布局[18]。還需要更新剩余時間,剩余時間的計算方法remainTime=totalTime((()startTime)/1000);剩余時間的計算方法,得除以1000才是秒計時。在游戲控制器中提供了startGame方法,用來開始一個新的游戲。remainTime =totalTime。}可以看到在startGame方法中,先調用了generateMap()來生成游戲布局,將剩余時間變量進行初始化,之后調用了resume方法。如果你想對游戲數據持久化,除了activity中的游戲狀態(tài)還需要保存控制其中的map以及remainTime變量。 算法詳細設計 游戲布局1) 先定義每個節(jié)點的數據結構,用于記錄每個節(jié)點的信息:typedef struct _CELL_NODE{ int value。char row。 char column。 struct _CELL_NODE *next。)}CELL_NODE。它決定了用戶看到的每個方格中的內容。如果是路徑節(jié)點,則value為1;如果是圖案節(jié)點,其范圍為[0,Enum],在本次設計的瘋狂連連看中 Enum的數值為所有配對的可消除圖案組數目。Char row 指的是節(jié)點所在的行號[0, HEIGHT+2],HEIGHT為用戶可見的列數。 int connect_flag 表示連通標記,在路徑搜索中將被用到。struct _CELL_NODE *next 表示指向下一個節(jié)點(不一定是相鄰的),這在后面的節(jié)點列表中將會用到。typedef struct _CELL_LIST{int count。CELL_NODE *link。 }CELL_LIST。隨著游戲的進展,節(jié)點將逐漸從列表中移除,從而成為“路徑”節(jié)點;在某些游戲模式中,例如左移或右移模式,隨著游戲的進展,有些節(jié)點會在列表之間移動;最終游戲結束時該鏈表為空;該鏈表的作用有三個:一是初始化游戲布局時;二是在需要判斷游戲是否“死鎖”時;三是發(fā)生“死鎖”需要重新生成游戲布局時。CELL_NODE *get_cell(int column, int row){return g_cell + (WIDTH+2)*row + column。左節(jié)點: dst_cell = src_cell – 1;右節(jié)點: dst_cell = src_cell– (WIDTH+2);下節(jié)點: dst_cell = src_cell 連通算法本次設計的“連連看”中的連通,分為一線連通、二線連通和三線連通:1) 一線連通其充分必要條件是:a兩節(jié)點同行或同列;。int row1int column2 = secondcolumn。 = secondrow。CELL_NODE *temp_cell。 //同行,根據兩節(jié)點的左右關系計算從firstsecond的步長。 //同列,根據兩節(jié)點的上下關系計算從firstsecond的步長。temp_cell = first + step。//在從first到second的遍歷過程中,如果遇到某個節(jié)點不是空白路徑,則肯定不是一線連通,則返回。temp_cell += step。return ONE_LINE_CONNECT。//兩節(jié)點間不存在圖案節(jié)點,一線連通成功。 說明: ,從A遍歷到B, 其步長為1, 反之為1;從C遍歷到D, 其步長(WIDTH+2), 反之為 (WIDTH+2);表示可以一線連通。 其充分必要條件是: a. 兩節(jié)點不同行且不同列; b. 兩節(jié)點的拐角節(jié)點是路徑節(jié)點; c. 拐角節(jié)點與兩個節(jié)點可以一線連通。 二線連通圖具體實現函數如下:int check_2_line_connect(CELL_NODE *first, CELL_NODE *second, CELL_NODE **ret_corner){ return MAYBE_CONNECT。if((firstrow == secondrow))//同行,肯定不是二線連通。return MAYBE_CONNECT。//得到其中一個拐角節(jié)點if(cornervalue==CELL_VALUE_PATH){//判斷拐角節(jié)點與兩節(jié)點是否可以一線連通。amp。return TWO_LINE_CONNECT。}}corner = get_cell(secondcolumn, firstrow)。if(cornervalue==CELL_VALUE_PATH)amp。{*ret_corner = corner。} return MAYBE_CONNECT。 //當前不能確定是否連通;3) 三線連通節(jié)點A和B可以三線連通的充分必要條件是:a.A與C可以一線連通, B與D可以一線連通;c. C與D可以一線連通。 C和D的位置這些標記了的節(jié)點就是C、D的候選點。接下來,我們只需沿著平行線X/W和Y/Z判斷候選節(jié)點C和D是否一線連通即可。CELL_NODE *corner1=NULL, *corner2=NULL。//該函數做一些初始檢查,例如用戶輸入的兩個節(jié)點的值不同,顯然不可能連通,也就不需要進行下面的判定了。ret = check_1_line_connect(first, second)。ret = check_2_line_connect(first, second, amp。if(ret == TWO_LINE_CONNECT)goto CHECK_CONNECT_RETURN。corner1, amp。returnCHECK_CONNECT_RETURN:produce_path(first, second, corner1, corner2, path, ret)。}至此我們完成了連連看中的連通算法
點擊復制文檔內容
物理相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1