亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Android的2048小游戲的簡單實現(xiàn)

        2017-07-05 20:02:50翟亞靜成麗君
        電子技術與軟件工程 2017年12期
        關鍵詞:實現(xiàn)游戲

        翟亞靜++成麗君

        摘 要2048是目前比較流行的一款適用于各類人群的益智小游戲,在原來設計基礎上市場上推出了它的各種新玩法,比如與俄羅斯方塊、消消樂、連連看等游戲的結合令2048小游戲在一定程度上增添了更多趣味性。本文采用Java語言和Android平臺實現(xiàn)了 2048經(jīng)典模式的運行,描寫了游戲的簡單實現(xiàn)。

        【關鍵詞】游戲 益智 實現(xiàn)

        1 引言

        Android 智能手機目前擁有最多的用戶使用群體,隨著它的不斷更新與進步,基于Android的手機游戲也正在經(jīng)歷從簡單到復雜的進化過程。通過與俄羅斯方塊、消消樂、連連看等游戲思想的結合,使2048小游戲在經(jīng)典模式的玩法上推出了形式和趣味更強大的眾多新玩法。本文采用Java語言,通過Android平臺實現(xiàn)了 2048經(jīng)典模式的運行,描寫了游戲的簡單實現(xiàn),以方便實現(xiàn)2048小游戲的后續(xù)升級開發(fā)。

        2 設計

        2.1 算法設計

        (1)2048游戲界面為一個4*4的方形格子,在格子上方顯示當前分數(shù),其下方為最高分。右上角可選擇模式,分小裙裙和經(jīng)典模式。開始時隨機出現(xiàn)兩個數(shù)字,出現(xiàn)的數(shù)字僅可能為2或4,設置出現(xiàn)2的概率大于4。

        (2)用戶可以上下左右四個方向用手指滑動方塊,若方塊移動方向上有相同的數(shù)字則合并,支持同時合并但不支持連續(xù)合并,合并消去的格子之和即為所得分數(shù)。

        (3)每次移動一步,空格上隨機出現(xiàn)一個數(shù)字(可能為2或者4)。

        (4)若格子被數(shù)字填滿,則游戲結束,用戶可以選擇重新開始或者退出游戲。

        2.2 程序流程圖

        如圖1所示。

        2.3 界面實現(xiàn)

        如圖2所示。

        3 核心代碼及相關算法解釋

        setOnTouchListener(new View.OnTouchListener() {

        //設置位置起始點和偏移點

        //算法邏輯:由于手指在滑動方向會有偏差,一般不會精準的向四個方向滑動,//所以判斷是水平方向還是垂直方向的意圖,當水平方向偏移量大于垂直方向時表明用戶是水//平滑動意圖。同時我們只需要知道兩點,即:用戶手指按下的坐標點和手指離開時的坐標點,

        //通過進行比對,從而識別出用戶的意圖。

        private float startX, startY, offsetX, offsetY;

        @Override

        public boolean onTouch(View v, MotionEvent event) {

        switch (event.getAction()) {

        //手指按下

        case MotionEvent.ACTION_DOWN:

        //按下時的x,y坐標

        startX = event.getX();

        startY = event.getY();

        break;

        //手指離開

        case MotionEvent.ACTION_UP:

        //計算手指離開時的偏移量(離開時坐標點-按下時坐標點),從而判斷方塊是往哪個方向移動

        offsetX = event.getX() - startX;

        offsetY = event.getY() - startY;

        //識別移動方向,若offsetX的絕對值大于offsetY的,則水平移動

        if(Math.abs(offsetX) > Math.abs(offsetY)){

        //為避免誤差,將范圍設置為<-5

        if(offsetX < -5){

        toLeft();

        }

        else if(offsetX > 5){

        toRight();

        }

        }

        else {

        if(offsetY < -5){

        toUp();

        }

        else if(offsetY > 5){

        toDown();

        }

        }

        break;

        default:

        break;

        }

        return true;

        }

        });

        }

        //隨機數(shù)

        private void addRandomNum(){

        //新建一個list存放空的方塊,操作之前清空

        Points.clear();

        //對所有位置進行遍歷

        for (int i = 0; i < 4; i++) {

        for (int j = 0; j < 4; j++) {

        //空方塊此時才可以添加值,有值時不進行添加

        if (cardsMap[j][i].getNum() <= 0){

        Points.add(new Point(j, i));

        }

        }

        }

        //取方塊。用Math.random()返回一個0-1的數(shù),當大于0.3時,值是2否則為4

        Point p = Points.remove((int)(Math.random() * Points.size()));

        cardsMap[p.x][p.y].setNum(Math.random()> 0.3 ? 2 : 4);

        }

        //給出方塊向左移動時的三種情況,其余三個移動方向同理

        // 1)左邊為空

        //2)左邊碰到的第一個數(shù)值相等,則相加

        //3)左邊碰到的第一個數(shù)值不相等,則將其靠左

        private void toLeft(){

        boolean addFlag = false;

        for (int y = 0; y < 4; y++) {

        for (int x = 0; x < 4; x++) {

        for (int x1 = x + 1; x1 < 4; x1++){

        if (cardsMap[x1][y].getNum() > 0){

        //如果當前位置上為0,就放在該位置上

        if(cardsMap[x][y].getNum() <= 0){

        cardsMap[x][y].setNum(cardsMap[x1][y].getNum());

        //將原來位置上的值清除

        cardsMap[x1][y].setNum(0);

        //繼續(xù)遍歷

        x--;

        addFlag = true;

        }

        //有值且相同時,合并

        else if (cardsMap[x][y].getNum() == cardsMap[x1][y].getNum()){

        cardsMap[x][y].setNum(cardsMap[x][y].getNum()*2);

        //將原來位置上的值清除

        cardsMap[x1][y].setNum(0);

        MainActivity.getMainActivity().addScore(cardsMap[x][y].getNum());

        addFlag = true;

        }

        break;

        }

        }

        }

        }

        if(addFlag == true){

        addRandomNum();

        endCheck();

        }

        }

        4 結語

        本文描述了2048小游戲采用Java語言+Eclipse+ADT+JDK開發(fā)的關鍵算法,不僅游戲玩法簡單易操作,實現(xiàn)也相對簡單,程序開發(fā)僅需要平常使用的安卓操作系統(tǒng)手機進行測試,適合我們初學者提高對Android知識及算法的掌握與應用。

        參考文獻

        [1]Android實訓案例(四).https://wenku.baidu.com/view/5e77b1c8ac51f01dc281e53a580216fc700a5373.html.2016-10-17/2017-05-06.

        [2]郭霖.第一行代碼[Android(第2版)[M].人民郵電出版社,2012.

        作者簡介

        翟亞靜(1995-),女,山西省長治市人。山西農(nóng)業(yè)大學軟件學院2014級在讀本科生。主要研究方向為軟件工程。

        作者單位

        山西農(nóng)業(yè)大學軟件學院 山西省晉中市 030801

        猜你喜歡
        實現(xiàn)游戲
        游戲
        數(shù)獨游戲
        信息系統(tǒng)安全評價系統(tǒng)設計及實現(xiàn)
        高校聲像檔案數(shù)字化管理的實現(xiàn)路徑
        辦公室人員尚需制定個人發(fā)展規(guī)劃
        蘇州信息學院教務管理系統(tǒng)的設計與實現(xiàn)
        瘋狂的游戲
        飛碟探索(2016年11期)2016-11-14 19:34:47
        如何實現(xiàn)人企合一
        淺析鐵路通信傳輸?shù)臉嫵杉皩崿F(xiàn)方法
        爆笑游戲
        国产成人精品999在线观看| 国产精品国产自产自拍高清av| 国产香港明星裸体xxxx视频| 中文亚洲欧美日韩无线码| 国产污污视频| 国产日产免费在线视频| 女同精品一区二区久久| 亚洲av日韩av无码污污网站 | 日韩av在线毛片| 麻豆夫妻在线视频观看| 国产毛片黄片一区二区三区 | 色老汉亚洲av影院天天精品 | 亚洲精品国产精品国自产观看| 吃下面吃胸在线看无码| 中文乱码字幕在线亚洲av | 久久综合精品国产一区二区三区无码 | 丝袜美腿在线观看一区| 性高湖久久久久久久久| 久久免费大片| 极品新娘高清在线观看| 亚洲av成人无码久久精品老人| 真实单亲乱l仑对白视频| 久久久久久久尹人综合网亚洲| 蜜桃夜夜爽天天爽三区麻豆av| 国产成人无码精品久久久露脸| 粗大的内捧猛烈进出在线视频 | 亚洲av综合av国产av中文| 超薄肉色丝袜一区二区| 久久久亚洲精品免费视频| 色熟妇人妻久久中文字幕| 色偷偷噜噜噜亚洲男人| 97中文字幕在线观看| 日本在线一区二区免费| 免费人成在线观看网站| 成年视频国产免费观看| 在线视频日韩精品三区| 成人午夜高潮a∨猛片| 真实国产乱啪福利露脸| 日本一区二区三区在线 | 北岛玲亚洲一区二区三区| 337p粉嫩日本欧洲亚洲大胆|