akochanに学ぼう

# akochanとは？
[**akochan**](https://github.com/critter-mj/akochan)は麻雀のAIの名前です。
どうやら天鳳では7~9段くらいの実力があるそう。（となると、雀魂だと雀聖くらいかな？）
Windowsだと[akochan-reviewer](https://mahjongsoul.club/content/akochan-reviewer-%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%80%81%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%ABwindowspc%E3%81%A7%E9%9B%80%E9%AD%82%E7%89%8C%E8%AD%9C%E8%A7%A3%E6%9E%90%E3%81%99%E3%82%8B%E6%89%8B%E9%A0%86)というソフトを用いることで、比較的簡単に解析結果を扱うことができます！

（その際、PCの雀魂に[TamperMonkey](https://www.tampermonkey.net/)という拡張機能をブラウザに追加し、`json`ファイルを取得する必要あり)

# 打ち筋の解説
フローを頑張って書いてみます。

局の進行にともなって、大きく3段階に分かれています。

1. [1段目から9巡目](#1段目から9巡目)
2. [9巡目から3段目](#9巡目から3段目)
3. [3段目以降](#3段目以降)

また、最後に[字牌処理](#字牌処理について)の順番をまとめておきました。

## 1段目から9巡目
```mermaid
graph TB
    classDef green fill:#7BCCAC,fill-opacity:0.5
    classDef orange fill:#ffa23e,fill-opacity:0.5
    classDef opred fill:red,fill-opacity:0.2
    subgraph 判断
        Ori(降りましょう):::orange
        Oshi[リーチ!! or 押し!!]:::orange
    end
    subgraph 処理
        shori{5ブロックある?}
            shori-->|はい|straight[くっつき牌を残して進行]:::opred
            shori-->|いいえ|kouritsu[牌効率へ]:::green
    end
    tempai{聴牌している?}
    tempai -->|はい|Oshi
    tempai -->|いいえ|riich{誰かリーチしている?}
    riich -->|はい|Ori
    riich -->|いいえ|naki{誰か2副露している?}
    naki-->|はい|Ori
    naki-->|いいえ|shori
    
    linkStyle 1,3,5,7 fill:none,stroke-width:3px,stroke:blue
    linkStyle 0,2,4,6 fill:none,stroke-width:3px,stroke:red
```

## 9巡目から3段目
```mermaid
graph TB
    classDef green fill:#7BCCAC,fill-opacity:0.5
    classDef orange fill:#ffa23e,fill-opacity:0.5
    classDef opred fill:red,fill-opacity:0.2
    subgraph 判断
        Ori(降りましょう):::orange
        Oshi[リーチ!! or 押し!!]:::orange
    end
    subgraph 処理
        shori{5ブロックある?}
            shori-->|はい|straight[安全牌を残して進行]:::opred
            shori-->|いいえ|kouritsu[牌効率へ]:::green
    end
    tempai{聴牌している?}
    tempai -->|はい|Oshi
    tempai -->|いいえ|riich{誰かリーチしている?}
    riich -->|はい|Ori
    riich -->|いいえ|naki{誰か1副露している?}
    naki-->|はい|Ori
    naki-->|いいえ|shori
    linkStyle 1,3,5,7 fill:none,stroke-width:3px,stroke:blue
    linkStyle 0,2,4,6 fill:none,stroke-width:3px,stroke:red
```

## 3段目以降
```mermaid
graph TB
    classDef green fill:#7BCCAC,fill-opacity:0.5
    classDef orange fill:#ffa23e,fill-opacity:0.5
    subgraph 判断
        Ori(降りましょう):::orange 
        Oshi[押し!!]:::orange
    end
    tempai{聴牌している?}
    uki-->|いいえ|Ori
    tempai -->|はい|Oshi
    ishanten{一向聴ですか?}
    tempai -->|いいえ|ishanten

    ba{敵に副露やリーチはありませんか?}
    ishanten-->|はい|ba
    ba-->|いいえ|Ori
    uki{浮牌は安全ですか?}
    ba-->|はい|uki
    uki-->|はい|Oshi
    ishanten -->|いいえ|Ori
    
    
    
    linkStyle 0,2,4,7 fill:none,stroke-width:3px,stroke:blue
    linkStyle 1,3,5,6 fill:none,stroke-width:3px,stroke:red
```

# 字牌処理について
最後にakochanの字牌処理順について簡単にまとめておきます。

```mermaid
graph LR
    subgraph 役牌
        yaku{場に既に出ている牌はありますか?}
        yaku -->|はい|yaku1[残り枚数の少ない牌から切っていきましょう]
        yaku -->|いいえ|yaku2[全体役牌から順に切っていきましょう]
    end
    subgraph オタ風
        ota{場に既に出ている牌はありますか?}
        ota -->|はい|ota1[残り枚数の少ない牌から切っていきましょう]
        ota -->|いいえ|ota2[下家に近い順に切っていきましょう]
    end
    kind{オタ風を持っていますか?}
    kind -->|いいえ|yaku
    kind -->|はい|ota

    linkStyle 1,3,4 fill:none,stroke-width:3px,stroke:blue
    linkStyle 0,2,5 fill:none,stroke-width:3px,stroke:red
```