開発日記⑮ 麻雀ライブラリを導入して牌山を作る

前回までの進捗

前回は、必要点数を最初は隠して、自分で条件を考えてから答え合わせできるようにした。
これまではオーラスの点数条件を計算・確認する部分を中心に作ってきたが、今回はそこから一歩進めて、実際の麻雀の進行部分に手を付ける。

麻雀ライブラリを導入する

牌山の生成やツモ、手牌、ドラなどをすべて一から作ることもできる。
ただ、麻雀には細かいルールや処理が多いため、今回は@kobalab/majiang-coreという麻雀ライブラリを利用することにした。
まずはライブラリをプロジェクトへ追加し、自分のアプリから扱える状態にした。

まずは牌山を作ってみる

最初から対局全体を動かそうとすると複雑になるので、まずは小さな動作確認から始めた。
今回確認したのは、

  • 牌山を生成できる
  • 牌山から1枚ツモれる
  • ツモ後に残り枚数が減る
  • ドラ表示牌を取得できる

という基本的な部分。
牌山を作った直後の枚数を取得し、1枚ツモしたあとに残り枚数が1枚減っていることを確認する。
さらに、ツモした牌やドラ表示牌が正しい牌コードになっているかもテストした。

ライブラリとの間に処理を挟む

ライブラリをアプリの各所から直接使うのではなく、majiangAdapter.tsというファイルを用意した。

アプリ
↓
majiangAdapter
↓
麻雀ライブラリ

という形にしている。
こうしておけば、麻雀ライブラリ側の書き方を画面や他の処理まで広げずに済む。
今後、配牌やツモなどの処理が増えても、この部分を窓口として扱えるようにするつもり。

TypeScriptで扱うための型も追加する

今回使うライブラリをTypeScriptから扱うため、必要な部分について型定義も用意した。
最初からライブラリ全体を型定義するのではなく、

  • 牌山を作る
  • 1枚ツモる
  • 残り枚数を取得する
  • ドラ表示牌を取得する

といった、現時点で使う部分だけを定義している。
必要になった機能から少しずつ増やしていく形にした。

テストで動作を確認する

牌山まわりは画面から見えない処理なので、Vitestで動作確認も追加した。
確認しているのは、

  • 牌山を作成できる
  • 1枚ツモできる
  • ツモ後に残り枚数が減っている
  • ツモ牌が有効な牌コードになっている
  • ドラ表示牌が取得できる

といった内容。
これで、実際の麻雀を進行させるための最初の土台ができた。

今回できたこと

今回の進捗は以下のとおり。

  • 麻雀ライブラリを導入した
  • 牌山を生成できるようにした
  • 牌山から1枚ツモできるようにした
  • 残り牌数を取得できるようにした
  • ドラ表示牌を取得できるようにした
  • 基本動作をテストで確認した

ここまではまだ画面上で麻雀が遊べるわけではないが、これまでの点数条件計算とは違って、実際の対局処理の土台に入り始めた。
次回は、この牌山を使って4人分の配牌を作り、親の第一ツモまで進められるようにする。

ちょっと最近仕事が忙しくて、開発もブログ更新もギリギリ最低ラインを低空飛行中…。
牛一。

コメント

タイトルとURLをコピーしました