• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于面向?qū)ο蟮陌沧坑螒颉?048”設計與實現(xiàn)

      2017-05-02 09:31:20虞飛揚葉蒼竹官守軍
      湖北理工學院學報 2017年2期
      關(guān)鍵詞:安卓卡片布局

      汪 季,熊 輝,虞飛揚,葉蒼竹,官守軍

      (1湖北理工學院 數(shù)理學院,湖北 黃石 435003;2黃石晨信光電股份有限公司,湖北 大冶 435100;3中軟國際有限公司,北京 100044)

      基于面向?qū)ο蟮陌沧坑螒颉?048”設計與實現(xiàn)

      汪 季1,3,熊 輝1,2*,虞飛揚1,葉蒼竹2,官守軍2

      (1湖北理工學院 數(shù)理學院,湖北 黃石 435003;2黃石晨信光電股份有限公司,湖北 大冶 435100;3中軟國際有限公司,北京 100044)

      安卓(Android)益智類小游戲因具有較強的趣味性以及低廉的開發(fā)成本備受廣大玩家和游戲開發(fā)商的青睞。“2048”是一款典型的卡片類游戲,游戲采用Java語言開發(fā),利用各種界面布局的正確嵌套使用,提高用戶體驗的直觀感受。同時,在設計中注重玩家觸發(fā)各種事件的后臺處理,自動調(diào)整系統(tǒng)對應邏輯關(guān)系,實現(xiàn)游戲主要功能。該游戲以面向?qū)ο蟮莫毺胤绞竭M行具體設計,實現(xiàn)了基于Android的游戲開發(fā)。

      面向?qū)ο?;安卓系統(tǒng);游戲開發(fā)

      安卓(Android)系統(tǒng)基于Linux系統(tǒng),內(nèi)核和驅(qū)動使用C/C++語言開發(fā),設計了一個Dalvik JVM作為中間層,然后在SDK層面選擇Java作為開發(fā)語言[1-5],因此,開發(fā)一款安卓游戲的應用程序需要較復雜的開發(fā)流程。安卓益智類小游戲是日常生活中最耐玩的一種游戲,深受玩家喜愛,男女老少皆宜[6-8]。與此同時,益智類小游戲相對于一些大型的手機網(wǎng)絡游戲以及大型的手機單機游戲而言,具有便捷性、易開發(fā)性以及較高的創(chuàng)新性。

      本文介紹一種新型安卓手機游戲的開發(fā)。益智類游戲“2048”開發(fā)過程中有幾個重難點:①各種界面布局的正確嵌套使用,這關(guān)乎用戶體驗最直觀感受;②游戲中玩家執(zhí)行各種事件后,系統(tǒng)需要做出的對應邏輯設計;③游戲主要邏輯的實現(xiàn)。

      1 游戲梗概

      游戲開始時,棋盤內(nèi)部Gridlayout布局中隨機出現(xiàn)2個數(shù)字,出現(xiàn)的數(shù)字僅可能為“4”和“2”中的一個,且“4”和“2”出現(xiàn)的概率分別為0.8和0.2。游戲玩家可以選擇上、下、左、右4個方向移動手指從而觸發(fā)卡片的移動,如果Gridlayout布局內(nèi)的數(shù)字卡片出現(xiàn)位置移動或者位置合并,則是為有效正常移動步驟。玩家手指選擇移動的方向上如果有一樣的數(shù)則合并之,每次有效移動可以同時合并所有的2個數(shù),但不能連續(xù)合并2個數(shù),而且合并的所有數(shù)相加即為當前所得分數(shù)。玩家移動方向行或列前方有任何空白卡片則會發(fā)生位置移動。每一個有效移動步驟的進行都意味著棋盤的空位,即在無數(shù)字處隨機出現(xiàn)一個數(shù)字(依然可能為“2”或“4”,其概率仍然為0.8和0.2)。棋盤被數(shù)字填滿則無法進行有效移動,系統(tǒng)自動判定游戲失敗即游戲結(jié)束。如若棋盤上出現(xiàn)“2048”這樣的一個卡片,則為游戲取得勝利,此時游戲仍然繼續(xù)運行。游戲程序啟動后手機界面如圖1所示。

      2 布局設計和游戲主要設計

      2.1 布局設計

      首先設計一個線性布局控件,以此控件為基礎(chǔ),設計一個技術(shù)支持的顯示文本。與此同時,設計一個計分的文本,并設計好以上2個組件對應的寬和高。鑒于游戲主體部分是一個4×4的方格,所以我們采取了一個GridLayout布局來實現(xiàn)游戲的主要界面。

      2.2 游戲主要設計

      2.2.1 游戲主類GameView設計

      游戲主類GameView繼承自GridLayout布局。此布局嵌套進入主布局當中,承擔著游戲運行的空間,并確保不與其他文本控件的顯示發(fā)生沖突。

      2.2.2 觸控交互設計

      相比于其他開發(fā)系統(tǒng)版本的“2048”鍵盤式的觸控交互設計而言,安卓平臺的觸控交互設計是根據(jù)手勢動作來判斷進行的。所以這里采用一個觸屏監(jiān)聽器,記錄下用戶手指按下的位置跟手指松開的位置,并比較偏移值的大小來激活上、下、左、右操作所對應的事件。

      2.2.3 游戲卡片Card的添加設計

      卡片是游戲的核心,要將卡片添加到GameView中。游戲中必須保證卡片的正常工作邏輯不產(chǎn)生任何異常。這里卡片大小的設計要注意卡片的大小與主界面的大小關(guān)系;其次要注意卡片類的位置存放方式以及卡片類出現(xiàn)的隨機性。

      2.2.4 邏輯以及檢查結(jié)束的設計

      在游戲的具體實現(xiàn)中,需要判斷玩家操作是否合法、界面是否有事件觸發(fā)、是否需要添加新數(shù)字;同時從左往右依次遍歷,根據(jù)獲取值的情況來判斷是否需要合并卡片,以及是否需要清除合并過的卡片類。游戲結(jié)束與否的判斷還要考慮以下2種情況:①當前所有卡片值為0時;②卡片4個方向上有重復的數(shù)字時,這2種情況下游戲都是不能結(jié)束的。

      3 算法設計和具體實現(xiàn)

      3.1 算法設計

      1)卡片類的設計。

      對于手機中的卡片類大小,一般可以設計成為Absolute屬性,開發(fā)的產(chǎn)品比較直觀且能高效運行。但考慮到該游戲能適配各種機型,不能出現(xiàn)卡片內(nèi)數(shù)字溢出等情況,需要將卡片設計成自發(fā)適應屏幕大小的類型。

      在卡片類的設計中應注意以下幾種情況:

      ①為了避免界面的繁瑣,當卡片中的值為0時不顯示。

      ②為了增加卡片的區(qū)分度,位子圖片顏色適當進行調(diào)節(jié)。

      主要程序如下:

      public class Card extends FrameLayout {// FrameLayout是分層布局

      public Card(Context c) {//卡片類添加的屬性大小顏色

      super(c);

      label=new TextView(getContext()); label.setBackgroundColor(0x33fffdff);

      label.setTextSize(22); //設置文字在方格的正中間

      label.setGravity(Gravity.CENTER);

      LayoutParams lp = new LayoutParams(-2,-2); //設置大方框距離邊緣距離為10px

      lp.setMargins(8,8,0,0);//添加畫板

      addView(label,lp);//為其添加數(shù)據(jù),其值為0 setNum(0);}

      private int Num = 0; //取回當前值public int getNum( )

      {return Num;} //設置當前值

      public void setNum(int Num)

      {

      this.Num =Num; //當卡片中值為0時則不顯示當前卡片的值

      if(Num<=0){

      label.setText(" ");

      }else{

      label.setText(Num+"");

      }

      /* //改變文字所在的卡片顏色

      switch (Num) {

      case 0:

      label.setBackgroundColor(0xffeee4fa);

      break;

      case 2:

      label.setBackgroundColor(0x00000010);

      break;

      case 4:

      label.setBackgroundColor(0xffede0d8);

      break;

      (此處省略8,16,32,64,128,256,512,1024,2048的語法)

      default:

      label.setBackgroundColor(0xff3c3a22);

      break;

      }

      */

      } //定義一個equals方法用于比較卡片中的值的對比

      public boolean equals(Card c) {

      return getNum()==c.getNum();

      }

      private TextView label;

      }

      2)觸控交互式設計。

      游戲的設計中有4種事件,分別是上、下、左、右移動。而玩家的手勢卻是各異,如畫圈、畫斜線等。如何處理好這些事件,并將其分門別類歸納好,這是基于B/S架構(gòu)的安卓版本需要考慮的問題。根據(jù)現(xiàn)有的安卓版本,本游戲采取的策略是:監(jiān)聽用戶的按下屏幕位置坐標以及用戶離開屏幕的位置坐標,取兩者橫縱坐標的絕對值相比較再判斷大小,從而實現(xiàn)用戶手勢的監(jiān)聽以及對應事件的觸發(fā)。

      3)分數(shù)的統(tǒng)計。

      分數(shù)的統(tǒng)計是一個繁瑣而復雜的過程。有移動事件發(fā)生以后,卡片的位置會發(fā)生改變,卡片內(nèi)的值也會發(fā)生改變,有些卡片還會被釋放。因此應該設計一個全局變量來保存數(shù)據(jù);其次,每個卡片類的設計中必須包含這個要發(fā)生交互的值。

      4)隨機卡片的設計。

      任何一款游戲的設計都應該包含隨機性。移動卡片后新卡片的產(chǎn)生需要通過隨機種子來產(chǎn)生,卡片隨機性的實現(xiàn)是一個難點,可以通過Math.random( )>0.1<2∶4函數(shù)來實現(xiàn)隨機性的控制。

      3.2 游戲程序具體實現(xiàn)

      用一個GridLayout來放置所有卡片,卡片類中都有設置值及數(shù)值大小。通過addRandomNum()添加初始卡片,添加隨機數(shù)之前需要清空得分。通過cardsMap[p.x][p.y].setNum(Math.random( )>0.1<2∶4)確定游戲開始時2與4的出現(xiàn)比例。在添加數(shù)字過程中,分別根據(jù)獲取值是否為“0”來確定將右邊的值放到當前位置還是合并這2個值。當屏幕捕捉到有動作時,要添加新的隨機數(shù),然后檢測游戲是否結(jié)束。觸屏事件中,需要遍歷X、Y軸上值的情況來判斷添加值操作和合并操作。

      各函數(shù)屬性設置如下:

      point:分數(shù)統(tǒng)計,記錄本次游戲的分數(shù);

      cardsMap[x][y]:大布局下的小卡片位置;

      onTouch(View v,MotionEvent e):觸屏事件;

      addRandomNum():添加一個隨機數(shù)值的初始卡片;

      onClickListener():事件監(jiān)聽器;

      setNum(cardsMap[x][y].getNum()*2):設置卡片值;

      addScore(cardsMap[x][y].getNum()):添加分數(shù);

      swipeLeft():向左觸屏移動;swipeRight()等方法依次類推;

      checkComplete():檢查游戲是否完全結(jié)束,是,則激活游戲結(jié)束事件;

      對象:

      GameView:游戲主類,繼承自GridLayout。游戲的運行載體;

      Card:卡片對象,存放卡片相關(guān)的屬性和方法以及相關(guān)的屬性存取值方法。

      3.3 測試結(jié)果

      本設計各部分代碼完成后,在Android4.0模擬器和真機上進行檢查調(diào)試,各模塊功能正常運行。程序運行前手機界面如圖2所示。

      游戲結(jié)束前,需要檢查游戲是否結(jié)束。當程序檢測到滿足結(jié)束條件時,手機界面如圖3所示。

      此時,為了增強游戲趣味性,設計了最后的彈出頁面,鼓勵使用者繼續(xù)運行游戲。程序結(jié)束后彈出界面如圖4所示。

      4 結(jié)論

      本文從Java出發(fā),以Android為載體,采用面向?qū)ο蟮姆椒?,設計實現(xiàn)了游戲“2048”。通過安卓益智類小游戲“2048”的開發(fā),對游戲的界面以及邏輯的優(yōu)化實現(xiàn)上進行了詳細分析,其面向?qū)ο蟮倪壿嬎季S方式,預計在未來很長的一段時間內(nèi)都會是安卓游戲編程的主流思想。

      [1] 李剛.瘋狂Java講義[M].北京:電子工業(yè)出版社,2008:201-205.

      [2] 郝煥.Java輕松入門[M].北京:人民郵電出版社,2009:22-23.

      [3] 墨菲.Android開發(fā)入門教程[M].李雪飛,吳明暉,譯.北京:人民郵電出版社,2010:18-19.

      [4] 黃宇健,劉宏韜.Android項目開發(fā)范例大全[M].北京:中國鐵道出版社,2012:69-74.

      [5] Bruce Eckel.Thinking in Java[M].New York:Prentice Hall,2006:128-129.

      [6] Zhang Y,Huang G,Liu X,et al.Refactoring android Java code for on-demand computation offloading[J].Acm Sigplan Notices,2016,47(10):233-248.

      [7] Wei L.Design and Implementation of Chinese chess network game based on Java[J].Journal of Xiangyang Vocational & Technical College,2016(3):22-28.

      [8] Wang H,Jia YU.The Analysis and Review on Development Tools of Java(Ⅱ)[J].Journal of Jilin Institute of Chemical Technology,2016(3):39-46.

      (責任編輯 吳鴻霞)

      Design and Realization of Object-oriented Android Game "2048"

      WangJi1,3,XiongHui1,2*,YuFeiyang1,YeCangzhu2,GuanShoujun2

      (1School of Mathematics and Physics,Hubei Polytechnic University,Huangshi Hubei 435003;2Huangshi Sunshine Optoelectronic Co.Ltd.,Daye Hubei 435100;3China soft International Co.Ltd.,Beijing 100044)

      Android Intelligence games are very popular with the majority of game players and game developers because of its great interest and low development cost."2048" is a classic card game that adopts the JAVA language development and uses correct nested call of various interface layout,which improves the subjective sensation of users' experience.At the same time,importance is attached to background processing of different events triggered by players,system corresponding logical relationship is automatically adjusted and game main function is realized.The game is designed in the object-oriented way and implements game development based on Android.

      object-oriented;Android systems;game development

      2016-07-24

      湖北省大學生創(chuàng)新創(chuàng)業(yè)訓練計劃項目(項目編號:201510920023);湖北理工學院校級科研引進人才項目(項目編號:14xjz03R);湖北省知識創(chuàng)新專項(自然科學基金)(項目編號:2016CFC742)。

      汪季,本科生。

      10.3969/j.issn.2095-4565.2017.02.006

      TP319

      A

      2095-4565(2017)02-0024-04

      *通訊作者:熊輝,講師,博士,研究方向:光電子信息技術(shù)。

      猜你喜歡
      安卓卡片布局
      擺卡片
      倒過來的卡片
      文物表情包
      一張卡片
      學生天地(2018年20期)2018-09-10 17:11:20
      BP的可再生能源布局
      能源(2017年5期)2017-07-06 09:25:57
      一種基于安卓系統(tǒng)的手機側(cè)抓包分析方法
      VR布局
      卡片
      2015 我們這樣布局在探索中尋找突破
      Face++:布局刷臉生態(tài)
      东兴市| 东山县| 浦城县| 扎赉特旗| 普定县| 瑞丽市| 墨玉县| 邹城市| 太保市| 卢氏县| 汉阴县| 和平县| 肥乡县| 麦盖提县| 乐山市| 开封市| 界首市| 斗六市| 佛学| 台东市| 舞钢市| 栾川县| 仪征市| 天祝| 延津县| 长阳| 濮阳县| 广州市| 台中市| 德惠市| 察雅县| 玉树县| 务川| 桦南县| 嘉鱼县| 石嘴山市| 南宫市| 宁陕县| 莱西市| 文成县| 奈曼旗|