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

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

ただいまの
回答率

87.59%

別の関数で作った変数の値を再び利用したい

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 853

score 65

プレイヤーが入力した値から攻撃力、防御力、体力を計算し、コンピューター上の敵と戦うゲームを作っています。この時、ダメージを計算する関数としてdamageを作ったのですが、この関数の中で、attack関数で求めたattack(ap)の値を使用したいです(39行目)。別の関数で定義した変数をまた別の関数で使うにはどのようにしたらよいのでしょうか。よろしくお願いい致します。

#include<stdio.h>
#include<stdlib.h>

int hp1 = 7;
int ap = 0;
int pro = 0;
int pow = 0;

double oact(void) {
    return 0.9 + (double)(rand() / (double)(RAND_MAX + 1.0) * (1.1 - 0.9 + 1.0));
}
int attack(int a) {
    if (0 < a < 10) {
        ap = (2 * 1.1) + a;
        return ap;
    }
    else {
        //NR
    }
}
int attack2(int b) {
    if (0 < b < 10) {
        pro = 2 + b;
    }
    else {
        //NR
    }
}
int attack3(int c) {
    if (0 < c < 10) {
        pow = c;
    }
    else {
        //NR
    }
}

int damage(int a) {

        switch (a) {
            int damage1 = 0;
        case 1:
            damage1 = attack(ap) - ((3 / 6)*oact());
            hp1 = hp1 - damage1;
            pow == pow;
            printf("敵は%dのダメージを受けた!\n", damage1);
            break;
            int damage2 = 0;
        case 2:
            damage2 = 2 - ((pro / 6)*oact());
            pow = pow - (damage2 / 2);
            hp1 == hp1;
            printf("あなたは%dのダメージを受けた!\n", damage2);
            break;
        case 3:
            pow == pow;
            hp1 == hp1;
            printf("お互いダメージを受けずに済んだ!");
            break;
        case 4:
            printf("敵は逃げ出した。\n");
            exit(1);
            break;
        }

    if (pow = 0) {
        printf("ゲームオーバーです。\n");
    }
    else if (hp1 = 0) {
        printf("あなたの勝ちです。\n");
    }
}
int main(void) {
    printf("ちからを入力してください。\n");
    int ap = 0;
    scanf("%d", &ap);
    attack(ap);
    printf("攻撃力は%dです。\n", attack(ap));


    printf("身の守りを入力してください。\n");
    int dp = 0;
    scanf("%d", &dp);
    attack2(dp);
    printf("防御力は%dです。\n", attack2(dp));


    printf("体力を入力してください。\n");
    int ep = 0;
    scanf("%d", &ep);
    attack3(ep);
    printf("体力は%dです。\n", attack3(ep));


    printf("あなたのHP:%d敵のHP:%d\n", attack3(ep), hp1);
return 0;
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • cateye

    2018/12/31 23:46

    ap = (2 * 1.1) + a; int に代入している時点で、少数以下は切り捨てられますがいいのですか?

    キャンセル

  • h_proc

    2018/12/31 23:54

    はい、問題ありません。すみません。

    キャンセル

回答 2

checkベストアンサー

0

ダメージ値の算出に必要な情報をすべて引数で渡せばいいじゃない。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

関数で定義した変数をまた別の関数で使う

関数の復帰値で帰すか、関数の外に放り出してstaticにするかですかね。

apという名前がグローバルにもローカルにもありますがどうなんでしょう?
混同しないですか?

「追記」
通常は、そのキャラクタ(雑魚キャラは別か?)個別にHP、MP、レベルなどを持った構造体のポインタを渡すのでは?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 87.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る