背景
PowerAppsのキャンバスアプリでオセロゲームの碁石がひっくり返すロジックを開発してみたところ、苦戦した部分もあったため、どのように解決したかメモしておきます。
参考にしたロジック
JavaScriptでオセロゲームを作成する方法を現役エンジニアが解説【初心者向け】を参考にさせていただきました。
問題点
PowerAppsの繰り返し関数ForAll関数の繰り返しの途中で終了する関数がないため、参考にしたロジックをPowerApps向けに微修正する必要がある。
解決策
ForAll関数の繰り返しの中で更新するコレクションにisTargetという列を持たせ、この列がfalseのレコードが1件でもあれば、処理をしないというロジックにする。そのことにより、isTargetという列をfalseにしたデータがコレクションに追加した後から何も処理しないようにすることができました。
コードの例は以下になります。
// 先手:黒,後手:白
ForAll(
boardFromBaseToUpWk, // 打った碁石(星)から北方向へひっくり返すか確認する碁石のコレクション
If(
IsBlank(LookUp(returnStoneseWork, isTarget=false)),
// 碁石の色が相手の色でも隣あっていない碁石はひっくり返す対象外とする
If (
// InTurn:0(先手),1(後手)
// status:1(黒),2(白)
ThisRecord.status=If(Cell.InTurn=0,2,1),
// 碁石の色が相手の色の場合
Collect(returnStoneseWork,{isTarget:true,row:ThisRecord.row,col:ThisRecord.col,status:If(Cell.InTurn=0,1,2)});,
// 碁石の色が相手の色でない場合、isTargetをfalseにして、上記の条件によって、そのあとはreturnStoneseWorkに追加する処理をさせない。
Collect(returnStoneseWork,{isTarget:false,row:ThisRecord.row,col:ThisRecord.col,status:ThisRecord.status}); // returnStoneseWork:ひっくり返す碁石のコレクション
);
)
);
プラスα
まとめ
参考にさせていただいたjavascriptのコードをPowerFx(PowerApps)に変換してもらうようにChatGPTにお願いしましたが、PowerFxにはない関数を出力するなどして、完璧ではないみたいです。PowerFx(PowerApps)向けに微修正する必要がありそうです。
引き続き、ChatGPTも活用して、どのような手順で進めると、高品質なコードを楽に生成することができるか探求していこうと考えております。
この記事が皆さんの役に立てば幸いです!
また、この記事に興味を持ったという方おられましたら、コメントいただけると幸いです。
記事をご覧いただきありがとうございます。