【來寫個2048吧】—— 移動演算法與隨機數字產生

來源:互聯網
上載者:User

標籤:遊戲開發   cocos2d-x   2048   c++   

一、移動演算法
其實2048的移動演算法蠻簡單,看代碼很容易明白,就不多說了。
向左滑動
//左滑動bool GameScene:: doLeft (){        //判斷有沒有發生移動        bool isMove = false ;        for ( int y = 0 ; y < 4; y++)        {               for ( int x = 0 ; x < 4; x++)               {                      for ( int x1 = x +1 ; x1 < 4; x1++)                      {                            if ( cardArr [x1 ][ y]-> getNumber () > 0 )                            {                                   if ( cardArr [x ][ y]-> getNumber () <= 0 )                                   {                                          cardArr [x ][ y]-> setNumber (cardArr [ x1][ y ]->getNumber ());                                          cardArr [x1 ][ y]-> setNumber (0 );                                          x --;                                          isMove = true;                                   }                                   else if ( cardArr[ x ][y ]-> getNumber() == cardArr [ x1][ y ]->getNumber ())                                   {                                          cardArr [ x][ y ]->setNumber ( cardArr[ x ][y ]-> getNumber() * 2 );                                          cardArr [x1 ][ y]-> setNumber (0 );                                          isMove = true;                                   }                                   break ;                            }                      }               }        }        return isMove ;}

向右滑動
//右滑動bool GameScene::doRight(){//判斷有沒有發生移動bool isMove = false;for (int y = 0; y < 4; y++){for (int x = 3; x >= 0; x--){for (int x1 = x-1; x1>=0; x1--){if (cardArr[x1][y]->getNumber() > 0){if (cardArr[x][y]->getNumber() <= 0){cardArr[x][y]->setNumber(cardArr[x1][y]->getNumber());cardArr[x1][y]->setNumber(0);x++;isMove = true;}else if(cardArr[x][y]->getNumber() == cardArr[x1][y]->getNumber()){cardArr[x][y]->setNumber(cardArr[x][y]->getNumber() * 2);cardArr[x1][y]->setNumber(0);isMove = true;}break;}}}}return isMove;}

向上滑動
//上滑動bool GameScene::doUp(){//判斷有沒有發生移動bool isMove = false;for (int x = 0; x < 4; x++){for (int y = 3; y >= 0; y--){for (int y1 = y-1; y1>=0; y1--){if (cardArr[x][y1]->getNumber() > 0){if (cardArr[x][y]->getNumber() <= 0){cardArr[x][y]->setNumber(cardArr[x][y1]->getNumber());cardArr[x][y1]->setNumber(0);y++;isMove = true;}else if(cardArr[x][y]->getNumber() == cardArr[x][y1]->getNumber()){cardArr[x][y]->setNumber(cardArr[x][y]->getNumber() * 2);cardArr[x][y1]->setNumber(0);isMove = true;}break;}}}}return isMove;}

向下滑動
//下滑動bool GameScene::doDown(){//判斷有沒有發生移動bool isMove = false;for (int x = 0; x < 4; x++){for (int y = 0; y <4; y++){for (int y1 = y+1; y1<4; y1++){if (cardArr[x][y1]->getNumber() > 0){if (cardArr[x][y]->getNumber() <= 0){cardArr[x][y]->setNumber(cardArr[x][y1]->getNumber());cardArr[x][y1]->setNumber(0);y--;isMove = true;}else if(cardArr[x][y]->getNumber() == cardArr[x][y1]->getNumber()){cardArr[x][y]->setNumber(cardArr[x][y]->getNumber() * 2);cardArr[x][y1]->setNumber(0);isMove = true;}break;}}}}return isMove;}
從代碼中可以看出,主要是判斷目標卡片和後一個卡片,目標卡片為0,這後一個卡片等於目標卡片,如果目標卡片與後一個卡片相等,則目標卡片乘2

二、產生隨機卡片
//建立產生隨機卡片void GameScene:: createCardNumber (){        int i = CCRANDOM_0_1 () * 4 ;         //產生0~3隨機數        int j = CCRANDOM_0_1 () * 4 ;        //判斷是否已經存在        if ( cardArr [i ][ j]-> getNumber () > 0 )        {               createCardNumber ();        }        else        {               //2和4的產生率為9:1               cardArr [i ][ j]-> setNumber (CCRANDOM_0_1 ()* 10 < 1 ? 4 : 2);        }}

然後在init()後面添加兩個該函數, 然後在每滑動一次後調用一次該函數。




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.