1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[PowerApps]オセロゲームのロジックを作成してみて困ったこと(碁石をひっくり返す)

Last updated at Posted at 2025-03-04

背景

PowerAppsのキャンバスアプリでオセロゲームの碁石がひっくり返すロジックを開発してみたところ、苦戦した部分もあったため、どのように解決したかメモしておきます。

参考にしたロジック

JavaScriptでオセロゲームを作成する方法を現役エンジニアが解説【初心者向け】を参考にさせていただきました。
ひっくり返すロジック_参考.png

問題点

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:ひっくり返す碁石のコレクション
        );
    )
);

プラスα

ひっくり返すロジックをどうしたかも整理しておきます。
ひっくり返すロジック_PowerApps.png

まとめ

参考にさせていただいたjavascriptのコードをPowerFx(PowerApps)に変換してもらうようにChatGPTにお願いしましたが、PowerFxにはない関数を出力するなどして、完璧ではないみたいです。PowerFx(PowerApps)向けに微修正する必要がありそうです
引き続き、ChatGPTも活用して、どのような手順で進めると、高品質なコードを楽に生成することができるか探求していこうと考えております。
この記事が皆さんの役に立てば幸いです!
また、この記事に興味を持ったという方おられましたら、コメントいただけると幸いです。
記事をご覧いただきありがとうございます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?