🀄

Nostrで麻雀を作った話

2024/12/01に公開

Nostr Advent Calendar 2024 1日の記事です。Nostrを使って麻雀を作ったのでご紹介します。
私の公開鍵は npub1dv9xpnlnajj69vjstn9n7ufnmppzq3wtaaq085kxrz0mpw2jul2qjy6uhz です。
NIP-05アドレスは nikolat@nikolat.github.io です。

麻雀どこ

ここです。
https://nikolat.github.io/chiihou/

遊び方

NIP-07ブラウザ拡張またはNIP-46署名アプリが必要となりますので事前にご準備ください。

ログイン

左上の Nostr Login ボタンからログインしてください。

今回はNIP-07ブラウザ拡張でログインしてみます。

ゲーム開始・メンバーの募集

ログインできるとこんな画面が表示されます。

GameStart を押してゲームを開始します。

status: 募集中 1/4

と書かれた表示が現れます。自分の他に残り3人のメンバーを募集する必要があります。
他の人がログインして Join を押すことでも参加してもらうことができますが、今回はbotに参加してもらいます。 Join rinrin を押します。

status: 募集中 2/4

に変わりましたね。同様に Join chunchunJoin whanwhan を押して4人のメンバーを揃えます。
なお、この手順を1つのボタンで完了させるのが下に見える大きな GameStart With ... のボタンになります。

対局

紫で囲われているのが自分の番である合図です。打牌を選択してクリックしてください。

緑で囲われている場合は鳴くかどうか問われています。鳴かない場合は no ボタンをクリックしてください。

テンパイしたのでリーチをかけてみましょう。 richi ボタンをクリックします。

打牌を選択します。リーチが有効となる打牌しか選択できません。
リーチの間は和了るまで自動でツモ切りします。

和了られました。次の局へ進むには next ボタンを押します。
だいたいこんな流れです。

飽きた

途中で止めて構いません。前の人が対局中で放置していても Reset ボタンを押せば強制的に終了できて、次の人が始められます。

チャンネル選択

プレイできるチャンネル(卓)は以下の2つを用意しています。

  • Nostr麻雀開発部(半荘戦)
  • Nostr麻雀/地鳳の間(東風戦)

東風戦がご希望の場合は地鳳の間をご利用ください。

チャット

チャンネルごとに簡易チャットが利用できます。ご歓談ください。

終わりに

仕組み等はこちらの方にメモしてあります。興味がありましたらお読みください。

https://zenn.dev/nikolat/scraps/9c239d1d46a018

ローカルで動く麻雀ゲームは伺かで作ったことがあるのですが、オンライン対戦までは作ったことはありませんでした。やるとすればサーバーを建てて、クライアントを作って、通信規格を決めて、通信して…と考えると途方もないし運用も大変だし…と思って作ってみようとさえ考えませんでした。昨年からNostrでbotを作ったりしているうちに、Nostr使えば簡単にできるよな…?と思い立ち、作ってみたらできちゃった、といった感じです。まさかゲームマスターbotとプレイヤーbot(or人間)がリレーを介してお互いのメッセージを監視してやりとりする(しかも冗長化されたリレーが複数)なんて仕組み、他所のゲーム開発者に説明しても「は??」って言われそうな気がします。でもちゃんと動いてる。
オンライン対戦ゲームを簡単に構築できてしまうNostrは素晴らしいですね。

次回予告

明日2日は jun さんが担当されます。よろしくお願いします。

Discussion