Java Scriptの解説

7.ゲームの作り方(その1)

ホームページを飾るアニメは,GIFアニメーションが多いと思いますが,Java Scriptでもできます。
GIFアニメは作った事がないので,どちらがいい方法か分かりませんが,Javaのゲームを作るとき必要になることもあります。

1.記号のアニメ

見栄えはしないでしょうが,アニメの原理を理解するための例として出します。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
<HTML>
<HEAD>
<TITLE>Java Script 例1</TITLE>
<SCRIPT LANGUAGE=”JavaScript”>
<!−−
function MakeArray(n){this.Length=n;}
var msg=new MakeArray(5);
msg[1]="        @   "+"\n"
   +"         MM="+"\n"
   +"        < < ";
msg[2]="      @     "+"\n"
   +"       MM=  "+"\n"
   +"      / /   ";
msg[3]="    @       "+"\n"
   +"     MM=    "+"\n"
   +"    < <     ";
msg[4]="  @         "+"\n"
   +"   MM=      "+"\n"
   +"  / /       ";
msg[5]="@           "+"\n"
   +" MM=        "+"\n"
   +"< <         ";
var s,i,str;
i=1;
function disp(){
setTimeout(”disp()”,300);
if (i>5) {i=1;}
else {str=msg[i];
document.MyForm.TEST.value=str;
i=i+1;}
}
//−−>
</SCRIPT>
</HEAD>
<BODY>
<FORM NAME="MyForm"> <TEXTAREA NAME="TEST" ROWS="3" COLS="25"> </TEXTAREA></FROM>
<SCRIPT LANGUAGE=”JavaScript”>
<!−−
disp();
//−−>
</SCRIPT>
</BODY>
</HTML>
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

例1表示 ここをクリックして下さい。例が表示されます。

<解説>
これは,「5.ホームページの飾り」の例題4を改変したものです。
1)function disp(){
1.setTimeout(”disp()”,300);0.3秒ごとにdisp()を呼び出します。これで動く速さが決まります。
2.if (i>5) {i=1;} msgが1から5までありますので,iが5を越えたら1からやり直す事を意味します。
3.else {str=msg[i];
document.MyForm.TEST.value=str;
i=i+1;}
iが1から5の間は,msg[1]からmsg[5]まで順に表示します。
2)msg文の絵
馬か犬が走っている姿のつもりです。
msg[]は,3行の文字列です。そして少しづつ左に移動して,脚の部分が交互にのびたり,曲がったりします。
このように,絵の場所,動作を少しづつ変えて動かせばアニメになります。

2.絵によるアニメ

アニメは絵でなければ,意味がありません。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
<HTML>
<HEAD>
<TITLE>Java Script 例2</TITLE>
<SCRIPT LANGUAGE=”JavaScript”>
<!−−
img=new Array(2);
img[0]=new Image(100,100);img[1]=new Image(100,100);
img[0].src="../game1/buta.gif";img[1].src="../game1/buta1.gif";
var i=0;
function disp(){
document.write("<IMG SRC='../game1/buta.gif' BORDER=0 WIDTH=100 HEIGHT=100>");
document.write("<BR>");
anim();
}
function anim(){
setTimeout("anim()",300);
if (i>1) {i=0;
document.images[0].src=img[0].src;}
if (i==1){document.images[0].src=img[1].src;}
i=i+1;
}
//−−>
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT LANGUAGE=”JavaScript”>
<!−−
disp();
//−−>
</SCRIPT>
</BODY>
</HTML>
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

例2表示 ここをクリックして下さい。例が表示されます。

<解説>
1)画像の設定
img=new Array(2); imgの配列宣言
img[0]=new Image(100,100);img[1]=new Image(100,100); 100×100の絵です。
img[0].src="../game1/buta.gif";img[1].src="../game1/buta1.gif";それぞれの画像の読み込み。
2)function disp(){初期画像の表示
document.write("<IMG SRC='../game1/buta.gif' BORDER=0 WIDTH=100 HEIGHT=100>");
document.write("<BR>");
buta.gifの画像を表示します。
anim(); 初期画像表示してからanim()関数の呼び出し,実行します。
3)function anim(){アニメの表示
setTimeout("anim()",300);0.3秒ごとにanim()を呼び出す。
if (i>1) {i=0; 画像は2つですからiが0,1で変化するようにします。1を越えれば0として,0,1を繰り返します。
document.images[0].src=img[0].src;} iが0の時の画像表示
if (i==1){document.images[0].src=img[1].src;} iが1の時の画像表示
i=i+1; iに1加えることによりループを繰り返しますので,2つ画像が交互に表示されます。
4)画像が3枚の場合。
if (i>2){i=0;document.images[0].src=img[0].src;}
if (i==1){document.images[0].src=img[1].src;}
if (i==2){document.images[0].src=img[2].src;}
i=i+1;
という風になります。枚数が多いほど複雑な動きをすることになります。
5)注意
document.images[0].srcは時計の所でも説明しましたが,ページの初めての画像(第0番目)を意味します.
ですから,この前には,画像を置かないようにして下さい。前に1個画像があれば,
document.images[1].srcとなります。

3.絵の移動

