初心者でJavaScript学習のために作成してます。
分かるところから、自分で書いており、途中のものになります。。
if文が苦手で、アドバイスいただけますと幸いです。
前提:
自分の船(ourHero)
ヒットポイント - 20
攻撃するパワー - 5
攻撃が当たる確率 - 0.7
敵の船
ヒットポイント - 3 〜 6の乱数
攻撃するパワー - 2 〜 4の乱数
攻撃が当たる確率 - 0.6 〜 0.8の乱数
上記の数値のもと、攻撃し、され、
ヒットポイントが残っていれば、戦い続け、
ゼロになったら、再度攻撃するか、敗退するか選択するstartprompt()に戻るように書きたい。
下記2点につまづきました。
1) alert内で配列の値を表示させたい。
-> 以前、別のコードを書いた時は下記で表示されたのですが、今回はうまく表示できていないので、
ご指摘いただけますと幸いです。
alert('敵から攻撃をうけた!' + ${tekiArray[0]accuracy}' + ' ${ourHero.hitPoints}');
- 敵の船の手持ちのヒットポイントが0になったら、ゲームを開始するか否かのstartPrompt()関数へ飛ばしたいと思っています。
なんとなく下記の書き方は間違っていると思うので、アドバイスいただけますと幸いです。
} else if ( tekiArray[0].hitPoints = 0 ){ alert('敵の船の破壊に成功!'); startPrompt();
自分で書き進めたところ↓
class Ship{ constructor(hitPoints, firepower, accuracy){ this.hitPoints = hitPoints; this.firepower = firepower; this.accuracy = accuracy; } } //hitPoints, firepower, accuracy const ourHero = new Ship(20, 5, 0.7); class tekiShip extends Ship{ constructor(hitPoints, firepower, accuracy){ super(hitPoints, firepower, accuracy); } } let tekiArray = [] for(let i =0; i < 6; i++){ tekiArray[i] = new tekiShip (randomizer(3,6), randomizer(2,4),(randomizer(60,80) / 100)); } console.log(tekiArray) function randomizer(min, max){ return (Math.floor(Math.random() * (max - min + 1) + min)); } function game(){ playGame = prompt('Y を入力してゲームを開始する'); playGame = playGame.toUpperCase(); if (playGame === 'Y'){ startPrompt() } else { alert('またね') } function startPrompt(){ let ans; while(true) { ans = getCommand(); if (ans == '') continue; if (ans == 'attack') { doBattle(); } else { alert('Game Over・゚。(´;д;`) 。゚・Game Over'); } break; } } function getCommand() { const cmd = prompt('"attack" or "retreat"を入力してください'); let ret = cmd.toLowerCase(); if (ret != 'attack' && ret != 'retreat') ret = ''; return ret; } function doBattle(){ while (true){ if (Math.random() < tekiArray[0].accuracy) { ourHero.hitPoints -= tekiArray[0].firepower; console.log(ourHero.hitPoints) alert('敵から攻撃を受けた' + ' ${tekiArray[0]accuracy}' + '${ourHero.hitPoints}'); } else if (Math.random() < ourHero.accuracy){ tekiArray[0].hitPoints -= ourHero.firepower; alert("敵に攻撃を仕掛けた"); } else if ( tekiArray[0].hitPoints = 0 ){ alert('敵の船の破壊に成功!'); startPrompt(); break; } } }} game(); startPrompt();
回答2件
あなたの回答
tips
プレビュー