$30 off During Our Annual Pro Sale. View Details »

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. Power Virtual Agents で Wordle を作る JPPGB #2

  2. 今日の目標 Power Virtual Agents for Teams で ゲームを作る方法を 説明します

  3. Miyake Mito 気ままに勉強会 https://kimamani.connpass.com/ @MiTo60448639 https://qiita.com/MiyakeMito 株式会社アイシーソフト Technical Manager www.icsoft.jp

    https://speakerdeck.com/ miyakemito
  4. Power Automateと Power Virtual Agents でゲームを作りました ⚫ オセロ

  5. ⚫ 神経衰弱 ⚫ どうぶつ将棋

  6. 本日は Wordleについて 解説します ⚫ 神経衰弱

  7. 免責事項 当スライドは、 2022年8月現在のバージョンでの情報です 今後のアップデート等により、 仕様変更する可能性があります また、私の見解による内容が含まれます 間違いなどありましたらご指摘ください

  8. Wordle とは

  9. Wordleとは ◼ 5文字の言葉当てゲーム ◼ 場所が当たっていれば [緑色] ◼ 場所が異なるが、どこかに当てはまる 場合は [黄色]

    で表示 ◼ チャレンジは6回まで
  10. つまりどういうことだってばよ? A B C D E A L B U

    M 文字と位置が 合ってるから [緑色] 文字のみ 合ってるから [黄色] 答えに存在しな い文字は [グレー] • 隠された 5文字の単語を 当てるゲーム • Hit (位置と文字)は 色でわかる 単純だけど おもしろい [答え] [回答]
  11. ゲームはおもしろくないとね! でも、Wordle は1日に一回しかチャレンジできない もっとやりたい!練習したい! OK!マカセロ!

  12. 構成

  13. 全体構成 ①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回実行
  14. やくそく事 ゲーム中のユーザーの応答は「回答」と記載するよ とかだよ ゲームごとの正解を[答え]と記載するよ だよ A L B U M

    A D O B E A B C D E
  15. 構成 ▪ 3つのトピック用意 ▪ Initial(初期化)処理 ➢ 「答えリスト」から今回の答えをランダムで選択 ▪ Main(主)処理1と、Main 処理2

    ➢ Main処理1⇒ Main処理2⇒ Main処理1⇒ Main処理2… でセルフターン制の処理を構築 ➢ ユーザーからの「回答」と、「答え」を比較し結果を返答
  16. ストレスフリー 入力してから、結果を待つまでの待ち時間はストレスだよ Power Virtual Agents の高速化は難しいよ。 だから、Power Automate フローの高速化するんだよ!

  17. 処理の高速化 Apply to each ちょっと遅い問題 Apply to eachの処理実行速度は 遅いです。 これを許容しなくてはならない局

    面はありますが、回避できるシー ンもあります
  18. 初期処理

  19. 全体構成 ①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回実行
  20. Initial 処理 ◼ Power Virtual Agents 側 ① トリガーフレーズを受け取り処理開始 ◼

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

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

    Automate 側で、Split(回答履歴, ',') 関数で、 配列に変換して処理しているよ Power Virtual Agents では配列型の変数が定義できないよ
  23. 主処理

  24. 全体構成 ①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回実行
  25. Power Virtual Agents 側 ① ユーザーに「回答」を質問する ② Power Autoamte フローを呼び出し、

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

    1回目の「回答」と「答え」を比較し、 表示設定 : ④ 6回目の・・・ ⑤ 「回答」と「答え」が一致する場合、 正解フラグをONにする 「答え」を分解 配列は受け渡し できないよ! 2回目「回答」の答え合わせ 6回目「回答」の答え合わせ 正解の判定 : 配列は受け渡し できないよ!
  27. 答え合わせ結果は保持しない どうして、[回答]履歴の答え合わせ結果を保持しないの? 毎ターン事に、すべての[回答]履歴を答え合わせを、いちいちするの? ゲームは6ターンまでなので、答え合わせ処理は最大で21回 答え合わせ結果を保持した複雑な構造の変数を次ターンへ引き継ぐよりも 毎回答え合わせする方が、処理が簡単だよね (Power Automate と配列の引き渡しがきないしね)

  28. 文字列を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 ]
  29. 選択 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" } ]
  30. 選択 Action ▪ 配列からApply to eachを使わずに複数の要素を取り出す ➢ [選択](Select) item()?[‘切り身‘] item()?[‘骨尾頭付き‘]

    concat(item()?[‘切り身‘], ‘シャリ‘)
  31. 選択 Action ➢ マップ がJSONフォーマットであれば、任意のOutputの形 式で出力可能。(ネストした配列も) ➢ 関数を挿入可能 関数との組み合わせで、 できる事が無限大!!

  32. 答え合わせ処理 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 答えは色情報として保持するよ
  33. 表示処理 <span style="color: WHITE; background-color:rgb(@{body('答え合わせ_1')?[0]}); font-family:' 游ゴシック体'; font-size: 25px;">&nbsp;@{substring(outputs('回答履歴+回答 _array')?[variables('intCount')],0,1)}&nbsp;</span>

    Power Virtual Agents のチャットボットは 一部の HTML タグによる表現が可能です。 A L B U M A D O B E
  34. 答え合わせと表示処理 繰り返し処理だけど、 ループ回数は最大6回なので、 ここでも Apply to each は使わないよ concat( outputs('結果_1'),

    outputs('結果_2'), outputs('結果_3'), outputs('結果_4'), outputs('結果_5'), outputs('結果_6') )
  35. まとめ

  36. まとめ ゲームを作ることで、 知れる仕様や 学べるテクニックが あると思います。 ゲーム作りおすすめです!

  37. 最後に 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
  38. ありがとうございました