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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

252閲覧

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

h_proc

総合スコア68

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/12/31 14:24

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

c

1#include<stdio.h> 2#include<stdlib.h> 3 4int hp1 = 7; 5int ap = 0; 6int pro = 0; 7int pow = 0; 8 9double oact(void) { 10 return 0.9 + (double)(rand() / (double)(RAND_MAX + 1.0) * (1.1 - 0.9 + 1.0)); 11} 12int attack(int a) { 13 if (0 < a < 10) { 14 ap = (2 * 1.1) + a; 15 return ap; 16 } 17 else { 18 //NR 19 } 20} 21int attack2(int b) { 22 if (0 < b < 10) { 23 pro = 2 + b; 24 } 25 else { 26 //NR 27 } 28} 29int attack3(int c) { 30 if (0 < c < 10) { 31 pow = c; 32 } 33 else { 34 //NR 35 } 36} 37 38int damage(int a) { 39 40 switch (a) { 41 int damage1 = 0; 42 case 1: 43 damage1 = attack(ap) - ((3 / 6)*oact()); 44 hp1 = hp1 - damage1; 45 pow == pow; 46 printf("敵は%dのダメージを受けた!\n", damage1); 47 break; 48 int damage2 = 0; 49 case 2: 50 damage2 = 2 - ((pro / 6)*oact()); 51 pow = pow - (damage2 / 2); 52 hp1 == hp1; 53 printf("あなたは%dのダメージを受けた!\n", damage2); 54 break; 55 case 3: 56 pow == pow; 57 hp1 == hp1; 58 printf("お互いダメージを受けずに済んだ!"); 59 break; 60 case 4: 61 printf("敵は逃げ出した。\n"); 62 exit(1); 63 break; 64 } 65 66 if (pow = 0) { 67 printf("ゲームオーバーです。\n"); 68 } 69 else if (hp1 = 0) { 70 printf("あなたの勝ちです。\n"); 71 } 72} 73int main(void) { 74 printf("ちからを入力してください。\n"); 75 int ap = 0; 76 scanf("%d", &ap); 77 attack(ap); 78 printf("攻撃力は%dです。\n", attack(ap)); 79 80 81 printf("身の守りを入力してください。\n"); 82 int dp = 0; 83 scanf("%d", &dp); 84 attack2(dp); 85 printf("防御力は%dです。\n", attack2(dp)); 86 87 88 printf("体力を入力してください。\n"); 89 int ep = 0; 90 scanf("%d", &ep); 91 attack3(ep); 92 printf("体力は%dです。\n", attack3(ep)); 93 94 95 printf("あなたのHP:%d敵のHP:%d\n", attack3(ep), hp1); 96return 0; 97}

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

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

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

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

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

cateye

2018/12/31 14:46

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

2018/12/31 14:54

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

回答2

0

ベストアンサー

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

投稿2019/01/01 02:37

episteme

総合スコア16614

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

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

0

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

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

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

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

投稿2018/12/31 14:51

編集2019/01/01 04:34
cateye

総合スコア6851

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問