16
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

nem / symbolAdvent Calendar 2022

Day 19

ちょっとだけSymbolブロックチェーンを使ったスマホゲームを作った話

Last updated at Posted at 2022-12-18

はじめに

昔、ブロックチェーンゲームのハッカソンがありました。

こういうゲームを突貫で作って応募したのですが、

次回作を作ろうと思い立ちました。

それがこちらです。

主に替えたのは、ゲーム性の部分です。

トランザクションが発生するとゲームイベントが起きるというアイディアについては踏襲しています。ですが、そのゲームイベントについては同じではありません。

こちらが参考動画になります。トランザクションが発生するとコーンが降ってきます。

(実際はこんなに頻繁にトランザクション発生してないと思う)

機能有効化

ブロックチェーンとゲームの関わりはすごくライトな仕様なので、通常はブロックチェーン要素がオフになっています。

image.png

このように設定画面から有効にしないといけません。

何の説明もないので、Symbol知らない人にはよくわからないUIになってしまいました。

トランザクション発生するとコーンが落ちてくる

最初に出した動画の再掲です。

トランザクションが大量に発生すると、大量のコーンが降ってくることになるので、コーンは一定時間で消えるようになってます。

トランザクションがあまり発生しないのでブロック発生イベントを使う

実際にゲームをプレイしてみると、ほとんどトランザクションが無く、機能を忘れてしまうようなことが度々ありました。

なので、ブロックでも出るようにしました。

image.png

なんか板チョコみたいなんですが、元の素材は木箱です。そこに立体的なテキストメッシュでブロック番号を表現しています。

アセットの関係でテキストがセンタリングできなかったのでちょと寄っています。

ブロックチェーン接続周りイメージ図

ここまで機能の紹介だったので、技術的なことについても書いてみます。

ブロックチェーンとゲームの実装上の境界について、このような感じにしました。

image.png

BlockchainServiceは、ゲームとして必要なブロックチェーンの処理を扱うようになっています。例えば、トランザクションやブロックの情報などです。

これにより、ブロックチェーンSDKなどのライブラリ側の実装とは分離し、これについて意識しなくていいようにしました。

またBlockchainServiceは、イベントのみを扱うようになっており、他のクラスから受け取った通知を別のクラスに渡すような役割をしています。

image.png

そして、実際にSymbolブロックチェーンにアクセスするのは、SymbolServiceクラスです。

ここで、ISymbolServiceというインターフェース経由としているのは、実態となるクラスを切り替えられるようにするためです。

image.png

開発時には好きなタイミングでブロックやトランザクションを発生させた風に見せたり、本番では実際にブロックチェーンノードにアクセスしておく、ということをするためです。

おわりに

簡単にゲームの紹介をしました。

ブロックチェーンを参照しているだけですが、プレイしてみると、あ、いまトランザクションが発生したんだな、ということが意識できるかと思います。

秘密鍵を保持したり、署名を作成したりトランザクションを送信しないので、実装も軽いです。

ぜひ、こういうライトな感じ気軽にゲームやアプリを作ってみてはいかがでしょうか。

16
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?