chinchiroのロジック解説(7)

ゲーム進行のロジック

今回はメインとなるゲーム進行のロジックについて解説します。

while (true) {
  色々な処理
}

基本的には、行動選択→掛け金の決定→各プレイヤーがサイコロを振って役を作る→勝敗を決定→掛け金の払い戻しを1サイクルとして、while(true)でこれをぐるぐると永久的に回していきます。

親番の交代

chinchiroではプレイヤーを含む各ユーザーのインスタンスを、イテレーターの外の配列usersに入れています。

この配列の先頭、つまりusers[0]を親番としてゲーム進行が行われるようにしてあります。

そして、サイクルの最後でこのusers[0]を配列から削除し、再び配列に追加します。

こうすることで、例えば[user1, user2, user3]だったとすると、[user2, user3, user1]のように順番が入れ替わり、次のサイクルの親が1つずれて交代で行われるようになります。

ゲームセット

誰かの所持金が0以下になるとgamesetメソッドが作動し、ゲームが終わります。

これ以外ではアクションの選択でsurrenderを選んだ場合もゲームを終わらせることができます。

  gameset () {
    console.log('\u001b[1mgameset!\u001b[0m')
    this.users.sort(function (a, b) {
      if (a._token < b._token) return 1
      if (a._token > b._token) return -1
      return 0
    })
    for (const user of this.users) {
      console.log(`${user.name}: ${user._token}`)
    }
    if (this.users[0] === this.user1) {
      console.log('☆☆☆\u001b[3myou are winner!\u001b[0m☆☆☆')
    }
    process.exit()
  }

前述の通りusersはユーザーのインスタンスが入った配列で、this.users.sortメソッドで所持金の多い順に並び替えてから表示しています。これが最終順位になります。

これがゲーム開始から終了まで一連の流れです。