chinchiroのロジック解説(1)
サイコロ部分のコード解説
今回はchinchiroのサイコロ部分のコード解説をします。
通常のサイコロ
class NormalDice { roll () { return Math.floor(Math.random() * 6) + 1 } }
Math.random()は0以上1未満のランダムな数を返すので、これを6倍することで0〜6未満のランダムな数を得られます。 このままだと0から5.999...ですが、Math.floor()で小数点以下を切り捨てると0〜5を返すようになります。 最後に最小値の1を加えることで、1〜6をランダムに返すダイスの機能を実現しました。
ジゴロサイ
class JigoroDice { constructor () { this._lisk = 0 } get lisk () { return this._lisk } set lisk (probability) { this._lisk = probability } roll () { return Math.floor(Math.random() * 3) + 4 } }
4、5、6しか出ないイカサマ用のサイコロです。基本的には通常のと同じ考え方ですが、範囲が3(4〜6なので)、最小値が4になっています。 また、コンストラクタにイカサマがバレる確率の設定用の、リスクの数値を持たせました。 さらに、外部から確率を変動できるようゲッターとセッターでアクセスできるようにしました。
ピンゾロサイ
class PinzoroDice { roll () { return 1 } }
1しか出ないサイコロなので、単純に1を返すようになっています。
出たサイコロの目を配列にする
async throw_dice () { const diceEyes = [] for (let i = 1; i < 4; i++) { await diceEyes.push(this.dice.roll()) } this.printDice(diceEyes) return diceEyes }
Userクラスの方で、thwow_diceメソッドを用意します。 今回役を作るのに必要な3回分のサイコロの目を、配列として入れることにしました。 このサイコロの目の表示はprintDice()メソッドで行います。 次回は、この表示用のprintDiceメソッドを解説していきます。