前の例は,ひとつの場所で表示するだけでした。今度は,絵を移動させてみましょう。
要点だけで,不必要な部分は省略します。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Java Script 例3
1.<HEAD>の間のJava Script
img1=new Image(48,48);img2=new Image(48,48);
img1.src="../game2/peke1.gif";img2.src="../game2/peke2.gif";
var x;
var i=0;
function disp(){
for (x=0; x<8; x++){
document.write(”<IMG SRC='../game2/peke1.gif' BORDER=0 WIDTH=48 HEIGHT=48>”);
}
document.write(”<BR>”);
anim();
}
function anim(){
setTimeout("anim()",300);
document.images[i].src=img1.src;
document.images[i+1].src=img2.src;
i=i+1;
if (i>=7) {i=0;
document.images[7].src=img1.src;
document.images[0].src=img2.src;}
}
2.<BODY>の間のJava Script
disp();
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

例3表示 ここをクリックして下さい。例が表示されます。

<解説>
1)function disp(){
for (x=0; x<8; x++){
document.write(”<IMG SRC='../game2/peke1.gif' BORDER=0 WIDTH=48 HEIGHT=48>”);}
48×48の画像(peke1.gif)を0番から7番までの8個並べます。images[0]からimages[7]までになります。
2)function anim(){
document.images[i].src=img1.src;
document.images[i+1].src=img2.src;
iが0から6までの間,実行されますので,次のようになります。
images[0]=img1,images[1]=img2
images[1]=img1,images[2]=img2
images[2]=img1,images[3]=img2
images[3]=img1,images[4]=img2
..........................
という風に絵が左に移動していきます。この例では,一番最初の1回目はimages[0]=img2になることはありません。2回目以降は次の 条件文(if (i>=7))がありますので,images[0]=img2となります。

3)if (i>=7) {i=0;
document.images[7].src=img1.src;
document.images[0].src=img2.src;}
images[6]=img1,images[7]=img2と画像が最後までくれば初めからやり直しです。
images[7]=img1,images[0]=img2とするためi>=7で条件式を付けます。
images[7]=img2となることになるのですが,実際は,最後にimg2の画像が表示されたように見えません。 一度表示しても,すぐに次の条件式が働きimages[7]=img1となるからです。

4.移動して,動作する

2と3の合成です。絵をうまくつくれば「犬が走ってきて,止まって何かする」というアニメができます。
絵を作るのが面倒なので,ゲームで使った画像を再利用させてもらいます。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Java Script 例4
1.<HEAD>の間のJava Script
img0=new Image(48,48);img1=new Image(48,48);img2=new Image(48,48); img0.src="../game2/back1.gif";img1.src="../game2/peke1.gif";img2.src="../game2/peke2.gif"; var x; var i=0; var k=0; function disp(){
for (x=0; x<8; x++){
document.write(”<IMG SRC='../game2/back1.gif' BORDER=0 WIDTH=48 HEIGHT=48>”);
}
document.write(”<BR>”);
anim();
}
function anim(){
setTimeout("anim()",300);
if (i<7){
document.images[i].src=img0.src;
document.images[i+1].src=img1.src;}
i=i+1;
if (i>=7) {
if (k>2) {k=0;document.images[7].src=img1.src;}
if (k==1){document.images[7].src=img2.src;}
k=k+1;
if (i>16) {i=0;
document.images[7].src=img0.src;
document.images[0].src=img1.src;}
}
}
2.<BODY>の間のJava Script
disp();
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

例4表示 ここをクリックして下さい。例が表示されます。

<解説>
1)画像の移動
if (i<7){
document.images[i].src=img0.src;
document.images[i+1].src=img1.src;}
i=i+1;
images[7]=img1になるまで,即ちiが7未満のときこの表示がされます。絵が,前の例のようにimages[7]まで移動します。
2)最後の場所で表示
if (i>=7) { iが7以上,最後の場所に来たら
if (k>2) {k=0;document.images[7].src=img1.src;}
if (k==1){document.images[7].src=img2.src;}
k=k+1;
最後の場所images[7]で交互にimg1とimg2を表示する。
3)初めからやり直し
if (i>16) {i=0; iが16を越えたらまた初めからやり直します。
document.images[7].src=img0.src;
document.images[0].src=img1.src;}
images[7]を背景の画像にして,images[0]から表示する。

4)走っているようなアニメにするには。
1)の画像の移動を変えます。背景と画像2種類(脚が伸びたり,曲がったり)準備して次のようにする必要があります。
if (i<7){
document.images[i].src=img0.src;背景の画像にする
if ((i%2)==1){document.images[i+1].src=img1.src;}偶数番目の場所にimg1画像
if ((i%2)==0){document.images[i+1].src=img2.src;}奇数番目の場所にimg2画像

何枚かの画像を条件に応じて表示する場合if(i==0)とする方法,規則正しい順序で表示する場合は
if((i%3)==2)とする方法があります。
例は絵を作るのが面倒なので2種類の画像交互に表示して移動します。

例5表示 ここをクリックして下さい。例が表示されます。



トップページ

趣味のトップページ

娯楽室の各部屋
Scriptの解説へ戻る

Scriptのゲーム Aplletの解説 Appletのゲーム Linuxの部屋 物置部屋