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

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

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1410閲覧

数字がいくつ一致するかで条件分岐

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/04/27 14:06

編集2021/04/27 15:30

前提・実現したいこと

数字当てをするゲームを作成しています。

ユーザーは6個の数字を、コンピュータは6個の数字+1個の別枠数字を生成します(それぞれ被りなし、1〜43まで)。

知りたいことは、ユーザーが入力した数字と、コンピュータが生成した数字がいくつ合ってたら何等、いくつ合ってたら何等...という条件分岐のやり方です。

全部で1等〜5等を想定しており、

1等 ⇨ ユーザーが入力した6個の数字とコンピュータが生成した6個(別枠以外)が一致
2等 ⇨ ユーザーが入力した6個の数字の内5個はコンピュータが生成した6個(別枠以外)の内の5個と一致、ユーザー数字の残り1個は別枠数字と一致
3等 ⇨ ユーザーが入力した数字6個の内5個がコンピュータが生成した6個(別枠以外)と一致
4等 ⇨ ユーザーが入力した数字6個の内4個がコンピュータが生成した6個(別枠以外)と一致
5等 ⇨ ユーザーが入力した数字6個の内3個がコンピュータが生成した6個(別枠以外)と一致

上記は 「順不同」として想定しています。
ボーナス数字は2等の判定時のみに使用します。

発生している問題・エラーメッセージ

条件分岐の仕方がわからないので、ヒントをいただきたいです。

該当のソースコード

//ユーザーが入力した数字を配列に格納、これ以前に被りを省くようにしているので被らない数字が入っています var user_array = []; for ( var i = 1; i <= 6 ; i++ ) { user_array.push(document.getElementById('number' + i).value); } //コンピュータが生成する数字7個を配列に格納 var com_array = []; var min = 1, max = 43; var length = 7; function intRandom(min, max){ return Math.floor( Math.random() * (max - min + 1)) + min; } for(i = min; i <= length; i++){ while(true){ var tmp = intRandom(min, max); if(!com_array.includes(tmp)){ com_array.push(tmp); break; } } } // ここがわかりません if(user_array.sort().join() == com_array.slice(0,5).sort().join()){ result.innerHTML ='1等'; }else if(){ result.innerHTML ='2等'; }else if(){ result.innerHTML ='3等'; }else if(){ result.innerHTML ='4等'; }else if(){ result.innerHTML ='5等'; }else{ result.innerHTML ='はずれ'; }

試したこと

コンピュータの生成した数字は7個目を別枠数字として考えています。

1等の条件分岐は自身で考えましたが、合っているかの確認はできていません。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takasima20

2021/04/27 20:47

ループで回して当たりをカウントしたら?
退会済みユーザー

退会済みユーザー

2021/04/28 06:03

ありがとうございます。 foreachを使用し、同じ数字があったら変数か何かをプラス1して... というイメージでしょうか? foreachを使ったことがないので色々と調べてみます(1つのforeachで2つの配列を扱えるのか等)。
guest

回答1

0

ベストアンサー

ロト6のシミュレーターでも作るのかな?と思いつつ…

ボーナス数字をプログラム側の配列へ入れずに別枠で管理してあげると、
単純に配列を結合して重複を取り除き、配列の長さで判定するという組み方が出来ます。

  1. 「ユーザーが選んだ数字の配列」にボーナス数字があるかチェック、フラグを立てる。
  2. 「ユーザーが選んだ数字の配列」と「プログラム側のアタリの配列」を1つの配列にまとめる。
  3. まとめた配列から重複を取り除く
  4. 配列に残った数字の長さ(個数)を数える

おいらならこんな感じで作りますよ。
1つにまとめた配列の長さが6になれば1等、長さが7になれば2等or3等※フラグで判定
長さが8になれば…って感じかな。

投稿2021/04/28 00:12

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/04/28 06:07

ありがとうございます。 当初、ボーナス数字を別枠で作ろうと試行錯誤していたのですが上手く出来ずに纏めてしまいました。 教えていただいた方法はかなり良さそう(変な表現ですみません)なので、この方向で考え直してみようと思います!
退会済みユーザー

退会済みユーザー

2021/04/28 06:44

連続で失礼致します。 お陰様で別枠のランダム数字を作成する方法を再考することになり、無事に作成できました。 const random_num = com_array.pop(); 引き続き取り組んで参ります。
退会済みユーザー

退会済みユーザー

2021/04/28 09:42

いえいえ、プログラミングをエンジョイしてくださいね~
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問