PC用 タイニー What If ソース
<html> <head> <title>WHAT IF !!</title> <script language="JavaScript"> <!-- game=0; // 1のときゲーム中 cr="\r\n"; // 文字の折り返し用空白文字 counter=0; // カードを積み上げた枚数 hicount=0; // 最高クリア枚数 ct=1; // カードを出す順番 maime=new Array(52); // カードの順番が入った配列(1〜52) bacard=1; // 場に出ている6枚のカードの場所 nokoris=""; // 各スーツの残りカード nokoric=""; nokorid=""; nokorih=""; basuuji=new Array(7); // 場に出ているカードの数字 basuit=new Array(7); // 場に出ているカードのスーツ caflag=new Array(7); // カードが重ねられるか?のフラグ ×と○ Cegara=new Array(7); // 1〜13のカードの絵柄 function Syokika() { // ***** カードをくる ***** // カードの数を文字列にする mojiretu=""; for (i=1; i<=9; i++) { mojiretu=mojiretu+"0"+i+","; } for (i=10; i<=52; i++) { mojiretu=mojiretu+String(i)+","; } // カードの順番ををランダムにする for (i=52; i>0; i--) { rnd=Math.floor(Math.random() * i); // 乱数の作成 maime[i]=mojiretu.substr(rnd*3, 2); mojiretu=mojiretu.replace(maime[i]+",",""); // maime[i]を数字に変換 maime[i]=parseInt(maime[i].charAt(0))*10 + parseInt(maime[i].charAt(1)); } // 最初の6枚を作成 for (ct=1; ct<=6; ct++) { bacard=ct; Csakusei(); } // 残りカードの作成 for (i=1; i<=13; i++) { nokoris=nokoris+i+":"; nokoric=nokoric+i+":"; nokorid=nokorid+i+":"; nokorih=nokorih+i+":"; } // カードと残りカードを表示 basuit[0]="";basuuji[0]=""; // 重ねる場所を空白にする Cegara[0]=cr+cr+cr+cr+cr+cr; for (i=0; i<=6; i++) { caflag[i] = "○"; // カードを重ねられる状態にする Chyouji(i); Nokori(basuit[i],basuuji[i]); } game=1 // ゲーム開始 } function Csakusei() { // **** 52の数字を、4つのスーツ&13枚のカードにする関数 **** if (maime[ct] <= 13) { // スペード basuit[bacard]="S"; basuuji[bacard]=maime[ct]; }else if (13<maime[ct] && maime[ct]<=26) { // クラブ basuit[bacard]="C"; basuuji[bacard]=maime[ct]-13; }else if (26<maime[ct] && maime[ct]<=39) { // ダイヤ basuit[bacard]="D"; basuuji[bacard]=maime[ct]-26; }else if (39<maime[ct] && maime[ct]<=52) { // ハート basuit[bacard]="H"; basuuji[bacard]=maime[ct]-39; }else{ // カードが無くなった時 basuit[bacard]=""; basuuji[bacard]=""; } //カードの絵柄を作成 switch (basuit[bacard]) { case "S": Cegara[bacard]=" "+cr +" SSSS "+cr +" S "+cr +" SSSS "+cr +" S "+cr +" SSSS "+cr break; case "C": Cegara[bacard]=" "+cr +" CCCCC "+cr +" C "+cr +" C "+cr +" C "+cr +" CCCCC "+cr break; case "D": Cegara[bacard]=" "+cr +" DDDD "+cr +" D D "+cr +" D D "+cr +" D D "+cr +" DDDD "+cr break; case "H": Cegara[bacard]=" "+cr +" H H "+cr +" H H "+cr +" HHHHHH "+cr +" H H "+cr +" H H "+cr break; default: Cegara[bacard]=cr+cr+cr+cr+cr+cr break; } } function Chyouji(a) { // **** カードを表示する関数 **** // 引数 a表示する場所 switch (a) { case 0: document.what.card0.value=basuit[0]+" "+basuuji[0]+cr+Cegara[0]; document.what.maisuu.value=counter; break; case 1: document.what.card1.value=basuit[1]+" "+basuuji[1]+cr+Cegara[1]; document.what.ok1.value=caflag[1]; break; case 2: document.what.card2.value=basuit[2]+" "+basuuji[2]+cr+Cegara[2]; document.what.ok2.value=caflag[2]; break; case 3: document.what.card3.value=basuit[3]+" "+basuuji[3]+cr+Cegara[3]; document.what.ok3.value=caflag[3]; break; case 4: document.what.card4.value=basuit[4]+" "+basuuji[4]+cr+Cegara[4]; document.what.ok4.value=caflag[4]; break; case 5: document.what.card5.value=basuit[5]+" "+basuuji[5]+cr+Cegara[5]; document.what.ok5.value=caflag[5]; break; case 6: document.what.card6.value=basuit[6]+" "+basuuji[6]+cr+Cegara[6]; document.what.ok6.value=caflag[6]; break; } } function Nokori(a,b) { // **** 残りカードを表示する関数 **** // 引数 aカードのスーツ,bカードの数 if (a != "") { // bの文字数だけ空白を作る blank=" "; b=""+b; // bを文字に変換 for (li=1; li<=b.length; li++){ blank=blank+" "; } switch (a) { case "S": nokoris=nokoris.replace(b+":",blank); break; case "C": nokoric=nokoric.replace(b+":",blank); break; case "D": nokorid=nokorid.replace(b+":",blank); break; case "H": nokorih=nokorih.replace(b+":",blank); break; } // textareaに表示する document.what.nokori.value="S "+nokoris+cr+"C "+nokoric+cr+"D "+nokorid+cr+"H "+nokorih; } } // **** カードのボタンを押したときの関数 ***** function Card1() { if (game==1 && caflag[1]=="○") { basuit[0] = basuit[1]; basuuji[0]=basuuji[1]; Cegara[0]=Cegara[1]; bacard=1; Csakusei(); Nokori(basuit[1],basuuji[1]); Main(); } } function Card2() { if (game==1 && caflag[2]=="○") { basuit[0] = basuit[2]; basuuji[0]=basuuji[2]; Cegara[0]=Cegara[2]; bacard=2; Csakusei(); Nokori(basuit[2],basuuji[2]); Main(); } } function Card3() { if (game==1 && caflag[3]=="○") { basuit[0] = basuit[3]; basuuji[0]=basuuji[3]; Cegara[0]=Cegara[3]; bacard=3; Csakusei(); Nokori(basuit[3],basuuji[3]); Main(); } } function Card4() { if (game==1 && caflag[4]=="○") { basuit[0] = basuit[4]; basuuji[0]=basuuji[4]; Cegara[0]=Cegara[4]; bacard=4; Csakusei(); Nokori(basuit[4],basuuji[4]); Main(); } } function Card5() { if (game==1 && caflag[5]=="○") { basuit[0] = basuit[5]; basuuji[0]=basuuji[5]; Cegara[0]=Cegara[5]; bacard=5; Csakusei(); Nokori(basuit[5],basuuji[5]); Main(); } } function Card6() { if (game==1 && caflag[6]=="○") { basuit[0] = basuit[6]; basuuji[0]=basuuji[6]; Cegara[0]=Cegara[6]; bacard=6; Csakusei(); Nokori(basuit[6],basuuji[6]); Main(); } } function Ccheck(a) { // **** カードが重ねられるかのチェック **** // 引数a、カードの場所 // 重ねられるとき ○ 重ねられないとき × if (basuit[a] == basuit[0]) { caflag[a]="○"; }else if (basuuji[a] == basuuji[0]) { caflag[a]="○"; }else{ caflag[a]="×"; } } function Main() { // **** メインルーチン **** counter++; // カードの書き換え for (i=0; i<=6; i++) { Ccheck(i); Chyouji(i); } ct++; Message(); // オールクリアの判定 if (counter==52) { Allclear(); } // ゲームオーバーの判定 if (caflag[1]=="×" && caflag[2]=="×" && caflag[3]=="×" && caflag[4]=="×" && caflag[5]=="×" && caflag[6]=="×") { Gameover(); } } function Message() { if (counter==15) { alert("15枚クリア!"); }else if (counter==26) { alert("26枚クリア!あと半分だ!"); }else if (counter==35) { alert("35枚クリア!絶好調!!"); }else if (counter==45) { alert("45枚クリア!!すげぇ〜!!"); } } function Allclear() { // **** オールクリア!! **** alert("52枚オールクリアです!!\nおめでとう!!"); } function Gameover() { // **** ゲームオーバー **** document.what.card0.value=basuit[0]+" "+basuuji[0]+cr+cr+ "GAME OVER"+cr+ "再プレイは"+cr+ "[RESET]を"+cr+ "クリック"+cr+ "してね。"; // 最高クリア枚数の表示 if (hicount<counter) { hicount=counter document.what.himaisuu.value=hicount; } } function Rest(){ // **** RESETボタンを押したとき **** game=0; counter=0; ct=1; bacard=1; nokoris=""; nokoric=""; nokorid=""; nokorih=""; Syokika(); } // --> </script> <body onload="Syokika()"> <form name="what"> <center> <textarea name="nokori" rows="4" cols="40"></textarea> <table> <tr> <td> <input type="button" name="reset" value="RESET" onclick="Rest()"> <textarea name="card0" rows="8" cols="10"></textarea> </td> <td> <table> <tr><td> 最高クリア枚数 </td></tr> <tr><td> <input type="text" size="2" name="himaisuu" value="0"> </td></tr> <tr><td> クリア枚数 </td></tr> <tr><td> <input type="text" size="2" name="maisuu" value="0"> </td></tr> </table> </td> </tr> </table> <table> <tr> <td> <textarea name="card1" rows="8" cols="10"></textarea> </td> <td> <textarea name="card2" rows="8" cols="10"></textarea> </td> <td> <textarea name="card3" rows="8" cols="10"></textarea> </td> <td> <textarea name="card4" rows="8" cols="10"></textarea> </td> <td> <textarea name="card5" rows="8" cols="10"></textarea> </td> <td> <textarea name="card6" rows="8" cols="10"></textarea> </td> </tr> <tr> <td align="center"> <input type="button" name="button1" value=" 1 " onclick="Card1()"> <input type="text" size="1" name="ok1" value="○"> </td> <td align="center"> <input type="button" name="button2" value=" 2 " onclick="Card2()"> <input type="text" size="1" name="ok2" value="○"> </td> <td align="center"> <input type="button" name="button3" value=" 3 " onclick="Card3()"> <input type="text" size="1" name="ok3" value="○"> </td> <td align="center"> <input type="button" name="button4" value=" 4 " onclick="Card4()"> <input type="text" size="1" name="ok4" value="○"> </td> <td align="center"> <input type="button" name="button5" value=" 5 " onclick="Card5()"> <input type="text" size="1" name="ok5" value="○"> </td> <td align="center"> <input type="button" name="button6" value=" 6 " onclick="Card6()"> <input type="text" size="1" name="ok6" value="○"> </td> </tr> </table> </center> </form> </body> </head> </html>
サンプルを自由に使っていいとおっしゃる方のソースを 参考に作ったので、好き勝手に使ってください。 全クリアしたときに飛ぶリンクは消しています。 あったら邪魔でしょ?(笑) 比較的なんのトラブルもなく作ることができましたが、 カードをランダムに混ぜるルーチンは少々てこずりました。 でも、
「犬でもわかるJavaScript講座」
では、もっと簡単な 方法でカードを混ぜる方法が載っています。 オレってアホやん!て思う瞬間です。
● タイニー What If のページへ戻る