![見出し画像](https://assets.st-note.com/production/uploads/images/154374686/rectangle_large_type_2_a099cdc40353a140340357a1c66b88ba.png?width=1200)
Photo by
hamahouse
【完全保存版】Magic Block 入門3 JOINモジュールについて
この記事では、ゲームへの参加を管理する、「JOIN」モジュールについて解説します。
1 JOINモジュールの構成について
構成としては、「execute」関数が存在しています。
![](https://assets.st-note.com/img/1726368190-xdaKO2bCPkASGJuZmDH7cnM4.png?width=1200)
2 Contextについて
Contextについては、「Generate」モジュールの時と同じく、Gameコンポーネントを使用します。
![](https://assets.st-note.com/img/1726368215-vNGSw3EOiXaJtz4rDIj0qRbu.png?width=1200)
3 引数について
引数としては、プレイヤーインデックスと参加しているか否かを渡します。
![](https://assets.st-note.com/img/1726368243-AWZ6Ic7VvutSUN9fb1aGOiQr.png?width=1200)
ちなみに、プレイヤーのインデックスについては参加人数が2人なので、0か1になります。
![](https://assets.st-note.com/img/1726370940-mHVAGfFNedzOil6L759R23oS.png?width=1200)
4 execute関数について
では、execute関数について見ていきましょう。
4ー1 アカウント情報の代入
まずは、「Generate」モジュールの時と同様、アカウントを可変参照して渡しています。
![](https://assets.st-note.com/img/1726368267-Ww1bH7dgAL6sV94Qh2qoa5le.png?width=1200)
4ー2 ステータスの確認
次は、ステータスを確認しています。
「Lobby」でない場合はエラーにしています。
![](https://assets.st-note.com/img/1726368284-y7biYQ432nqTrsvSmpaEzXUj.png?width=1200)
4ー3 公開鍵の設定
次に、アカウントの権限者の公開鍵を「payer」に設定しています。
![](https://assets.st-note.com/img/1726368296-03YIURW9ClmJBZMr4tQG2vfu.png?width=1200)
次に、「game」構造体の「players」の指定されたインデックスを可変参照で「player」に渡しています。
「usize::from」を使用しているのは、Rustでは配列のインデックスには「usize」型が使われるためです。
![](https://assets.st-note.com/img/1726368313-XJLxBulW9mNv5S7RnsFe3fjg.png?width=1200)
4ー4 参加時の処理
次は参加時の処理についてです。
具体的には、こちらが押された時を想定しています。
![](https://assets.st-note.com/img/1726371189-82cWBjDsCfytSiETI9xbkuaz.png?width=1200)
すでに参加済みの場合はその旨を伝えてエラーとしています。
![](https://assets.st-note.com/img/1726368411-TzBPQb4MtSELuUo8Ywm7jsWO.png?width=1200)
そうでない場合は、権限者を設定し、準備状態について、「true」に設定します。
![](https://assets.st-note.com/img/1726368424-Q2ZTvpSxkyeo5RnFB6NKHwiI.png?width=1200)
4ー5 退出時の処理
次は、退出時の処理についてです。
このボタンが押された時のイメージです。
![](https://assets.st-note.com/img/1726371307-GVvwQu2fdCaoyjhHrKAUXYkJ.png?width=1200)
権限者がpayerではない場合はエラーとなります。
勝手に別の人に抜けさせられないようにですね。
![](https://assets.st-note.com/img/1726368477-RXN3QshDKgpJdrjuMVIe2xEc.png?width=1200)
問題ない場合は、authorityをデフォルトに設定し、準備状態は「false」にしています。
![](https://assets.st-note.com/img/1726368490-B07UND5xJK6X2jrwnaIvq1ET.png?width=1200)
以上です。
いいなと思ったら応援しよう!
![ユウキ](https://assets.st-note.com/production/uploads/images/52347520/profile_e7d36b385c74618d7fec56da47f68a35.jpeg?width=600&crop=1:1,smart)