質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.35%

じゃんけんの判定をしたい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 720

yuzumikan

score 27

度々質問失礼します.
じゃんけんのプログラムを作成していて,出た手によって勝ち負けの判定を出力したいです.

ユーザの各手を0,1,2で表し,PCの手はarrの0,1,2で表して計算により勝ち負けを判定できると思ったのですが,今のところエラーや勝ち負けの結果も何も出ません.
どこがおかしいのでしょうか.

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>じゃんけん</title>
</head>
<body>
  <p>
    <input type="button" value="start" onclick="toggle()" />
    PCの手:<span id="pchand"></span>
  </p>
  <p>
    <input type="button" value="グー" onclick="serect_hand(0)"/>
    <input type="button" value="チョキ" onclick="serect_hand(1)"/>
    <input type="button" value="パー" onclick="serect_hand(2)"/>
    あなたの手:<span id="userhand"></span>
  </p>
  <p>
   <input type="button" value="結果" onclick="result()"/>
    結果:<span id="kekka"></span>
  </p>
  <p>
    <input type="button" id="reset" value="リセット" onclick="reset()"/>
  </p>

  <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
  <script>
  //PC側:ランダムにグー,チョキ,パー出力
  var view=document.getElementById("pchand");
  var pc_hand;
  var running=false;
  var intervalID;
  var usernohand;

  function toggle(){
      intervalID=setInterval(pc_hand,250); //pc_hand関数を250ミリ秒ごとに繰り返す
      running=true;
  };
  function pc_hand(){
    var arr=["グー","チョキ","パー"];
    var pcnohand=Math.floor(Math.random()*arr.length);
    console.log(arr[pcnohand]);
    view.textContent=arr[pcnohand];
   //console.log(arr[0]); //グー
    // var pc0=arr.lastIndexOf('グー');
    // var pc1=arr.lastIndexOf('チョキ');
    // var pc2=arr.lastIndexOf('パー');
    // console.log(pc0); //0
    // console.log(pc1); //1
    // console.log(pc2); //2
  };

  //ユーザ側:ボタンを押したらPCの手が止まる,選んだ手を出力
  function serect_hand(usernohand){
    if(usernohand==0){
      document.getElementById("userhand").innerHTML="グー";
      clearInterval(intervalID);
      running=false;
    }else if (usernohand==1) {
      document.getElementById("userhand").innerHTML="チョキ";
      clearInterval(intervalID);
      running=false;
    }else if (usernohand==2) {
      document.getElementById("userhand").innerHTML="パー";
      clearInterval(intervalID);
      running=false;
    }
    console.log("ユーザ:"+usernohand); //0,1,2
  };

  //結果:ユーザの勝敗
  function result(){
    if(pc_hand(arr[0])-usernohand==0){
      document.getElementById("kekka").innerHTML="あいこ";
    }else if (pc_hand(arr[1])-usernohand==1) {
      document.getElementById("kekka").innerHTML="あなたの勝ち";
    }else if (pc_hand(arr[2])-usernohand==2) {
      document.getElementById("kekka").innerHTML="あなたの負け";
    }
  };

  //リセットボタンで初期化
  function reset(){
    document.getElementById("pchand").innerHTML="";
    document.getElementById("userhand").innerHTML="";
    document.getElementById("kekka").innerHTML="";
  };
  </script>
</body>
</html>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2017/10/28 20:52

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 2

checkベストアンサー

+1

function result() {
  if (pc_hand(arr[0]) - usernohand == 0) {
    document.getElementById("kekka").innerHTML = "あいこ";
  } else if (pc_hand(arr[1]) - usernohand == 1) {
    document.getElementById("kekka").innerHTML = "あなたの勝ち";
  } else if (pc_hand(arr[2]) - usernohand == 2) {
    document.getElementById("kekka").innerHTML = "あなたの負け";
  }
};

まずresult内でarrを参照しようとしていますがpc_hand内で宣言されてるのでムリです。

また、pc_hand(arr[0])というのは何を期待しているのでしょうか。関数pc_handは引数が0個ですから渡しても無意味です。おそらく現在のPCの手を取得したいのだと思いますが、intervalIDと同様にグローバル変数を使用すればいいのではないでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/29 18:52

    グローバル変数にするのを試したところできました!ありがとうございました.

    キャンセル

