課題のHTMLです。
http://kent-ymmt.xsrv.jp/sample.txt
【課題1】敵を5体にする
【課題2】乱数を用いて敵もたまに攻撃するようにする
変数はなんとなく分かるのですが、所詮なんとなくなので、うまく動きません...
途中で挫折気味ですが、どうしても完成させたいのでよろしくお願いします。ちなみにIEでしか動作出来ないようです。
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;"
課題ってことなんで、間違ってる点を軽く指摘していく感じで。
# 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
ありがとうございます。自分の実力では早かったようです。精進します。
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;"
ありがとうございます!作動しています。が、敵が一体しか表示されていません。余力がありましたら、修正してもらえませんでしょうか?よろしくお願いします。
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;"
ありがとうございます。作動しました。
ありがとうございます!作動しています。が、敵が一体しか表示されていません。余力がありましたら、修正してもらえませんでしょうか?よろしくお願いします。