オーラス麻雀ゲーム開発日記構想から現在までの開発記録を、公開順にまとめています。

前回までの進捗
前回は、4人分の点数を入力し、現在の順位を表示できるようにした。
これで「今、誰が何着なのか」は分かるようになった。
ただ、このゲームで知りたいのは現在順位だけではない。
自分がどの席にいて、最終的に何着を目指しているのか。
そこまで決まらないと、「何点アガれば条件を達成できるのか」は計算できない。
そこで今回は、条件判定に必要な情報を入力できるようにした。
今回追加する項目
まずは、次の4項目を追加する。
- 自分の席
- 目標順位
- 本場
- 供託リーチ棒
自分の席は、東家・南家・西家・北家から選択する。
目標順位は、ひとまず次の3種類にした。
- トップ
- 2着以上
- ラス回避
本当は「現在の順位を維持する」「特定の相手より上に行く」など、いろいろな条件が考えられる。
ただ、最初から細かく作りすぎると処理が複雑になりそうなので、まずは分かりやすいものに絞った。
目標にも型を付ける
目標順位は文字列として管理する。
ただし、自由にどんな文字でも入れられるようにはせず、使える値をあらかじめ決めておく。
type Goal =
| "top"
| "second_or_better"
| "avoid_last";
画面上では日本語で表示するけれど、プログラムの中では英語の値を使う。
たとえば「2着以上」とか「連対」とか表示をあとで変更したとしても、内部の値が同じなら判定処理には影響しない。
このあたりは、表示する言葉とプログラムで扱う値を分ける考え方らしい。
まだ慣れてはいないけれど、後から変更しやすくなるのは何となく分かる。
Reactで選択内容を管理する
自分の席と目標順位は、選択欄から変更できるようにした。
選択された値はReactの状態として保持する。
点数入力と同じように、値を変更すると画面側にもすぐ反映される。
今回扱う状態は、だいたい次のようなもの。
- 現在の点数
- 自分の席
- 目標順位
- 本場
- 供託
少しずつ管理する情報が増えてきた。
今はまだ一つの画面に収まっているけれど、このまま機能を追加していくと、コードも長くなりそう。
どこかのタイミングで、画面の部品や処理を分ける必要が出てくるかもしれない。
本場と供託も入力できるようにする
本場と供託は、必要な点数を計算するときに影響する。
ロンの場合、本場が増えるごとに放銃者の支払いが増える。
ツモの場合も、それぞれの支払いに本場分が追加される。
供託リーチ棒があれば、アガった人の点数に加算される。
今回はまだ必要点数の計算までは作らず、数値を入力して保持できるところまでにした。
入力欄では、0以上の整数だけを扱う想定。
マイナスの本場や、小数の供託が存在しても困るので、後で入力チェックも追加したい。
今回できたこと
今回の進捗は以下のとおり。
- 自分の席を選択できるようにした
- 目標順位を選択できるようにした
- 本場を入力できるようにした
- 供託リーチ棒の本数を入力できるようにした
- 選択した条件をReactの状態として管理した
まだ入力欄が増えただけなので、見た目としては地味で前回とほぼ同じ。
ただ、点数と条件がそろったことで、次の計算へ進めるようになった。
次は、入力した点数と目標順位を使って、条件達成に必要な点数を探してみたい。
まずはロンの場合に、誰から何点アガれば目標順位に届くのか。
そこから考えていく予定。
もうすでに締めの言葉も思いつかなくなってきたけど、
牛歩も一歩。牛一。
コメント