Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Power Virtual Agents で wordle を作る

MiyakeMito
August 20, 2022

Power Virtual Agents で wordle を作る

MiyakeMito

August 20, 2022
Tweet

More Decks by MiyakeMito

Other Decks in Technology

Transcript

  1. つまりどういうことだってばよ? A B C D E A L B U

    M 文字と位置が 合ってるから [緑色] 文字のみ 合ってるから [黄色] 答えに存在しな い文字は [グレー] • 隠された 5文字の単語を 当てるゲーム • Hit (位置と文字)は 色でわかる 単純だけど おもしろい [答え] [回答]
  2. 全体構成 ①Initial 処理 ③Main 処理1 ⑤Main 処理2 Wordleの過去問を リスト化 ②Initial

    処理 A B C D E Wordleやりたい A L B U M A L B A M ④,⑥Main 処理 A B C D E A L B U M ランダムに 1つ選択し 「答え」を決定 [答えリスト] A B C D E A D O B E A D O B E 「回答」と「答え]を比較 A D O B E トリガーフレーズ 「回答」と「答え]を比較 最大6回実行 最大6回実行
  3. 構成 ▪ 3つのトピック用意 ▪ Initial(初期化)処理 ➢ 「答えリスト」から今回の答えをランダムで選択 ▪ Main(主)処理1と、Main 処理2

    ➢ Main処理1⇒ Main処理2⇒ Main処理1⇒ Main処理2… でセルフターン制の処理を構築 ➢ ユーザーからの「回答」と、「答え」を比較し結果を返答
  4. 全体構成 ①Initial 処理 ③Main 処理1 ⑤Main 処理2 Wordleの過去問を リスト化 ②Initial

    処理 A B C D E Wordleやりたい A L B U M A L B A M ④,⑥Main 処理 A B C D E A L B U M ランダムに 1つ選択し 「答え」を決定 [答えリスト] A B C D E A D O B E A D O B E 「回答」と「答え]を比較 A D O B E トリガーフレーズ 「回答」と「答え]を比較 最大6回実行 最大6回実行
  5. Initial 処理 ◼ Power Virtual Agents 側 ① トリガーフレーズを受け取り処理開始 ◼

    Power Automate 側 ① 「答えリスト」から、今回の「答え」をランダムで選択 ② 変数の初期化 ➢ 回答履歴 ⁃ ユーザーの6回までの「回答」を履歴として配列で保持
  6. 配列からランダムに要素を抽出 [配列]?[添え字] ➢ 配列の要素を添え字で指定可能 rand() ➢ 引数1から (引数2-1) の範囲でランダムな整数 を返す

    ➢ 0から (配列の要素数-1) のランダム添え字 POINT [ "APPLE", "POINT", "CIGAR", "REBUT", "SISSY", "HUMPH" ] 答えリスト outputs('target_text')?[rand(0,length(outputs('target_text')))]
  7. [回答]履歴 はぁ、またハズレ。 そういえば、今までの回答の履歴ってどうしてるの? だから、Power Virtual Agents では、"ALUBM","ADOBE" のように、 カンマ区切りの文字列で保持してるよ。 Power

    Automate 側で、Split(回答履歴, ',') 関数で、 配列に変換して処理しているよ Power Virtual Agents では配列型の変数が定義できないよ
  8. 全体構成 ①Initial 処理 ③Main 処理1 ⑤Main 処理2 Wordleの過去問を リスト化 ②Initial

    処理 A B C D E Wordleやりたい A L B U M A L B A M ④,⑥Main 処理 A B C D E A L B U M ランダムに 1つ選択し 「答え」を決定 [答えリスト] A B C D E A D O B E A D O B E 「回答」と「答え]を比較 A D O B E トリガーフレーズ 「回答」と「答え]を比較 最大6回実行 最大6回実行
  9. Power Virtual Agents 側 ① ユーザーに「回答」を質問する ② Power Autoamte フローを呼び出し、

    「回答」と「答え」を比較 ③ 正解の場合、次のゲームを呼び出す ④ 不正解の場合、次の入力(ターン)を 呼び出す 回答を質問 フロー呼出 初期処理 Main2 処理呼出 正解 不正解 答え合わせするよ!
  10. 1回目「回答」の答え合わせ Power Automate 側 ① 「答え」を1文字ずつの配列に分解 ② 「回答」履歴+今回の「回答」を、配 列に変換 ③

    1回目の「回答」と「答え」を比較し、 表示設定 : ④ 6回目の・・・ ⑤ 「回答」と「答え」が一致する場合、 正解フラグをONにする 「答え」を分解 配列は受け渡し できないよ! 2回目「回答」の答え合わせ 6回目「回答」の答え合わせ 正解の判定 : 配列は受け渡し できないよ!
  11. 文字列を1文字ずつの配列に分割 substring(outputs('target_text'),item(),1) range(0,length(outputs('target_text'))) ABCDE [ "A", "B", "C", "D", "E"

    ] Range() ➢ 引数1 から始まり 引数2 の範囲で整数の配列を返す substring() ➢ 引数1 から、引数2 の位置から始まる 引数3 の長さの文 字を返す [ 0, 1, 2, 3, 4 ]
  12. 選択 Action ➢ [開始] に指定した配列内のオブジェクトの形状を変換する 配列内の要素の数は変えられないよ [ { "make": "Abarth",

    "model": "595 Competizione", "hp": 180, "cc": 1400 }, { "make": "Alfa Romeo", "model": "Giulia", "hp": 320, "cc": 2000 } ] [ { "Abarth" : "595 Competizione" }, { "Alfa Romeo" : "Giulia" } ]
  13. 答え合わせ処理 if(equals(substring(outputs('回答履歴+回答_array ')? [variables('intCount')],item(),1), substring(outputs('答え'),item(),1)), outputs('背景色1'), if(contains(outputs('答え'), substring(outputs('回答履歴+回答_array')? [variables('intCount')],item(),1)), outputs('背景色2'),

    outputs('背景色3'))) range(0,length(outputs('回答'))) [ "A", "B", "C", "D", "E" ] [ "A", "D", "O", "B", "E" ] 答え 回答 A L B A M A D O B E 回答履歴 equals contains 答えは色情報として保持するよ
  14. 最後に Power Virtual Agetns と Power Automate で Wordle を作る①

    https://qiita.com/MiyakeMito/items/f71a2541a5d2c284af9c Power Virtual Agetns と Power Automate で Wordle を作る② https://qiita.com/MiyakeMito/items/f41bba6a388b13ee9643 https://github.com/MiyakeMito/Repository インポート方法 https://qiita.com/MiyakeMito/items/b2df9ca9832fbce26a0d