0

とりあえず result() がどこでも実行されていません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/29 00:14

    そうでした.結果ボタンを作って,結果ボタンを押すと勝敗が表示されるようにしたいと思います.
    arrが定義されていないというエラーが出るので,arrをグローバル変数にしたりしてみましたがエラーは消えませんでした.勝敗判定での,配列を使って計算の仕方が上手くできていないと思うのですが.

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8" />
    <title>じゃんけん</title>
    </head>
    <body>
    <p>
    <input type="button" value="start" onclick="toggle()" />
    PCの手:<span id="pchand"></span>
    </p>
    <p>
    <input type="button" value="グー" onclick="serect_hand(0)"/>
    <input type="button" value="チョキ" onclick="serect_hand(1)"/>
    <input type="button" value="パー" onclick="serect_hand(2)"/>
    あなたの手:<span id="userhand"></span>
    </p>
    <p>
    <input type="button" value="結果" onclick="result()"/>
    結果:<span id="kekka"></span>
    </p>
    <p>
    <input type="button" id="reset" value="リセット" onclick="reset()"/>
    </p>

    <script src="http://code.jquery.com/jquery-1.11.1.min.js&quot;&gt;&lt;/script&gt;
    <script>
    //PC側:ランダムにグー,チョキ,パー出力
    var view=document.getElementById("pchand");
    var pc_hand;
    var running=false;
    var intervalID;
    var usernohand;

    function toggle(){
    intervalID=setInterval(pc_hand,250); //pc_hand関数を250ミリ秒ごとに繰り返す
    running=true;
    };
    function pc_hand(){
    var arr=["グー","チョキ","パー"];
    var pcnohand=Math.floor(Math.random()*arr.length);
    console.log("PC:"+arr[pcnohand]); //グー,チョキ,パー
    view.textContent=arr[pcnohand];
    //console.log(arr[0]); //グー
    // var pc0=arr.lastIndexOf('グー');
    // var pc1=arr.lastIndexOf('チョキ');
    // var pc2=arr.lastIndexOf('パー');
    // console.log(pc0); //0
    // console.log(pc1); //1
    // console.log(pc2); //2
    };

    //ユーザ側:ボタンを押したらPCの手が止まる,選んだ手を出力
    function serect_hand(usernohand){
    if(usernohand==0){
    document.getElementById("userhand").innerHTML="グー";
    clearInterval(intervalID);
    running=false;
    }else if (usernohand==1) {
    document.getElementById("userhand").innerHTML="チョキ";
    clearInterval(intervalID);
    running=false;
    }else if (usernohand==2) {
    document.getElementById("userhand").innerHTML="パー";
    clearInterval(intervalID);
    running=false;
    }
    console.log("ユーザ:"+usernohand); //0,1,2
    };

    //結果:ユーザの勝敗
    function result(){
    if(pc_hand(arr[0])-usernohand==0){
    document.getElementById("kekka").innerHTML="あいこ";
    }else if (pc_hand(arr[1])-usernohand==1) {
    document.getElementById("kekka").innerHTML="あなたの勝ち";
    }else if (pc_hand(arr[2])-usernohand==2) {
    document.getElementById("kekka").innerHTML="あなたの負け";
    }
    };

    //リセットボタンで初期化
    function reset(){
    document.getElementById("pchand").innerHTML="";
    document.getElementById("userhand").innerHTML="";
    document.getElementById("kekka").innerHTML="";
    };
    </script>
    </body>
    </html>

    キャンセル

  • 2017/10/29 00:18

    コメントエリアではマークダウンが使えないため、コードはここではなく質問文に追記してください。(決して元のコードを消さないでください)

    キャンセル

  • 2017/10/29 01:21

    ご指摘ありがとうございます!質問文に追記しました

    キャンセル

  • 2017/10/29 01:23 編集

    「決して元のコードを消さないでください」と書いたつもりですが。あとからこのページに来た人がやり取りを見ることを前提で編集してください。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る