chinchiroのロジック解説(10)
親と子の勝負メソッド
前回少し触れたbout
メソッドは、親と子が一対一で役の強さで勝負するメソッドです。
長いので、親が勝った場合だけ紹介します。子の勝ちの時はほぼこれをひっくり返すだけで、引き分けの時は状態の変化がないだけなので、説明は不要かと思います。
async bout (dealer, user) { console.log(`${user.name}: ${user.betting} bet`) await this.sleep(1000) await this.create_role(user) if ((dealer.role === -1) || (user.role === -1)) { user.betting = user.betting * 2 } if (dealer.role > user.role) { const payout = user.betting * this.payout_rate(dealer.role) dealer._token += payout user._token -= payout console.log(`${dealer.name} win`) console.log(`${dealer.name}: ${dealer._token}(+${payout})`) console.log(`${user.name}: ${user._token}(-${payout})`) } }
まず、bout
メソッドは引数を2つ取り、先の方が親番のユーザーのインスタンス、後の引数が親と勝負する子のユーザーのインスタンスです。
最初の方でcreate_role(user)
で子の役を作ります。できた役はユーザーのインスタンスにrole
属性として持たせます。
親番の役は、このbout
メソッドが呼び出される前に作って、やはり親のユーザーのインスタンスに持たせます。
なぜ親の役はこのbout
メソッドで作らないかというと、chinchiroは1回のサイクルの中で、親が最初に作った役とそれぞれの子が勝負する形なためです。
次の if ((dealer.role === -1)...
のところでは、親か子の役が-1の時、子の掛け金が2倍になるようになっています。
この-1は、役がヒフミの時の数字です。chinchiroでは、勝負するために役の強さを数値で持たせています。
最大がピンゾロの13で、次が6のゾロ目の12、5のゾロ目の11と続き、目無しが0、ヒフミが-1です。
ヒフミは最弱の役で、しかも相手に払う金額が2倍になってしまう負の役です。
賭け金を決めるのは子のため、子の賭け金の値が2倍になるようにしています。
親の持つ役の値と子の持つ役の値で比べて、親が多かった場合if (dealer.role > user.role) ...
の処理を行います。
賭け金user.betting
と、payout_rate(dealer.role)
で割り出した倍率を使い、払戻額payout
の変数を出して賭け金の移動を行います。