現在「Pending Developer Release.」となっている私のアプリでも使用しているのですが
プレイヤーさんとじゃんけんをするような仕組みを実装しました。
それだけでしたら、特にブログに残す必要もないと思ってたのですが
開発中の「脱出ゲーム」でも似たような仕組みを使用したので
今後も使用する可能性がありそうなので、メモを残しておきます。
ただし、もっと簡単な方法がある場合は教えて下さい。おねがいします。
処理の流れは単純で、
カンマ区切りの文字列を、カンマごとに配列に格納して、
都度配列からデータを取り出します。
Excel VBA的な発想でこれを思いついたのですが
どうやらcocos2d-x、C++にはSplit関数がないので自作しないといけないらしいので
以下サイト様より拝借。
C++ 文字列クラス std::string 入門
.hpp
1 2 3 4 5 6 7 8 |
//分割したパターンを格納する配列 CC_SYNTHESIZE(std::vector<std::string>, _vecPattern, VecPattern); //カウントアップ用 int _intPattern; //拝借したsplit関数 std::vector<std::string> split(const std::string &str, char sep); |
あとは簡単
.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
//配列にカンマ区切りのぐー、ちょき、ぱーを格納 _vecPattern = this->split("G,C,P,G,C,P,G", ','); //とりあえず0からスタート _intPattern = 0; <省略> //チェック用の文字列を抽出 auto strCheck = _vecPattern[_intPattern].c_str(); //カウントアップ(次回用) _intPattern +=1; if(strcmp(strCheck,"G")==0){ //相手がぐーです }else if(strcmp(strCheck,"C")==0){ //相手がちょきです }else if(strcmp(strCheck,"P")==0){ //相手がぱーです } |
さらに、格納したパターンをループする場合は、 以下の処理を適当なところにいれます。
1 2 3 4 5 6 7 |
//配列に格納している数とカウントアップした数が一緒なら初期化 if (_intPattern == _vecPattern.size()){ //初期化 _intPattern = 0; } |
こんな感じです。
Split関数さえあれば、結構簡単に実装できました。
あとは、敵キャラクターごとにデータベースなどに、カンマ区切りのパターンデータを
いれておいて、適宜取り出して使用すればいいと思います。