U8's AppLabo

swift,cocos2d-x,Unityを使ったiOSアプリ作成の備忘録

未分類

cocos2d-x でマインスイーパーを作ってみた 〜その4

投稿日:2016年10月8日 更新日:

地雷のかくされたパネルをタッチすると赤色、それ以外は灰色に変化する様にプログラムを修正する。

まずパネルに地雷が隠されているかどうかを設定するためにPanelクラスのpublicに
bool bombを追加。パネルに地雷が隠されていればbombの値をtrueにする。

class Panel:public cocos2d::Sprite{  
public: 
          :
          :
    bool bomb;   //追加
    
    CREATE_FUNC(Panel);
    
};

次にtouchEvent()を以下の様に修正

void Panel::touchEvent(){
    
    Color3B _color = Color3B::GRAY;

    if(bomb){
        _color =Color3B::RED;
    }
    
    this->setColor(_color);
      
}

まず地雷を生成する。
void GameScene::makeMap()を以下のコードに変更

void GameScene::makeMap(){
    //地雷を作成
    std::vector bombs;
    for (int i = 0; i< _cellLength * _cellLength; i++) {
        bool bomb = false;
        
        if (i<10) {
            bomb = true;
        }
        
        bombs.push_back(bomb);
        
    }

    for(int y = 0;y < _cellLength;y++){
        for(int x = 0;x < _cellLength;x++){ Rect _rect = Rect(0,0,80,80); //パネルの大きさ auto _panel = Panel::create(); _panel->setTextureRect(_rect);
            _panel->setColor(Color3B::WHITE);
            _panel->setPosition(45 +  82 * x,300 + 82 * y);
            _panel->setTag(x + _cellLength * y + 1);

            //地雷をセットする
            int _index = std::uniform_int_distribution(0,(int)bombs.size() - 1)(_mt);
            bool _bomb = bombs[_index];
            bombs.erase(bombs.begin() + _index);
            _panel->bomb = _bomb;
            
            this->addChild(_panel);
        }
        
    }
}

実行して、適当にパネルをタップ

tekitou

上記の様になり成功!!

しかし、このままでは地雷の位置が分からずゲームにならないので、次は地雷の位置を知るためのヒントを作成する。

フッターアド




フッターアド




-未分類
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

cocos2d-x でマインスイーパーを作ってみた 〜その3

それでは今回はパネルにタッチすると色が変わる様にします。 今回はパネルをPanelクラスとして用意する。 HelloWorld.hとHelloWorld.cppに以下のコードを追加する。 class …

no image

【cocos2d-x】 シングルトン

アプリを作成していると、複数のSceneやClassから一つのデータを参照したくなることが 多々あります。そんな時はシングルトンオブジェクトを作っておくととても便利です。 class MainData …

no image

【cocos2d-x】現在の日時の取得方法( C++ )

cocos2d-xで年月日(曜日)と時間を取得するには以下の様に コードを書く。 time_t now = time(NULL); struct tm *today = localtime(& …

実機でのテスト時に画像読み込みエラー

シミュレータでは問題なく動作するのに実機でテストすると何故かエラーになる。 コンソールのエラーメッセを見るとどうもスプライトに画像が設定されていないのが 原因。画像ファイルのリンク?が上手く行ってない …

no image

文字列がNULLかどうか調べたい cocos2d-x ( C++ )

文字列strが空かどうか調べて処理を実行したい   if ( str == “” ){ hoge() } ではうまくいかない。 以下の様に文字列の文字数を調べることで判定すると上手く行く if( !s …