---
# System prepended metadata

title: endless baba is you

---

# 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.描画


---

### 後の機能

- 戻る機能
