← 前のページへ戻る

「スロットマシーン」のプログラム(JavaScriptを記述する)


 「画面作り」で制作したHTMLの中に、JavaScript記入して行きます。
 赤色の部分がJavaScriptで記入した部分です。
 緑色の部分コメントですので、記入する必要はありません。

<HTML>
<HEAD>
<TITLE>スロットマシーン</TITLE>
<SCRIPT language=JavaScript>
<!--
//説明3(必要な変数を設定する)
var b=0;     
 //画像取り込み 0:未完 1:完了(b=1でスタート可)
var coin=50;  
 //コイン枚数(ゲーム開始時は50)
var doramu1=0;
 //ドラム1の絵柄決定変数
var doramu2=1;
 //ドラム2の絵柄決定変数
var doramu3=2;
 //ドラム3の絵柄決定変数
var jyun=3;
    //ドラムの止まった数(ゲーム開始時は3)

//説明4(画像のダウンロードを確認する関数)

function check(){
  flag=true;
  for(j=0; j<document.images.length; j++){
      if(document.images[j].complete==false){
        flag=false;
      }
  }
  if(flag==true){
    b=1;                               //ダウンロード完了時に実行される部分
    myform.mytext.value=" START を押して下さい。";  //ダウンロード完了時に実行される部分
    coinform.cointext.value=" $ "+coin;           //ダウンロード完了時に実行される部分
  }else{setTimeout("check()",200);}
}

//説明5(スタートボタンを押した時に呼び出される)
function hajime(){
    if(b==1 && jyun==3 && coin>=1){
        b=0;
 //スタートの二度押し厳禁
        kaiten1();
        kaiten2();
        kaiten3();
        jyun=0;
  //ドラムの止まった数(全部回っているので0にする)
        coin-=1;
 //コインを1枚減らす
        myform.mytext.value=" 左から順に STOP を押して下さい。";
        coinform.cointext.value=" $ "+coin;
    }
}

//説明6(左のドラムを回転させる)

function kaiten1(){
    m1=doramu1%5;
    if(m1==0){document.p1.src="image0.gif";}
    if(m1==1){document.p1.src="image1.gif";}
    if(m1==2){document.p1.src="image2.gif";}
    if(m1==3){document.p1.src="image3.gif";}
    if(m1==4){document.p1.src="image4.gif";}
    doramu1=doramu1+1;
    ugoki1=setTimeout("kaiten1()",150);
}

//説明6(中央のドラムを回転させる)

function kaiten2(){
    m2=doramu2%5;
    if(m2==0){document.p2.src="image0.gif";}
    if(m2==1){document.p2.src="image1.gif";}
    if(m2==2){document.p2.src="image2.gif";}
    if(m2==3){document.p2.src="image3.gif";}
    if(m2==4){document.p2.src="image4.gif";}
    doramu2=doramu2+1;
    ugoki2=setTimeout("kaiten2()",180);
}

//説明6(右のドラムを回転させる)

function kaiten3(){
    m3=doramu3%5;
    if(m3==0){document.p3.src="image0.gif";}
    if(m3==1){document.p3.src="image1.gif";}
    if(m3==2){document.p3.src="image2.gif";}
    if(m3==3){document.p3.src="image3.gif";}
    if(m3==4){document.p3.src="image4.gif";}
    doramu3=doramu3+1;
    ugoki3=setTimeout("kaiten3()",150);
}

//説明7(ドラム1を止める)

function stop1(){
    if(jyun==0){
        clearTimeout(ugoki1);
        jyun=1;
    }
}

//説明7(ドラム2を止める)

function stop2(){
    if(jyun==1){
        clearTimeout(ugoki2);
        jyun=2;
    }
}

//説明7(ドラム3を止めて、hantei()関数を実行する)

function stop3(){
    if(jyun==2){
        clearTimeout(ugoki3);
        hantei();
        jyun=3;
    }
}

//説明8(判定する)

function hantei(){
    if(m1==m2 && m2==m3 && m3==m1){
        myform.mytext.value=" 大当たり!$50!";
        coin+=50;
        coinform.cointext.value=" $ "+coin;
    }else{
        myform.mytext.value=" はずれ! 残念でした。";
    }
    if(coin<=0){myform.mytext.value=" ゲームオーバーです";} 
//コインが0の時の処理
    b=1;
}
//-->
</SCRIPT>

