Tileverse
Network:
Contract :
Player :
- WASD: walk and dig
- 1-9: take or drop items
- Enter: save to the chain!
説明
Tileverse はブロックチェーンを利用した探索ゲームのようなものです。ゲーム性はありません。
Tezos ブロックチェーンのテストネットである ghostnet を使用しています。
遊ぶためには
- Tezos ghostnet のアカウントとトークン
- Tezos のウォレット通信フレームワーク Beacon に対応したウォレット
が必要です。
wasd キーで移動、壁に向かって移動すると穴を掘ります。運が良いとタイルという名の
色のついた四角が出てきます。アイテムの上で 0..9 キーを押すとタイルを取得できます。
取得したタイルは 0..9 キーでマップ上に再配置できます。タイルには希少性があり、
珍しいものは珍しい色をしています。どれがどんな色かは忘れました。
Enter キーを押すとプレイ履歴をブロックチェーンに保存できます。プレイ履歴はブロックチェーン側で
真正なものか検証を行いますので、チートはできません。(なお、リロードしてやり直すのはチートではありません。)
複数の人が同時に同じ領域を探索している場合、プレイ中に自分の周囲が他人に書き換えられて
しまう場合があります。プレイ履歴が書き換えられた世界と矛盾してしまう場合は履歴保存ができません。
新しい世界でやり直しとなります。
費用
穴を掘るとマップにデータが加わります。その変更をブロックチェーンに書き込む場合には記憶域料金が
発生し、これがこのゲームでのメインの費用となります。大体、30ほど掘ると 0.09tz ほどかかるようです。
ちょっと高いかなあと思います。全データをチェーンに書き込んでいるのでしょうがないですね。
ゲーム性はない
Tileverse は Tezos での dApps の簡単なデモとして作ったもので、ゲーム性は全くありません。ただ工夫次第で色々加味できるでしょう:
- グラフィックスを良くしてより RPG っぽくする
- アイテムに何か機能を持たせる (運が良くなる、など)
- 特定プレイヤー以外は変更できないような領域を提供する
- 他のプレーヤーを表示する
- 敵のようなものを導入する
- アイテムを NFT として流通できるようにする
- 料金を取ってお金持ちになる(笑
技術スタック
使用している技術は、 Tezos で標準的に使われているものではなく、作者本人の都合に併せた全く非標準なものですので、お勧めしません。一応書いておきます:
- スマートコントラクトには SCaml を使っています
- オフチェーンのバックエンド、フロントエンドには Js_of_ocaml を使っています
- XmlHttpRequest で Tezos RPC を叩いています
- ノードとやりとりするデータは JSON ⇄ Micheline ⇄ 各データ型への変換を行なっています。手書きです。
- Beacon とのやりとりは Beacon-sdk の JavaScript コードを Js_of_ocaml から呼び出すためのラッパを書いています。幸い TypeScript で書かれているのでドキュメントを見ながら最低限の物は書けました。
- Base58check, Blake2B については bs58check と sodium という npm ライブラリを browserify したものを Js_of_ocaml から呼び出しています
この方法は、オンチェーン(スマートコントラクト)とオフチェーン(アプリ)では同じ OCaml を使っています。
ゲームロジックはオンオフ両方でほぼ同じコードが使えるので、そこだけ経験が良いです。一度も齟齬が発生しませんでした。
この方法は、全くお勧めしません。OCaml と Tezos をよく知っている人しか使えない方法です。
通常は SmartPy, LIGO でスマートコントラクトを書いて、
Taquito や ConseilJS を使ってウェブアプリを書いてください。
自分はこのどれにも詳しくないので選択しませんでした。