# ゲーム

ゲームコントラクトを利用すると、あなたがデプロイしたゲームの周りにプレイして稼ぐメカニズムを実装することができます。

以下は、独自のゲームを作成するためのステップバイステップのガイドです：

## ゲームの作成

* [ゲームページ](https://payswap.org/games)にアクセスし、**ゲームを作成**ボタンをクリックします。

<figure><img src="https://610299453-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPqcAxRO5aNJ3Ru8Cly8H%2Fuploads%2Fgit-blob-2a3fc485d4b36c7a6e6d34375dda04c65f247cb2%2Fgame.png?alt=media" alt=""><figcaption></figcaption></figure>

* ポップアップされるフォームに入力し、トランザクションを検証します。これでゲームが作成されます。ユーザーのスコアを処理するためにAPIを使用する場合は、ゲームコントラクトのアドレス変数をPaySwapの主要アドレスに設定してください（[CanCanチャンネル1](https://payswap.org/cancan/collections/1)の所有者のアドレス）。

<figure><img src="https://610299453-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPqcAxRO5aNJ3Ru8Cly8H%2Fuploads%2Fgit-blob-e5112fa7ebc370dcff133457c9fca93e2e3caebd%2Fgame2.png?alt=media" alt=""><figcaption></figcaption></figure>

* 作成したゲームをすぐに見つけるために、**マインのみ**ボタンを選択してゲームをリストアップしてください。ゲームが見つからない場合は、ページをリロードして再試行してください。

<figure><img src="https://610299453-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPqcAxRO5aNJ3Ru8Cly8H%2Fuploads%2Fgit-blob-223078f700945a55776947d2e793d2bc7bd61c1f%2Fgame3.png?alt=media" alt=""><figcaption></figcaption></figure>

## ゲームのセットアップ

* 次のステップは、ゲームコントラクトを更新することです。ベッティングコントラクトのパネルで**制御パネル**ボタンをクリックし、**ゲームの更新**ボタンをクリックします。各パラメータに適切な値を入力し、トランザクションを検証します。

<figure><img src="https://610299453-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPqcAxRO5aNJ3Ru8Cly8H%2Fuploads%2Fgit-blob-2f260a43732a3e1735a0b505a16413f8840afa81%2Fgame4.png?alt=media" alt=""><figcaption></figcaption></figure>

<figure><img src="https://610299453-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPqcAxRO5aNJ3Ru8Cly8H%2Fuploads%2Fgit-blob-c6e30048f4b446ae57fb22c15b2f18da9c69b63a%2Fgame5.png?alt=media" alt=""><figcaption></figcaption></figure>

* その後のステップでは、ゲームをプレイできるリンクを更新する必要があります。コントロールパネルのメニューから**情報を更新**ボタンをクリックし、各フィールドに適切な値を入力します。各パラメータの横にあるヘルプアイコンにカーソルを重ねると、パラメータの説明を読むことができます。フォームを検証し、トランザクションを確認します。

<figure><img src="https://610299453-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPqcAxRO5aNJ3Ru8Cly8H%2Fuploads%2Fgit-blob-2f260a43732a3e1735a0b505a16413f8840afa81%2Fgame4.png?alt=media" alt=""><figcaption></figcaption></figure>

<figure><img src="https://610299453-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPqcAxRO5aNJ3Ru8Cly8H%2Fuploads%2Fgit-blob-663cb4d407e8614dda788aec0edcc285ee7130c8%2FScreenshot%20from%202024-01-24%2023-05-46.png?alt=media" alt=""><figcaption></figcaption></figure>

PaySwapは、ゲームAPIリンクを使用してトークンIDごとのスコアを取得し、ユーザーがブロックチェーンにスコアを更新できるようにします。

## プレイ方法

以下は、ゲームをプレイする方法のステップバイステップのガイドです：

* まず、プレイするために十分な分数を購入する必要があります。たとえば、30分を購入する場合、30分以内にゲームのサイトからスコアを取得して提出する必要があります。その後に提出されたスコアは報酬の対象外となります。
* 分数を購入するには、ゲームのパネルに移動し、ゲームのページに移動するために**ゲームを表示**ボタンをクリックします。**新しいチケットを作成**ボタンをクリックしてトランザクションを検証し、ゲームNFTを作成してください。これは、ゲームをプレイし、報酬を受け取るために必要です。

<figure><img src="https://610299453-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPqcAxRO5aNJ3Ru8Cly8H%2Fuploads%2Fgit-blob-99d4a1b49f2448d49e60cf8f0ce86c87077e086c%2Fgame7.png?alt=media" alt=""><figcaption></figcaption></figure>

* ゲームNFTを作成した後、ゲームページの下の最後の行が、「You have 0 tickets」から「You have 1 ticket(s)」に変わり、その後にあなたのチケットIDのリストが表示されます。チケットIDは、ゲームとのインタラクションのほとんどで必要となります。以下の画像の最後の行に注意してください（チケットIDが2の場合）。

<figure><img src="https://610299453-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPqcAxRO5aNJ3Ru8Cly8H%2Fuploads%2Fgit-blob-d8431e38bd3a9dfb727237f4178837ca74802684%2Fgame9.png?alt=media" alt=""><figcaption></figcaption></figure>

* これで、ゲーム内の分数を購入できるようになりました。たとえば、30分を購入しましょう。これを行うには、以下の画像のフォームに移動し、「Buy XX Minutes」テキストボックスに購入したい分数に対応するトークンを送信してトランザクションを検証してください。

<figure><img src="https://610299453-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPqcAxRO5aNJ3Ru8Cly8H%2Fuploads%2Fgit-blob-d7eba8340822b19b738506e759b74392dc822d29%2Fgame10.png?alt=media" alt=""><figcaption></figcaption></figure>

* ゲームNFT ID（この例では2）と、30分を購入するための十分なトークンを入力しました。トークンの数を変更すると、「Buy XX Minutes」テキスト

が変更されます。

* これで、ゲームをプレイし、スコアを取得して30分の期限が切れる前にそのスコアを提出する必要があります。ゲームページのトップにある**Play Game**ボタンをクリックして、ゲームを起動します。

<figure><img src="https://610299453-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPqcAxRO5aNJ3Ru8Cly8H%2Fuploads%2Fgit-blob-d8431e38bd3a9dfb727237f4178837ca74802684%2Fgame9.png?alt=media" alt=""><figcaption></figcaption></figure>

* ポップアップからゲームをプレイするか、ポップアップの上部のリンクをクリックして新しいウィンドウでゲームを開きます。

<figure><img src="https://610299453-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPqcAxRO5aNJ3Ru8Cly8H%2Fuploads%2Fgit-blob-276386e6db609ef9930fd9416fa76bfb84fdf1d3%2Fgame11.png?alt=media" alt=""><figcaption></figcaption></figure>

* 以下の画像のように、満足のいくスコアを取得したら、ゲームNFT IDを入力し、ゲームページから提出ボタンをクリックします。

<figure><img src="https://610299453-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPqcAxRO5aNJ3Ru8Cly8H%2Fuploads%2Fgit-blob-b62faae94c92c543a253698a98b46a0497c0112e%2Fgame12%20(1).png?alt=media" alt=""><figcaption></figcaption></figure>

* この画像では、購入した30分が終了する前にできるだけ良いスコアを取得したので、ゲームページにある適切なフィールドにゲームNFT ID（2）を入力し、提出しました。30分が経過するまでプレイを続け、以前のスコアを置き換えるためにも新しいスコアを提出できます。
* 分数の有効期限は、ゲームページの以下のフォームにゲームNFT IDを入力して確認できます。以下の例では、分数を19:12（午後7:12）に購入したので、分数は19:42（午後7:42）に終了します。つまり、その時間までにより良いスコアを取得するために試行できます。スコアを安全に提出するたびに、スコアを提出する時間までに確認してください。

<figure><img src="https://610299453-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPqcAxRO5aNJ3Ru8Cly8H%2Fuploads%2Fgit-blob-783eb100cef6315f7290705e2f3a29ebf7078dbe%2Fgame13.png?alt=media" alt=""><figcaption></figcaption></figure>

* 分数の有効期限が切れた後は、スコアを処理するのを待つか、すぐに処理するかを選択できます。ゲームコントラクトは、分数の購入から集められたトークンで賞金を積み立て、ユーザーのスコアに基づいて報酬を計算します。 例として、ゲームの賞金は3 USDです。この金額は、ゲームページから確認できます。

<figure><img src="https://610299453-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPqcAxRO5aNJ3Ru8Cly8H%2Fuploads%2Fgit-blob-485052497b691598685ad0c9a4354e0917d43ca4%2Fgame14.png?alt=media" alt=""><figcaption></figcaption></figure>

例えば、ゲームの賞金が1000 USDで、ゲームの合計スコアが8000である場合、800のスコアを取得した場合の報酬は次のように計算されます：1000 \* 800 / 8000 = 100 USD

もし、ゲームの合計スコアが5000で賞金が800である場合、賞金は次のように計算されます：800 \* 800 / 5000 = 128

報酬を請求するタイミングを決定するのは戦略的な決定です。小さなポットからより多くのシェアを請求しますか、大きなポットから少ないシェアを請求しますか、考える必要があります。

## 報酬の請求方法

* [ゲームページ](https://payswap.org/games)にアクセスし、ゲームを見つけます。
* ゲームのコントロールパネルメニューに移動し、**スコアの処理**ボタンをクリックします。フォームに入力する必要はありません。単にトランザクションを検証して、以前にゲームで取得したスコアをゲームコントラクトに書き込む必要があります。PaySwapは、ゲームのAPIからスコアを取得し、フォームに情報を埋め込んで検証できるようにします。

<figure><img src="https://610299453-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPqcAxRO5aNJ3Ru8Cly8H%2Fuploads%2Fgit-blob-73b7dca0586d6f31de45c39e23578c17daf794ca%2Fgame15.png?alt=media" alt=""><figcaption></figcaption></figure>

<figure><img src="https://610299453-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPqcAxRO5aNJ3Ru8Cly8H%2Fuploads%2Fgit-blob-17e66b56d09b95fa3281781c2c997c0f33c3d07b%2FScreenshot%20from%202024-01-24%2023-34-04.png?alt=media" alt=""><figcaption></figcaption></figure>

* ゲームの総合スコアが更新されたかどうかを確認できます。次に、コントロールパネルメニューの**報酬を請求**ボタンをクリックします。トランザクションを

検証して報酬を請求し、収益をウォレットに送金します。\
報酬を直ちに請求するか、少し待って賞金が増えるのを待つかを選択できます。賞金が大きいほど多くの賞金を獲得できますが、これは少しトリッキーです。新しいプレイヤーがゲームに参加し、分数を購入することで、ゲームの平均スコアが上がると、総収益のシェアが減少する可能性があります。\
いつ報酬を請求するかを選択するのは、小さなポットの大きなシェアを請求するか、大きなポットの小さなシェアを請求するかを決定する戦略的な決定です。

## すべてのゲームをプレイして稼ぐゲームに変える方法

* ユーザーがスコアを更新できるように、ゲームサイトにフォームを追加します。以下の画像の例では、ユーザーがゲームトークンIDを入力し、「スコアを保存」ボタンをクリックすると、ゲームがFirebaseデータベース（任意のデータベースを使用できます）にスコア（**score**として保存）、スコア登録の時刻（**deadline**として保存）、およびユーザーがゲームを開始した時刻（**startime**として保存）を登録します。\
  ユーザーがプレイしたゲームの分数が、実際に購入したゲームの分数に対応していることを確認するために、ゲームがユーザーがプレイしたゲームの開始時刻（**startime**）を追跡していることが非常に重要です。これがないと、ユーザーはあるゲームでスコアを最大化するために時間を費やし、その後、PaySwapのゲームページから1分だけ購入して、その時間でスコアを登録することができます。**startime**パラメーターがあれば、購入した分数と実際のプレイ分数の不一致を検出できます。

<figure><img src="https://610299453-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPqcAxRO5aNJ3Ru8Cly8H%2Fuploads%2Fgit-blob-82ec47f39662a339a150a951e526904a60642271%2FScreenshot%20from%202024-01-24%2023-10-20.png?alt=media" alt=""><figcaption></figcaption></figure>

* 上記の手順に従ってゲームコントラクトをデプロイし、ゲーム情報を更新し、ユーザーのスコアと締め切りを返すAPIリンクを指定してください。
* たとえば、Marioゲームの場合、APIリンクは次のようになります：\
  [https://firestore.googleapis.com/v1/projects/tiktok-a2bdb/databases/(default)/documents/c4/](https://firestore.googleapis.com/v1/projects/tiktok-a2bdb/databases/\(default\)/documents/c4/1)
* これをゲームで使用するためにゲームを更新します。たとえば、トークンID＃1のスコアと締め切りを取得するためのAPIリンクは次のようになります：\
  <https://firestore.googleapis.com/v1/projects/tiktok-a2bdb/databases/(default)/documents/c4/1>\\

  PaySwapは、ユーザーのトークンIDをAPIリンクに付加するだけなので、保存されたAPIリンクには末尾にスラッシュ（/）があることを確認してください。このエンドポイントへのクエリは、所有者によってトークンID 1に登録されたスコアと締め切りを以下の形式で返します。startimeおよびdeadlineパラメーターがミリ秒ではなく秒で保存されていることを確認してください。

<figure><img src="https://610299453-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FPqcAxRO5aNJ3Ru8Cly8H%2Fuploads%2Fgit-blob-9cad9c9dbc065f4bf4a16f759a84bf1255b953f6%2F1.png?alt=media" alt=""><figcaption></figcaption></figure>

APIが上記の形式に従い、上記の形式でオブジェクトを返す場合、システムはユーザーのスコア情報を更新する際に問題なく動作します。これは、ユーザーが報酬を獲得するために必要なステップです。

おめでとうございます！ あなたのゲームには今、プレイして稼ぐ要素があります！ あなたのユーザーは今、次のことができます：

* [ゲームページ](https://payswap.org/games)からあなたのゲームを見る
* ゲームでベストスコアを出すために十分な時間を購入する
* あなたの集中管理データベースにスコアを更新する
* 提供したAPIを介してPaySwapプラットフォームを使用して、そのスコアをブロックチェーンに報告する
* スコアが高い場合、収益を請求する

[コミュニティからさらなるサポートを受け取る](https://paychat.payswap.org/#/room/%23paycom%3Amatrix.org?via=matrix.org)
