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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

424閲覧

初期化されていないというエラーが出る

kinako0316

総合スコア1

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2023/05/14 04:48

編集2023/05/14 05:35

実現したいこと

ここに実現したいことを箇条書きで書いてください。
1.モンスター「ゴーレム」のヒットポイント用変数(整数型)を初期値300で、防御用変数(整数型)を初期値80で定義する。
2.攻撃を受けるとモンスターは「攻撃力ー防御力」の数値を減算した値がダメージとなる。
3.ヒットポイント用変数の値を減算し、ヒットポイントを更新する。
4.減算されたヒットポイントを表示する。
5.攻撃手段について、以下の3種類の攻撃方法を用意し、威力は手段と乱数に依存させる。
1.攻撃:攻撃力60+20
2.特技:攻撃力30+50
3.魔法:攻撃力20+90
6.上記3つ以外の番号が入力された場合は、再入力を求める。
7.与えるダメージが0未満の時は、0になるように調整する。
8.各ターン、どの方法攻撃するか選択し、ダメージを表示する。
9.敵のHPが0以下になるまで、戦闘を繰り返す。
10.戦闘が終わったら勝利メッセージとして「ゴーレムを倒した!」と表示する。

前提

プログラミングを始めたばかりで、
画像のように作ってみたのですがあっていますか?
![イメージ説明]
(https://ddjkaamml8q8x.cloudfront.net/questions/2023-05-14/530d0bc5-aa3f-490e-aec6-3ef39bc0be24.png)

発生している問題・エラーメッセージ

エラーメッセージ 初期化されていないローカル変数num4が使用されます。 ### 該当のソースコード ```ここに言語名を入力 ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

srsnsts

2023/05/14 05:36

こんにちわ。 面白いプログラムですよね、ドラクエみたいな? ちょっと考えて回答するので待っててくださいね。
kinako0316

2023/05/14 06:29

ありがとうございます。ご回答をお待ちしております。
srsnsts

2023/05/14 06:34

回答したので見ていただけると嬉しいです。
guest

回答1

0

ベストアンサー

こんばんわ。

num4を計算してからaを求めないといけないんですが、
そうなってないのでnum4が未定義ですよというエラーが発生しています。

何点か問題点があったので指摘しておきますね。

  • 変数の名前がnum1などとなっているので、何に使われている変数なのかが非常にわかりにくい
  • ダメージ値を計算しているのに、ゴーレムのヒットポイントから差し引いていない
  • 1,2,3以外の数値が入力された場合に、再入力を促すメッセージが表示されてない
  • ダメージ値が負の場合が考慮されていない
  • do whileの判定条件が正しくない。num1==0となっているが、正しくはゴーレムのライフが正の値のとき

これぐらいですかね。
以上の課題を改善したコードを載せておきます。
参考にして下さい。

あと、作成されたコードはスクショで貼るのではなく、
テキストでお願いしますね。

一からコードを手打ちしないといけませんので。

それでは。

golem.cpp

1#include <iostream> 2#include <stdlib.h> 3#include <time.h> 4using namespace std; 5 6int main(){ 7 int golem_hit_point_max = 300; // ゴーレムのヒットポイントの最大値 8 int golem_defence_point = 80; // ゴーレムの防御力 9 int golem_hit_point = golem_hit_point_max; // ゴーレムのヒットポイントの現在値 10 int attack_method; // 攻撃手段 11 int attack_point; // 攻撃力 12 int damage_point; // ダメージ値 13 14 srand((unsigned int)time(NULL)); 15 cout << "ゴーレム HP : " << golem_hit_point << " 防御力 : " << golem_defence_point << endl; 16 do { 17 cout << "残りHP : " << golem_hit_point << endl; 18 cout << "攻撃手段を選択して下さい(1.攻撃 2.特技 3.魔法)" << endl; 19 cin >> attack_method; 20 if(attack_method == 1){ 21 attack_point = 60 + rand() % 20; 22 damage_point = attack_point - golem_defence_point; 23 damage_point = damage_point >= 0 ? damage_point : 0; // ダメージ値が負なら0に補正 24 cout << "ダメージは" << damage_point << "です。" << endl; 25 golem_hit_point -= damage_point; 26 }else if(attack_method == 2){ 27 attack_point = 50 + rand() % 30; 28 damage_point = attack_point - golem_defence_point; 29 damage_point = damage_point >= 0 ? damage_point : 0; // ダメージ値が負なら0に補正 30 cout << "ダメージは" << damage_point << "です。" << endl; 31 golem_hit_point -= damage_point; 32 }else if(attack_method == 3){ 33 attack_point = 90 + rand() % 20; 34 damage_point = attack_point - golem_defence_point; 35 damage_point = damage_point >= 0 ? damage_point : 0; // ダメージ値が負なら0に補正 36 cout << "ダメージは" << damage_point << "です。" << endl; 37 golem_hit_point -= damage_point; 38 }else{ 39 cout << "再入力して下さい。" << endl; 40 } 41 42 }while(golem_hit_point > 0); 43 44 cout << "ゴーレムを倒した!" << endl; 45 return 0; 46}

投稿2023/05/14 06:32

srsnsts

総合スコア480

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

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

kinako0316

2023/05/14 06:40

回答いただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問