質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1151閲覧

Javascript 攻撃ゲームの作成。関数が実行されない。

hiro_ike

総合スコア48

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/05/02 17:23

編集2021/05/02 18:16

前提・実現したいこと

Javascriptで
敵とヒーローで攻撃し合うゲームを作成中です。
自分で書けるところまで書き進めました。
doBattle関数が実行されません。。
何か抜けておりますでしょうか?
初心者でif文の書き方が苦手です。
アドバイスいただけますと幸いです。

hitPointsがzeroになるとshipは破壊完了として作成していこうと思ってます。

該当のソースコード

javascript

class Ship{ constructor(hitPoints, firepower, kogekiRate){ this.hitPoints = hitPoints; this.firepower = firepower; this.kogekiRate = kogekiRate; } } //hitPoints, firepower, kogekiRate const Hero = new Ship(20, 5, 0.7); class tekiShip extends Ship{ constructor(hitPoints, firepower, kogekiRate){ super(hitPoints, firepower, kogekiRate); } } 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(){ startPrompt = prompt('type "attack" or "retreat"'); startPrompt = startPrompt.toLowerCase(); if ( startPrompt === 'attack'){ doBattle() }else if (startPrompt === 'retreat'){ alert('Game Over・゚。(´;д;`) 。゚・Game Over') } } function doBattle(){ if (Math.random() < tekiArray[0].kogekiRate) { Hero.hitPoints -= tekiArray[0].firepower; alert("攻撃された"); } else if (Math.random() < Hero.kogekiRate){ tekiArray[0].hitPoints -= Hero.firepower; alert("攻撃した"); } else if (Math.random() < tekiArray[0].hitPoints){ tekiArray.hitPoints -= tekiArray.firepower; //作成途中 } } } game(); startPrompt();

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/05/02 21:58

>doBattle関数が実行されません。。 何をもってそう判断されているのでしょうか。 デバッグしているかしてないかでも全然違います。
kei344

2021/05/03 05:38

まだ質問が「受付中」になっていますが、「ベストアンサー」を選び「解決済」にされてはいかがでしょうか。
guest

回答1

0

ベストアンサー

細かいところまで見ていませんが、まず最初に以下の箇所で構文エラーが出ているので修正します。

javascript

1class Ship{ 2 constructor(, firepower, kogekiRate){ 34class Ship{ 5 constructor(hitPoints, firepower, kogekiRate){

doBattle()自体は実行されているようですが配列tekiがどこにも定義されていないため最初のif文で止まってしまっているようです。変数の定義を確認してみてください。

javascript

1function doBattle(){ 2 if (Math.random() < teki[0].kogekiRate) {

GoogleChromeやFireFox、Edgeなどの最近のWebブラウザにはデバッグ用の開発者ツールが最初から搭載されています。ここのConsoleにエラーメッセージなどが表示されますので、動かないと思ったらここを参照されるのがよろしいかと思います(逆にこれを使わないとある程度の規模の開発は非常に難しいですね)

投稿2021/05/02 17:35

編集2021/05/02 17:36
katsubemakito

総合スコア72

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro_ike

2021/05/02 18:15

ありがとうございます。 一つ目はコピペした際に漏れたようで、 二つ目は、tekiArrayのスペルミスでした。。 ここを直したら、なんとかdoBattleのalertが表示されました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問