</HEAD>
<BODY onload="check()"> //説明4
<CENTER>
<TABLE border="1" bgcolor="#000000">
<TBODY>
<TR>
<TD bgcolor="#ffffff"><IMG src="image0.gif" width="100" height="100" border="0" name="p1"></TD> //説明2
<TD bgcolor="#ffffff"><IMG src="image1.gif" width="100" height="100" border="0" name="p2"></TD> //説明2
<TD bgcolor="#ffffff"><IMG src="image2.gif" width="100" height="100" border="0" name="p3"></TD> //説明2
<TD align="center" valign="middle">
<FORM name="coinform"><FONT color="#ffffff"><BR> //説明1
所持金<BR>
</FONT><BR>
<INPUT size="10" type="text" style="font-size:18px" name="cointext" readonly></FORM> //説明1
</TD>
</TR>
<TR>
<TD align="center"><INPUT type="button" value="STOP" style="font-size:18px" onclick="stop1()"></TD> //説明7
<TD align="center"><INPUT type="button" value="STOP" style="font-size:18px" onclick="stop2()"></TD> //説明7
<TD align="center"><INPUT type="button" value="STOP" style="font-size:18px" onclick="stop3()"></TD> //説明7
<TD align="center"><INPUT type="button" value="START" style="font-size:18px" onclick="hajime()"></TD> //説明5
</TR>
</TBODY>
</TABLE>
<FORM name="myform"> //説明1
<INPUT size="50" type="text" value=" しばらくお待ち下さい。" style="font-size:18px" name="mytext" readonly> //説明1
</FORM>
<TABLE border="1">
<TBODY>
<TR>
<TD colspan="5" align="center">当たり図柄</TD>
</TR>
<TR>
<TD><IMG src="image0.gif" width="50" height="50" border="0"></TD>
<TD><IMG src="image1.gif" width="50" height="50" border="0"></TD>
<TD><IMG src="image2.gif" width="50" height="50" border="0"></TD>
<TD><IMG src="image3.gif" width="50" height="50" border="0"></TD>
<TD><IMG src="image4.gif" width="50" height="50" border="0"></TD>
</TR>
</TBODY>
</TABLE>
</CENTER>
</BODY>
</HTML>



スクリプト解説

 (説明1)
 まず最初に、テキストボックスにメッセージを表示できるように準備します。
 (テキストボックスにメッセージを表示
 テキストボックスは、コインの枚数表示部分と、メッセージ表示部分の、2つありますので、それぞれについて設定します。

 コイン枚数表示部分の<FORM>タグにcoinformという名前を、<INPUT>タグにcointextという名前をつけます。
 これで、coinform.cointext.valueを実行すると、コインの枚数表示部にメッセージを表示することができます。

 メッセージ表示部分の<FORM>タグには、myformという名前を、<INPUT>タグにmytextという名前をつけます。ここでつける名前は、コイン表示部と同じにならないように注意して下さい。
 これで、myform.mytext.valueを実行すると、メッセージ表示部のテキストボックスにメッセージを表示することができます。


 (説明2)
 回転するドラムの絵の<IMG>タグにも名前をつけます。
 左のドラムから順番にp1、p2、p3という名前をつけます。
 これで、document.<IMGにつけた名前>.src="ファイル名"を実行すると、その画像を切り替えることができます。
 (画像の切り替え


 (説明3)
 最初に必要な変数を設定しておきます。(変数
 最初に設定しておけば、いろいろな関数の中でその変数を使用することができるので便利です。
 逆に、必要となるまでに設定しておかないと、エラーとなってしまうので注意して下さい。
 それぞれの変数の意味については、スクリプト内のコメントを見てください。(コメント


 (説明4)
 check()関数で、ゲーム中に使用する画像が全て表示(ダウンロード)されたかを確認しています。ダウンロードが完了していないと、ゲームスタートできないようにしてあります。
 (画像のプリロード

 ダウンロードが完了すると、次の3つのスクリプトが実行されます。
  b=1;
  myform.mytext.value=" START を押して下さい。";
  coinform.cointext.value=" $ "+coin;


 (説明5)
 「スタート」というボタンを押すと、onclick属性によりhajime()関数がよびだされます。
 (マウスによる処理参照
 hajime()関数は、条件式(if文)により、b=1、jyun=3、coin>=1の3つを満たす時に動作する(スタートボタンを押せる)ようになっています。
 (条件式 if文


 (説明6)
 doramu1()は左、doramu2()は中央、doramu3()は右、のドラムを回転させるための関数ですが、内容的にはどれも同じです。このdoramu()関数は、「車でGo!」で車を走らせるhasiru()関数と全く同じ仕組みです。

 kaiten1()関数を例に解説していきます。
 kaiten1()関数は、タイマーugoki1によって150/1000秒後に再びkaiten1()関数を呼び出すようになっています。その為、kaiten1()関数は何度も繰り返し実行されることになります。
 (タイマーセット・解除
 しかし、実行されるごとに doramu1=doramu1+1 によって、doramu1の値が1づつ増える為、m1の値も1づつずれていき(0→1→2→3→4→0→1→2の順番)、条件式 if文の処理内容も変化していきます。
 150/1000秒ごとに表示される画像が切り替わっていく為、ドラムが回転しているように見えるのです。
 (画像を切り替える


 (説明7)
 「STOP」というボタンを押すと、onclick属性によりstop()関数をそれぞれ呼び出します。
 (マウスによる処理
 stop()関数は、clearTimeoutによりドラムの回転を止めます。
 (タイマーセット・解除
 左のドラムを止めるのはstop1()関数、中央はstop2()関数、右はstop3()関数になります。
 jyun=0の時は左、jyun=1の時は中央、jyun=2の時は右のSTOPボタンを動作させることができます。
 これによって、ドラムは左から順番にしか止められないようになっています。

 stop3()関数が実行されると、hantei()関数を実行するようになっています。
 また、ドラムが3つとも止まったので、jyun=3とします。


 (説明8)
 ドラムの絵柄がそろったかの判定を行います。(条件式 if文
 m1=m2、m2=m3、m3=m1なら絵柄が全て揃っているということなので、大当たりの判定をします。それ以外の場合は、はずれの判定をします。

 最後にcoinが残っているかの判定をします。0枚なら、ゲームオーバーと表示します。