JavaScript

【JavaScript】じゃんけんゲームを作る – カウンター編 –

前回作成したじゃんけんゲームにカウンター(回数)処理を実装したいと思います。

カウンター処理を実装することで、各プレイヤーの得点や終了判定ができたりと一気にゲーム感が出てきます。
今回は各プレイヤーごとの勝ち点変数、勝敗結果をを格納する配列を作成し、
処理ごとに配列格納や加算等する処理を実装しました。

処理の流れ
  1. ユーザーの選択値を取得する
  2. NPC側の値をMath.random() 関数を利用し3未満を求める
    ※念の為にMath.floor() 関数を利用し小数点以下を切り捨てています。
  3. 互いの入力値をテキスト変換し出力
  4. 勝ち負け判定
  5. 【New】勝ったプレイヤーの変数を加算する
  6. 【New】各プレイヤーの勝敗配列に結果を格納する
  7. 【New】各プレイヤーの勝敗配列を出力する
  8. 【New】終了判定
  9. 結果出力

じゃんけんゲームのソースコード

<div class="container">
  <p id="title">じゃんけん...</p>
  <button class="btn" id="0" onclick="janken(0)">ぐー</button>
  <button class="btn" id="1" onclick="janken(1)">ちょき</button>
  <button class="btn" id="2" onclick="janken(2)">ぱー</button>
  <p id="result"></p>
  <p id="final_result"></p>
</div>
.container {
  padding: 30px;

  & .btn {
    display: inline-block;
    padding: 10px;
    border: 1px solid;
    border-radius: 10px;
    transition: all 0.3s;
    margin: 0 auto;
    cursor: pointer;
    
    &:hover {
      background-color: black;
      color: white;
    }
  }
}
/**
 * 共通変数
 */
var counter = 0;
var user_result = [];
var user_wincount = 0;
var npc_result = [];
var npc_wincount = 0;

/**
 * じゃんけん処理
 * @param user_num: ボタン値
 * @return HTML
 */
function janken(user_num){

  // 乱数で今NPC側の値を取得
  var npc_num = Math.floor(Math.random() * 3);

  // 出力用
  var resultHTML = "";
  var final_resultHTML = "";

  resultHTML += "[あなた: " + changeText(user_num) + " ] VS [相手: " + changeText(npc_num) + " ]<br>";

  // 勝ち負け判定
  if(user_num == npc_num) {
    // 引き分け
    // 各配列に結果を格納
    user_result.push("-");
    npc_result.push("-");
  } else if((user_num == 0 && npc_num == 1)||(user_num == 1 && npc_num == 2)||(user_num == 2 && npc_num == 0)) {
    // 勝ち
    // プレイヤーのカウンター値を加算
    user_wincount++;
    // 各配列に結果を格納
    user_result.push("○");
    npc_result.push("×");
  } else {
    // 負け
    // NPCのカウンター値を加算
    npc_wincount++;
    // 各配列に結果を格納
    user_result.push("×");
    npc_result.push("○");
  }

  // 全体カウンター値を加算
  counter++;

  resultHTML += "成績(あなた):" + user_result.toString() + "<br>";
  resultHTML += "成績(相手):" + npc_result.toString();
  
  // 結果出力
  document.getElementById("result").innerHTML = resultHTML;

  // 終了判定
  if(user_wincount == 3 || npc_wincount == 3){
    if(user_wincount == 3){
      final_resultHTML += "あなたの勝ちです!!<br>"  
    } else if(npc_wincount == 3){
      final_resultHTML += "あなたの負けです...<br>"  
    }
    final_resultHTML += "処理回数:" + counter + "回<br>";
    // 処理結果出力
    document.getElementById("final_result").innerHTML = final_resultHTML;
    
    // 各ボタンを非活性化する
    document.getElementById("0").setAttribute("disabled", true);
    document.getElementById("1").setAttribute("disabled", true);
    document.getElementById("2").setAttribute("disabled", true);
  }

}


/**
 * 値を出力用テキストに変換する処理
 * @param num: 値(整数)
 * @return String
 */
function changeText(num){
  var item = "";
  switch (num){
    case 0: item = "ぐー"; break;
    case 1: item = "ちょき"; break;
    case 2: item = "ぱー"; break;
    default: item = "不正な値を検出";
  }
  return item;
}

じゃんけんゲームのサンプル

See the Pen Janken_Counter by alunote (@alunote) on CodePen.

処理結果の配列を配列変数.toString()で出力することで、視覚的にも分かりやすくしてみました。

説明は以上となります。
この記事が誰かの助けになれば幸いです。