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の変数を出して賭け金の移動を行います。