はじめに
昔、ブロックチェーンゲームのハッカソンがありました。
こういうゲームを突貫で作って応募したのですが、
次回作を作ろうと思い立ちました。
それがこちらです。
主に替えたのは、ゲーム性の部分です。
トランザクションが発生するとゲームイベントが起きるというアイディアについては踏襲しています。ですが、そのゲームイベントについては同じではありません。
こちらが参考動画になります。トランザクションが発生するとコーンが降ってきます。
(実際はこんなに頻繁にトランザクション発生してないと思う)
機能有効化
ブロックチェーンとゲームの関わりはすごくライトな仕様なので、通常はブロックチェーン要素がオフになっています。
このように設定画面から有効にしないといけません。
何の説明もないので、Symbol知らない人にはよくわからないUIになってしまいました。
トランザクション発生するとコーンが落ちてくる
最初に出した動画の再掲です。
トランザクションが大量に発生すると、大量のコーンが降ってくることになるので、コーンは一定時間で消えるようになってます。
トランザクションがあまり発生しないのでブロック発生イベントを使う
実際にゲームをプレイしてみると、ほとんどトランザクションが無く、機能を忘れてしまうようなことが度々ありました。
なので、ブロックでも出るようにしました。
なんか板チョコみたいなんですが、元の素材は木箱です。そこに立体的なテキストメッシュでブロック番号を表現しています。
アセットの関係でテキストがセンタリングできなかったのでちょと寄っています。
ブロックチェーン接続周りイメージ図
ここまで機能の紹介だったので、技術的なことについても書いてみます。
ブロックチェーンとゲームの実装上の境界について、このような感じにしました。
BlockchainService
は、ゲームとして必要なブロックチェーンの処理を扱うようになっています。例えば、トランザクションやブロックの情報などです。
これにより、ブロックチェーンSDKなどのライブラリ側の実装とは分離し、これについて意識しなくていいようにしました。
またBlockchainService
は、イベントのみを扱うようになっており、他のクラスから受け取った通知を別のクラスに渡すような役割をしています。
そして、実際にSymbolブロックチェーンにアクセスするのは、SymbolService
クラスです。
ここで、ISymbolService
というインターフェース経由としているのは、実態となるクラスを切り替えられるようにするためです。
開発時には好きなタイミングでブロックやトランザクションを発生させた風に見せたり、本番では実際にブロックチェーンノードにアクセスしておく、ということをするためです。
おわりに
簡単にゲームの紹介をしました。
ブロックチェーンを参照しているだけですが、プレイしてみると、あ、いまトランザクションが発生したんだな、ということが意識できるかと思います。
秘密鍵を保持したり、署名を作成したりトランザクションを送信しないので、実装も軽いです。
ぜひ、こういうライトな感じ気軽にゲームやアプリを作ってみてはいかがでしょうか。