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

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

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

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

Q&A

解決済

2回答

1416閲覧

配列内入った画像を重複がないようランダムに表示させたい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2019/04/03 07:30

編集2019/04/03 08:25

前提・実現したいこと

javascriptでポーカーゲームを作っています。
クリックをしたら親と子にカードが配られて、
配られたカードから勝敗を判断して、勝ち・負け・引き分けの結果が出力されます。

・やりたいこと
ランダムで親と子にカード画像を表示させることは出来たのですが、
親と子のカードが重複して表示されてしまいます。
下記のコードを生かして、親と子に配られるカードを重複させないようにしたいです。

該当のソースコード

javascript

1//クリックしたら発火 2function start(){ 3 4 //トランプを入れる配列 5 var club = []; 6 var diamond = []; 7 var heart = []; 8 var spead = []; 9 var suit; 10 11 //出力場所 12 var p_obj = []; 13 var c_obj = []; 14 15 16 for(var j = 0; j < 5; j++){ 17 p_obj[j] = document.getElementById("p_hand" + (j + 1)); 18 19 for(var l = 0; l < 5; l++){ 20 c_obj[l] = document.getElementById("c_hand" + (l + 1)); 21 22 for(var i = 0; i < 13; i++){ 23 club[i] = ("img/c" + (i + 1) + ".png"); 24 diamond[i] = ("img/d" + (i + 1) + ".png"); 25 heart[i] = ("img/h" + (i + 1) + ".png"); 26 spead[i] = ("img/s" + (i + 1) + ".png"); 27 } 28 29 30 suit = club.concat(diamond,heart,spead); 31 32 33 var e = Math.floor(Math.random() * suit.length); 34 35 36 p_obj[j].src = suit[e]; 37 c_obj[l].src = suit[e]; 38 39 40 } 41 } 42}

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

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

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

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

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

guest

回答2

0

ベストアンサー

  • カードは連番のid:52個で管理してください
  • シャッフルします
  • 頭から5枚を自分、そこから5枚を相手のような処理がよいでしょう

sample

javascript

1var card=Array(52).fill(null).map((x,y)=>[y,Math.random()]).sort((x,y)=>x[1]-y[1]).map(x=>x[0]); 2var me=card.slice(0,5); 3var you=card.slice(5,10); 4console.log([card,me,you]);

画像url作成

javascript

1<script> 2var card=Array(52).fill(null).map((x,y)=>[y,Math.random()]).sort((x,y)=>x[1]-y[1]).map(x=>x[0]); 3var me=card.slice(0,5); 4var you=card.slice(5,10); 5function getImage(num){ 6 var path="img/"; 7 var ext=".png"; 8 var suit=["c","d","h","s"]; 9 var num1=parseInt(num/13); 10 var num2=num%13+1; 11 return path+suit[num1]+num2+ext; 12} 13var me_card=me.map(x=>getImage(x)); 14console.log([me,me_card]); 15var you_card=you.map(x=>getImage(x)); 16console.log([you,you_card]); 17</script>

投稿2019/04/03 07:45

編集2019/04/03 08:53
yambejp

総合スコア114769

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

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

退会済みユーザー

退会済みユーザー

2019/04/03 08:41 編集

ありがとうございます!重複せずにconsole.logに表示が出来ました! その代わりに画像がエラーになってしまってしまいました…。 お手数をおかけして申し訳ないのですが上記の方法を用いて画像を表示する方法はありますか?
guest

0

このプログラムを生かすなら、
ランダムで選択後に、既に使われているか都度判定するしかない、でしょうか。

私なら山札用の配列を作り [s01,s02,s03.....s13,h01,h02,....c12,c13,J]等
その配列をシャッフルして[c03,h13,d05,c04,.....]等
後は配列の頭から順番に読んでいく方法にします。

投稿2019/04/03 07:47

torisan

総合スコア678

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

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

torisan

2019/04/03 07:48

もう書かれてた……。 ようはyambejpさんと同じ手法です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問