# じゃんけん ## フローチャート ```mermaid graph TD start([開始]) input[入力を受け取る] check{不正な入力?} stop([終了]) cpu[敵の手をランダムに決定] player_hand[プレイヤーの手を決定] cmp{Win or Lose or draw} win[プレイヤー勝利処理] lose[プレイヤー敗北処理] draw[あいこの処理] start --> input input --> player_hand player_hand --> check check -- yes --> input check -- no --> cpu cpu --> cmp cmp -- win --> win win --> stop cmp -- lose --> lose lose --> stop cmp -- draw --> draw draw --> input ``` ## 分担例(3人用) ### 1人目 ```cpp= void player_win(); void player_lose(); void draw(); ``` ### 2人目 ```cpp= enum class Hand; enum class BattleResult string input(); Hand determine_player_hand(string input); Hand determine_enemy_hand_random(); BattleResult compare_hands(Hand player, Hand enemy); ``` ### 3人目 ```cpp= int main(); ``` ## データ構造 ### 手を表す ```cpp= enum class Hand { Paper, Rock, Scissors, Unexpected, }; ``` ### 勝敗を表す ```cpp= enum class BattleResult { Win, Lose, Draw, } ``` ## 関数 ### 入力を受け取る関数 ```cpp= string input() {} ``` 1. 標準出力に手の指定方法を出力する 1. 標準入力から手の指定を受け取る 1. 文字列を返す ### プレイヤーの手を決定する関数 ```cpp= Hand determine_player_hand(string input) {} ``` `input`が - パーを表していれば`Hand::Paper` - グーを表していれば`Hand::Rock` - チョキを表していれば`Hand::Scissors` - それ以外であれば`Hand::Unexpected` を返す ### 敵の手をランダムに決定する関数 ```cpp= Hand determine_enemy_hand_random() {} ``` ランダムに`Hand::Paper`, `Hand::Rock`, `Hand::Scissors` のいずれかを返す。 ### 手を比較する関数 ```cpp= BattleResult compare_hands(Hand player, Hand enemy) {} ``` プレイヤーの手と敵の手を受け取り、勝敗を返す。 ### プレイヤー勝利処理 ```cpp= void player_win() {} ``` プレイヤーが勝利したことを標準出力に出力する ### プレイヤー敗北処理 ```cpp= void player_lose() {} ``` プレイヤーが敗北したことを標準出力に出力する ### あいこ処理関数 ```cpp= void draw() {} ``` あいこであったことを標準出力に出力する