人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

JavaScriptの勉強を始め、どうしても分からない事があるので、質問させて下さい。

課題のHTMLです。
http://kent-ymmt.xsrv.jp/sample.txt

【課題1】敵を5体にする
【課題2】乱数を用いて敵もたまに攻撃するようにする
変数はなんとなく分かるのですが、所詮なんとなくなので、うまく動きません...
途中で挫折気味ですが、どうしても完成させたいのでよろしくお願いします。ちなみにIEでしか動作出来ないようです。

●質問者: elk-elg
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:HTML IE JavaScript 乱数 勉強
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● so-asano
●40ポイント

課題ってことなんで、間違ってる点を軽く指摘していく感じで。


# var tekiX = new Array(4);


オブジェクトのスコープ、ってことを考えよう。function 内だと、寿命がその中だけになってしまう。


# tekiX = tekiX + tekiDx;


配列を使っているんだから、この記述はおかしいよね。あと、TekiY も配列にしなくていいのかな?


# for(i=0;i>4;i++){


これだと、いきなりループを抜けてしまうよね? 0?4 まで、5回ループを回したいなら、for(i=0; i<5; i++) って書かないと。for 文について、理解を深めよう。

あと、ビームに関連する変数も、敵側のものを設けて、それの処理もしないといけないよね。


コードが書き進んだら、また回答しようかと。とりあえず、ってことで。


url が必要な気もしないので。http://xxx.xxx

◎質問者からの返答

ありがとうございます。自分の実力では早かったようです。精進します。


2 ● hidering
●40ポイント ベストアンサー

http://kent-ymmt.xsrv.jp/sample.txt

↑ダミーです。

こんにちは。面白そうなのでちょっとひまつぶしに書いてみました。

課題が2つ挙げられていますが、敵が攻撃してくることでやらなければならないことが沢山でてきますね。

私はJavaScriptに詳しくないのでソースが汚いかもしれませんが、参考にしてください。


// GameOverかどうか

gameoverFlag = false;

// 自機のX座標の最初の値

fighterX = 0;

// 自機を移動させる

function moveFighter()

{

if(gameoverFlag == true)return;

if(event.keyCode == 74)fighterX = fighterX -2; //J key

if(event.keyCode == 76)fighterX = fighterX +2; //L key

if(event.keyCode == 75)startBeam(); //K key

document.Fighter.style.left = fighterX;

}

// 敵を動かす

var tekiX = new Array(4);

var tekiY = new Array(4);

tekiDx = 2;// 移動する値

function moveEnemy()

{

if(gameoverFlag == true)return;


for(i=0;i<=4;i++){

tekiX[i] = parseInt(document.images["Teki"+i].style.left);

tekiY[i] = parseInt(document.images["Teki"+i].style.top);

}

for(i=0;i<=4;i++){

tekiX[i]=tekiX[i]+tekiDx;

if(tekiX[i]>300){

tekiDx= -2;

for(j=0;j<=4;j++){tekiY[j]=tekiY[j]+10;}

}else if(tekiX[i]<0){

tekiDx=2;

for(j=0;j<=4;j++){tekiY[j]=tekiY[j]+10;}

}

}


for(i=0;i<=4;i++){

document.images["Teki"+i].style.left = tekiX[i];

document.images["Teki"+i].style.top = tekiY[i];

}

var boflg = false;

var clear = 0;

for(i=0;i<=4;i++){

if(tekiY[i] > 150)

{

if(document.images["Teki"+i].style.visibility!="hidden"){boflg = true;}

if(boflg == true){

alert("敵に侵略された!ゲームオーバー");

gameoverFlag = true;

return;

}

}else{if(document.images["Teki"+i].style.visibility=="hidden"){clear++;}}

}

if(clear==5){

alert("ゲームクリア!!");

gameoverFlag = true;

return;

}

if(Math.random()<0.20){

startTekibeam();

}

moveBeam();

moveTekibeam();

setTimeout("moveEnemy()",50);

}

// ビームを発射する

beamFlag = false;

beamX = 0;

beamY = 0;

function startBeam()

{

if(beamFlag == true)return;

beamFlag = true;

beamY = 120;

beamX = fighterX + 12;

}

// ビームを移動する

function moveBeam()

{

if(beamFlag == false)return;

beamY = beamY -5;

document.Beam.style.left = beamX;

document.Beam.style.top = beamY;

if(beamY < -40)beamFlag = false;

hitCheck();

}

// 接触判定

function hitCheck()

{

for(i=0;i<=4;i++){

if((beamX + 8) < tekiX[i]) continue;

if((tekiX[i] + 32) < beamX) continue;

if((beamY + 32) < tekiY[i]) continue;

if((tekiY[i] + 32) < beamY) continue;

document.images["Teki"+i].style.visibility="hidden";

}

}

// 敵ビームを発射するl

beamEnemyFlag = false;

var beamEnemyX = 0;

var beamEnemyY = 0;

function startTekibeam()

{

if(beamEnemyFlag == true)return;

beamEnemyFlag = true;

a=0;

a=Math.floor( Math.random() * 10 /2 );

if(document.images["Teki"+a].style.visibility!="hidden"){

beamEnemyX = tekiX[a];

beamEnemyY = tekiY[a];

}

}

// 敵ビームを移動する

function moveTekibeam()

{

if(beamEnemyFlag == false)return;

beamEnemyY = beamEnemyY + 5;

document.Beam.style.left = beamEnemyX;

document.Beam.style.top = beamEnemyY;

if(beamEnemyY > 172)beamEnemyFlag = false;

tekihitCheck()

}

// 敵ビーム接触判定

function tekihitCheck()

{

if((beamEnemyX + 8) < fighterX) return;

if((fighterX + 32) < beamEnemyX) return;

if((beamEnemyY + 32) < 150) return;

if(182 < beamEnemyY) return;

alert("敵にやられた。ゲームオーバー!!");

gameoverFlag = true;

return;

}


body内のimgは以下のようにします。

img src="teki.jpg" name="Teki0" style="position:absolute;left:0px;top:0px;"

img src="teki.jpg" name="Teki1" style="position:absolute;left:0px;top:0px;"

img src="teki.jpg" name="Teki2" style="position:absolute;left:0px;top:0px;"

img src="teki.jpg" name="Teki3" style="position:absolute;left:0px;top:0px;"

img src="teki.jpg" name="Teki4" style="position:absolute;left:0px;top:0px;"

◎質問者からの返答

ありがとうございます!作動しています。が、敵が一体しか表示されていません。余力がありましたら、修正してもらえませんでしょうか?よろしくお願いします。


3 ● hidering
●20ポイント

http://kent-ymmt.xsrv.jp/sample.txt

↑ダミーです。

body内のimgが違ってました。ここで敵の位置が初期化されてます。

img src="teki.jpg" name="Teki0" style="position:absolute;left:0px;top:0px;"

img src="teki.jpg" name="Teki1" style="position:absolute;left:40px;top:0px;"

img src="teki.jpg" name="Teki2" style="position:absolute;left:80px;top:0px;"

img src="teki.jpg" name="Teki3" style="position:absolute;left:120px;top:0px;"

img src="teki.jpg" name="Teki4" style="position:absolute;left:160px;top:0px;"

◎質問者からの返答

ありがとうございます。作動しました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