# endless baba is you ## 概要 - `baba is you` - `flag is win` - `(rock is push)` - `(wall is stop)` - **`baba`** - **`flag`** - **`(rock)`** - **`(wall)`** ### やること 1. オブジェクトの構造 1. ルール 1. 動かす 1. 描画 ### 流れ 1. オブジェクトの情報を読み込む 1. マップ描画 1. 生きているルールを抽出する - SがあればVCを探す 1. **YOU属性のオブジェクトがあったら動かせるようにする** 1. 動く 1. 勝利条件の確認 ### YOU属性を探す ``` std::string map[5][5] = [[' ','baba','is','you',' '],[],[],[],[]]; STOPPPPPPPPPPPPPPPP T * BABA(1) IS(2) YOU(3) * P O * FLAG(4) IS(5) WIN(6) * P P * baba(7) * flag(7) * P STOPPPPPPPPPPPPPPPP //////////////////// { "name" : "baba", "mode": "text", "text-image":"XXX.jpg", "object-image":"YYY.jpg", "attribute":"push", "muki": "up" } //////////////////// Class Baba(){ Baba(mode, muki= "d"){ load "text-image"(./hoge.jpg); load "object-image"(./hogehoge.jpg); } ~Baba(){} } ``` ``` --- class Baba { constructor(mode, muki) { this.mode = mode; this.image = { object: "hoge.jpg", text: "fuga.jpg" } this.muki = muki || "d"; } display() { return this.image[this.mode]; } } const baba = new Baba("text"); const baba1 = new Baba("object","right"); const is = new Is("text"); const you = new You("text"); const flag = new Flag("object"); const map = [ [{},{},{},{},{}], [{},{BABA},{},{},{}], [{},{},{},{},{}], [{},baba,{},{},{}], [{},{},{},{},{}] ]; ``` ``` //マップに何があるか読み込む //生きているルールを確認する // BABA IS YOU // FLAG IS WIN //ルール一つ一つに対して //if IS -> function IS() function IS(){ //生きているルールがある //目的語を抽出する e.g YOU ,id =2 //主語に属性を追加する e.g BABA, id=1 //BABAのオブジェクト(baba)があるか確認する e.g. baba, id=3 //あったらBABAのオブジェクトにYOU属性を付与する id=3のbabaのarribute属性にyouを追加 } //勝利条件の確認 //1. ルールにX IS YOUがある //2. ルールにY IS WINがある //3. Xのオブジェクトがある //4. Yのオブジェクトがある //YOU属性をもつオブジェクトの位置を抽出 e.g. baba = 1,4 //WIN属性をもつオブジェクトの位置を抽出 e.g flag = 1,4 //YOU・WIN属性のオブジェクトの位置が同じ e.g. std::cout << "congratulation!!" //入力 //キーボード入力 //std::cin >> input; //if input ==`d` > //YOU属性を抽出する //一つ一つに対して処理 //if !(S func動かせるか判定) //idをもらう baba rock //funcオブジェクト操作(右, id="baba") //fuctオブジェクト操作(右, id="rock") //int func動かせるか判定(std::string 右) // (右)の場合、配列の要素が[][MAX]ならfalse // (左)の場合、配列の要素が[0][]ならfalse // (上)の場合、配列の要素が[0][]ならfalse // (下)の場合、配列の要素が[MAX][0]ならfalse //if (右)がSTOP属性を持つオブジェクト // return FALSE // if (右)が空白 //funcオブジェクト操作 // return TRUE; // else if (右)にPUSHじゃないオブジェクトがある // return TRUE; // if (右)にPUSHオブジェクトある // int func動かせるか判定(インスタンス 右のもの) //if STOP属性の間(右)に空白orPUSHじゃない物 /------------------------------/ //return TRUE; //return FALSE; くれあちゃん n, n+1, n+2 n+2が動けますか n+1が動けますか nが動けますか //int funcオブジェクト操作(インスタンスid, std::string 右){ //e.g. id=3 , right //動かすオブジェクトの要素 Baba[+1][]する //if up //動かすオブジェクトの要素 Baba[-1][]する //if left //動かすオブジェクトの要素 Baba[][-1]する //if right //動かすオブジェクトの要素 Baba[][+1]する //if down //動かすオブジェクトの要素 Baba[+1][]する } //描画 //ルールの更新、入力、描画、勝利条件の確認 Class ObjectController(){ } ``` ``` const array = [ [{},{},{},{},{}], [{},{},{},{},{}], [{},{},{},{},{}], [{},{},{},{},{}], [{},{},{},{},{}] ]; ``` --- ### 1.オブジェクトの構造 - objectかtextか - IMG - object - 向き:上下左右 - text - subject:```baba```,```rock```, ```flag```,```wall``` - verb: ```is```,```(has)```,```(make)``` - attribute:```WIN```,```YOU```,```PUSH```,```STOP``` - 助詞:```on``` - 属性 - YOU属性 - プレイヤーが動かせる - PUSH属性 - 押せる - STOP属性 - 動かない - WIN属性 - YOU属性のものが触れたら勝利条件を満たす ### 2.ルール - 生きているルールを確認する - SVOの順で左からor上から並んでいる - SVOVOは最初のSVOのみ - baba is babaとbaba is flagは両立しない ### 3.動かす ### 4.描画 --- ### 後の機能 - 戻る機能