神経衰弱みたいな機構をPower Appsで作成してみた(初級者向け)

こんばんは。

ひっさしぶりにバドミントンやったら全身筋肉痛になったので、

プロジェクターで天井に画面写してトラックボールとワイヤレスキーボードで、

ベッドの中で仕事してました、超真面目ワーカーあきらです。

 

今回は年末イベントで1人だけ納期内に完成できなかった神経衰弱みたいなアプリをつくってみようと思います。

 

準備

  • トランプ画像
  • 背景画像
  • Complete時のGIF

こんだけですね

あとはまぁ関数の組み合わせだけです。

データソース要らないんで初心者向け?

(もう初心者向けってなんだかわからなくなってきた)

 

adobe stockで調べれば山のように出てきますので参照ください。

https://stock.adobe.com/jp/images/playing-cards-deck-full-complete/220211310

https://stock.adobe.com/jp/images/playing-cards-fall-on-a-black-table/290521309

こいつらを加工して作ってみました。

 

画像に名前を付ける

まずはバラシて一個一個に名前を付けてみます。

記号と数字で一意性定義できるので、こんな感じですか。

f:id:hanakuso365:20220111174341p:plain

 

1枚「Back」って名前の裏面を書いておきます。

名前つけたらインポートしましょうか。

 

f:id:hanakuso365:20220111211611p:plain

(某楽器アプリみたいになりましたね)

 

Collectionにぶち込む


        ClearCollect(
    colCard,
    {
        id: j1,
        card: 14,
        flag: 0
    },
    {
        id: j2,
        card: 14,
        flag: 0
    } //長いから割愛
);
ClearCollect(
    colCard,
    Shuffle(colCard)
)
    

まぁとりあえず画像とリンクさせるCollectionを作成して、

それをshuffleで返す!

ってのをOnStartで返してあげます。

 

そうするととりあえずゲームスタートしたら、順番ランダムでCollectionが生成します。

colCardというCollectionと定義します。

 

Galleryにぶち込む

あくまで上記手順は「生成」までですので

それを表示するGalleryが必要になります。

横のGalleryを追加してあげて、折り返しプロパティを4に設定

Itemsプロパティに先ほど定義した「colCard」というCollectionを入れてあげましょう。

 

そしてTemplateにImageコントロールを入れて、

Imageプロパティに

If(
    ThisItem.flag = 0,
    back,
    ThisItem.id
)

 

と入れてあげましょう。

意味としては、「このアイテムのflagが0ならばbackって言うイメージを、そうでなければidの項目と同じ名前のイメージを表示してね」って意味ですね。

 

Collection生成時、すべてのflag列は「0」としたので、全て裏向きのイメージが出来上がったと思います。

f:id:hanakuso365:20220308204219p:plain

 

flagの値で状態を定義する

例えば

flag 状態
0 トランプが裏の状態
1 トランプがめくられている状態
2 トランプがめくられていてかつゲーム終了まで裏にならない状態
3 トランプがめくられていてかつ三枚めくるときに裏になる状態

 

こんな風に定義します。

あとは流れで説明しますが、

下の図みたいな構造でいきます。

 

あとは画面の動きで説明します!(めんどくさくなってきた)

 

ゲームを始める状態ではすべてflagは0(裏側の画像表示)

f:id:hanakuso365:20220308210616p:plain

 

  1. 1枚めくるとcolHandというCollection(下部)に1枚目のカードが格納される
  2. 同時にflagを1にして「めくられた札」という状態にする

f:id:hanakuso365:20220308210811p:plain



2枚目のカードをめくると

  1. Collectionに同じように格納
  2. Galleryの中の枚数を数えて2枚になっていたら右上のtoggleがオンになる
  3. toggleがオンになったらOnCheckプロパティで正誤判定(正ならflagを2にそうでなければflagを3に)をしてすかさずオフに

 

Galleryの中にある札で

flagが2なら次の挙動でもめくられたまま

flagが3なら次の挙動で裏に戻る

というのをGalleryの中のImageコントロールのOnSelectに定義してあげれば良いです。

 

f:id:hanakuso365:20220308211349p:plain

f:id:hanakuso365:20220308211516p:plain

 

そしてすべてのカードのflagが2になれば、隠してあったGif(なんでもいいです)が見えるようになればゲームとして成立しますね。

f:id:hanakuso365:20220308212232p:plain

 

あとは

  • 下のGalleryを消去
  • toggleを非表示
  • Try Againボタンでカードのshuffleと全てのidを0にする

という挙動を作成できれば完了です。

 

これで神経衰弱が作成できます。

タイム計測してタイムアタック方式にしてランキング保存とかでも面白いかもしれません。

 

次のステップ

実はですね。

このtoggleを使った機構を考え出したのはコルネさんという方なのです。

ある日夜な夜なおばちゃんに召集がかけられ、

「うちの生徒が作るアプリを手伝って!!!!!!!(大声)」

と言われ、界隈の重鎮たちが一同に会した会がありまして、

そこでコルネさんが天才的な閃きでサクッと作ってしまったわけです。

重鎮たちも賞賛の嵐!

いやはや凄い技術者です。

 

そんなコルネさんのブログがこちらです。

koruneko.hatenablog.com

 

ワタシのブログとは比べ物にならないくらい技術が詰まったブログなので、穴が開くほど見てください。

 

もともと教育に使うための機構を考えて作成しようと思っていたので、

例えば日本語と英単語を同一IDにして表示させ、ペアを集めていくみたいなアプリだと、勉強しながら遊べるかもしれません。

 

ん?それ面白いな…

作って売るか…

 

というわけで作ったら(大事なところ隠して)公開します!!