← 前のページへ戻る

「車でGo!」のプログラム(JavaScriptを記述する)

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

<HTML>
<HEAD>
<TITLE>車でGo!プログラム</TITLE>
<SCRIPT language=JavaScript>
<!--
//説明3(必要な変数を設定する)
var a=0; //スタートを押すと1・ストップを押すと0になる(初期値は0)
var b=0; //使用する画像のダウンロードが完了すると1になる
var i=1;  //hasiru()関数内で使用する変数(初期値はi=1)

//説明4(画像のダウンロード完了を確認する関数)
function check(){
  flag=true;
  for(j=0; j<document.images.length; j++){
    if(document.images[j].complete==false){
    flag=false;
    }
  }
  if(flag==true){
    myform.mytext.value=" スタートで、車が走ります。ストップで、目的地に停車させて下さい。"; //ダウンロード完了時に実行される部分
    b=1;                                                        //ダウンロード完了時に実行される部分
  }else{setTimeout("check()",200);}
}


//説明5(スタートを押した時に呼び出される関数)
function hajime(){
  if(b==1 && a==0){
    document.p1.src="miti.gif";
    document.p2.src="miti.gif";
    document.p3.src="miti.gif";
    document.p4.src="miti.gif";
    document.p5.src="miti.gif";
    document.p6.src="miti.gif";
    document.p7.src="miti.gif";
    document.p8.src="miti.gif";
    document.p9.src="miti.gif";
    document.p10.src="conv.gif";
    document.p11.src="miti.gif";
    document.p12.src="miti.gif";
    myform.mytext.value=" コンビニを探しています。";
    hasiru();
    a=1;
 //スタートの2度押しの禁止(ストップを押すとa=0になる)
  }
}


//説明6(車を走らせる処理)
function hasiru(){
  m=i%12
  if(m==0){document.p1.src="miti.gif";document.p2.src="migi.gif";}
  if(m==1){document.p2.src="miti.gif";document.p3.src="migi.gif";}
  if(m==2){document.p3.src="miti.gif";document.p4.src="migi.gif";}
  if(m==3){document.p4.src="miti.gif";document.p5.src="migi.gif";}
  if(m==4){document.p5.src="miti.gif";document.p6.src="migi.gif";}
  if(m==5){document.p6.src="miti.gif";document.p7.src="hidari.gif";}
  if(m==6){document.p7.src="miti.gif";document.p8.src="hidari.gif";}
  if(m==7){document.p8.src="miti.gif";document.p9.src="hidari.gif";}
  if(m==8){document.p9.src="miti.gif";document.p10.src="hidari.gif";}
  if(m==9){document.p10.src="conv.gif";document.p11.src="hidari.gif";}
  if(m==10){document.p11.src="miti.gif";document.p12.src="hidari.gif";}
  if(m==11){document.p12.src="miti.gif";document.p1.src="migi.gif";}
  i=i+1;
  ugoku=setTimeout("hasiru()",100);
}


//説明7(ストップを押された時に呼び出される関数)
function tomeru(){
  if(a!=0){
     //スタートが押されているかの確認
    clearTimeout(ugoku);
    a=0;     
//スタートボタンを押せる状態にする
    if(m==8){
  //p10が目的地の位置なのでp10に車が来ている時が成功となる
      myform.mytext.value=" コンビニにたどり着きました。";
    }else{
      myform.mytext.value=" コンビニを発見できませんでした。";
    }
  }
}
//-->
</SCRIPT>

</HEAD>
<BODY onload="check()"> //説明4
<CENTER>
<TABLE border="1" width="500" height="300" bgcolor="#ffffff">
<TBODY>
<TR>
<TD width="100" height="100"><IMG src="migi.gif" width="100" height="100" border="0" name="p1"></TD> //説明2
<TD width="100" height="100"><IMG src="miti.gif" width="100" height="100" border="0" name="p2"></TD> //説明2
<TD width="100" height="100"><IMG src="miti.gif" width="100" height="100" border="0" name="p3"></TD> //説明2
<TD width="100" height="100"><IMG src="miti.gif" width="100" height="100" border="0" name="p4"></TD> //説明2
<TD width="100" height="100"><IMG src="miti.gif" width="100" height="100" border="0" name="p5"></TD> //説明2
</TR>
<TR>
<TD width="100" height="100"><IMG src="miti.gif" width="100" height="100" border="0" name="p12"></TD> //説明2
<TD colspan="3" nowrap align="center" bgcolor="#ffeace">
<INPUT type="button" value="スタート" style="font-size:18px" onclick="hajime()">
<INPUT type="button" value="ストップ" style="font-size:18px" onclick="tomeru()">
</TD>
<TD width="100" height="100"><IMG src="miti.gif" width="100" height="100" border="0" name="p6"></TD>  //説明2
</TR>
<TR>
<TD width="100" height="100"><IMG src="miti.gif" width="100" height="100" border="0" name="p11"></TD>  //説明2
<TD width="100" height="100"><IMG src="conv.gif" width="100" height="100" border="0" name="p10"></TD> //説明2
<TD width="100" height="100"><IMG src="miti.gif" width="100" height="100" border="0" name="p9"></TD>  //説明2
<TD width="100" height="100"><IMG src="miti.gif" width="100" height="100" border="0" name="p8"></TD>  //説明2
<TD width="100" height="100"><IMG src="hidari.gif" width="100" height="100" border="0" name="p7"></TD> //説明2
</TR>
</TBODY>
</TABLE>
</CENTER>
<FORM name="myform">                                                       //説明1
<P align="center">
<INPUT size="64" type="text" readonly name="mytext" style="font-size:18px" value=" しばらくお待ち下さい。"> //説明1
</P>
</FORM>
</BODY>
</HTML>




スクリプト解説


 (説明1)
 まず最初に、テキストボックスにメッセージを表示できるように準備します。
 (テキストボックスにメッセージを表示
 テキストボックスの<FORM>タグには、myformという名前を、<INPUT>タグにmytextという名前をつけます。
 これで、myform.mytext.valueを実行すると、テキストボックスにメッセージを表示することができます。


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


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


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

 ダウンロードが完了すると、b=1となり「スタート」ボタンを押すことができるようになります。


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


 (説明6)
 hasiru()関数は、hajime()関数により呼び出されます。
 hasiru()関数は、車を走らせるためのスクリプトです。この部分は、「占い」スクリプトの応用です。

 hasiru()関数は、タイマーugokuによって100/1000秒後に再びhasiru()関数を呼び出すようになっています。その為、hasiru()関数は何度も繰り返し実行されることになります。
 (タイマーセット・解除
 しかし、実行されるごとに i=i+1 によって、iの値が1づつ増える為、mの値も1づつずれていき(0→1→2→・・・→10→11→0→1の順番)、条件式 if文の処理内容も変化していきます。
 
 100/1000秒ごとに「車の絵は次のマスに表示し、車のいたマスには元の絵を表示する」というように、表示する画像が切り替わっていく為、車が走っているように見えるのです。
 (画像を切り替える


 (説明7)
 「ストップ」というボタンを押すと、onclick属性によりtomeru()関数を呼び出します。
 (マウスによる処理
 tomeru()関数は、clearTimeoutにより車が走るのを止めます。
 (タイマーセット・解除

 また、車がコンビニに止まったかの判定も行います。(条件式 if文
 m=8のとき、車とコンビニの画像が重なった状態となるので、成功時の処理をし、それ以外の場合は、はずれの処理をします。

 「ストップ」ボタンを押したことで、a=0に戻り、再びスタートボタンが押せるようになります。