ブログでできる動くプログラムを学ぶべく、既存プログラムを勝手に書き換えてみます。
今回はソースを公開してくださっているこちらを使っていきます。
LSSさんにはいつもお世話になっております。
ぴょんぴょんプログラムをお借りしました。(また無断ですみません)
今回は原本を基に改修を加え、見た目や動きが異なる2つのぴょんぴょんプログラムを作ってみました。
まずは原本および、作成したプログラム2つの動作を見てください。
【原本(LSSさんが作成したもの)】
【プログラム1】
【プログラム2】
3つ全て、微妙に違ったかと思います。
----------
まずは原本となるソースをご覧ください。
基本的なぴょんぴょんプログラムが記述されています。
----------
これを基に今回、私が学習という名目で分解と再構築を行ったプログラムの1つ目がこちら
枠内が変更点の主な部分ですが、まず最初に、以下の置換をしています。
gamen⇒gamen1
j⇒j1
x⇒x1
y⇒y1
mx⇒mx1
jp⇒jp1
この置換を行わないと、同じ記事中に同一変数が複数存在することになり、同じ挙動をしてしまうためです。
続いて、①の部分について、
基本的な見た目を変えるために3箇所に修正を施しました。
1.背景色の修正
background-colorを#cccc00に修正。
#cccc00はおそらくRGBの各256色を16進数で表記したものでしょう。
2.背景の範囲の拡張
widthを20pxだけ拡張して画面にどのように反映されるのか見てみました。
3.ジャンプ!のボタン名の変更
名前を変えてもジャンプ操作に影響がないことを見てみました。
そして、②の部分について、
こちらは処理の部分をいじってみました。
1.左右に動く範囲を修正
左右に動く範囲を修正しました。背景を無視して動くことが出来るのかを確認するため、わざと多めに動くようにしました。
2.ジャンプの修正
ジャンプの滞空時間と上下へ動く範囲を修正しました。
y1=20+(400-(j1-20)*(j1-20)); j1が経過時間の2次関数で表現されています。
こちらも、背景を無視して動くことが出来るのかを確認するため、わざと多めに動くようにしました。
----------
2つ目のプログラムの修正箇所はこちら
①の部分について、
今回は丸と星を独立して動作させるため、変数を独立させました。
②の部分について、
①で変数を独立させたため、それらに対する処理を加えました。
特筆すべきポイントを2つ。
・丸の横方向への移動速度は、星の状態も参照していること。(複数の変数を組み合わせて処理ができることを確認)
・ジャンプすると最終的に丸と星は下の方に落ちていってしまうが、ジャンプの処理が終わると一瞬で基に戻る事。(連続して動作する必要はなく、ただ計算された座標に表示されているだけだということを確認)
③の部分について、
変数を独立させたため、丸の縦方向の座標を固定値から変数に修正しました。
----------
見様見真似でJavaScriptを触ってみましたが、だいぶJavaScrpitでどんなことができるのかがわかった気がします。
まだまだ気になることはありますが(例えば、秒間何回jの値が更新されるのだろうとか)、
今後、私だけのプログラムを公開できるよう頑張ります。
最後に、LSSさんに作成頂いている原本のソースをテキストで残しておきます。
<div id="gamen" style="position: relative; background-color: #eeeeee; width: 300px; height: 180px;"> </div>
<p><a href="#" onclick="if(j==0){j=1;};return false;">ジャンプ!</a></p>
<p>
<script>// <![CDATA[
x=0;
y=20;
mx=2;
j=0;
tm0=setInterval('jp()',50);
function jp(){
x+=mx;
if(x>=70){mx=-1;}
if(x<=0){mx=1;}
if(j>0 && j<20){
y=20+(100-(j-10)*(j-10));
j++;
}else{
y=20;
j=0;
}
gamen.innerHTML='<div style="position:absolute;bottom:10px;left:'+(x*4+2)+'px;color:gray;font-size:25px;">●</div>';
gamen.innerHTML+='<div style="position:absolute;bottom:'+y+'px;left:'+x*4+'px;font-size:20px;" onmouseover="if(j==0){j=1;}">★</div>';
}
// ]]></script>
/</p>