# 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.描画
---
### 後の機能
- 戻る機能