質問編集履歴
1
コードの書き直し。質問内容を少し変更しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,85 +1,102 @@
|
|
1
|
-
数字当てゲームを作っています。コンピューターに0~9のランダムな数を一つ表示させ、利用者には数を予測してもらい、キーボードから入力してもらいます。キーボードからの入力値とコンピューターから表示される数字の差により、利用者にポイントを与えたり、引いたりして、持ち点が1000点または0点になったら終了させます。このようなプログラムを書きました。しかし、
|
1
|
+
数字当てゲームを作っています。コンピューターに0~9のランダムな数を一つ表示させ、利用者には数を予測してもらい、キーボードから入力してもらいます。キーボードからの入力値とコンピューターから表示される数字の差により、利用者にポイントを与えたり、引いたりして、持ち点が1000点または0点になったら終了させます。このようなプログラムを書きました。しかし、いつまでたっても持ち点が50点のままです。一体どこが間違っているのでしょうか。教えていただけると嬉しいです。よろしくお願いいたします。
|
2
2
|
```c
|
3
3
|
#include <stdio.h>
|
4
4
|
#include<stdlib.h>
|
5
5
|
|
6
|
-
int
|
6
|
+
int rand_n(void);//これは乱数を表示する関数
|
7
7
|
|
8
|
-
int rand_n(void)
|
8
|
+
int rand_n(void) {
|
9
9
|
|
10
|
+
int m = 0;
|
10
|
-
int
|
11
|
+
m = 0 + (int)(rand()*(9 - 0 + 1.0) / (1.0 + RAND_MAX));
|
12
|
+
|
13
|
+
return m;
|
11
14
|
|
12
|
-
int rand_n(void) {
|
13
|
-
|
14
|
-
return 0 + (int)(rand()*(9 - 0 + 1.0) / (1.0 + RAND_MAX));
|
15
|
-
|
16
|
-
|
17
15
|
}
|
16
|
+
int guess(int n , int m);//入力された数字とコンピュータが出した数字の差を計算してくれる関数
|
17
|
+
|
18
|
-
int
|
18
|
+
int guess(int n, int m) {
|
19
|
+
int s = 0;
|
19
20
|
|
20
|
-
int f = 50;
|
21
|
-
|
22
|
-
if (
|
21
|
+
if (n > m) {
|
23
|
-
|
22
|
+
s = n - m;
|
24
|
-
|
23
|
+
|
25
24
|
}
|
26
|
-
|
27
25
|
else {
|
28
|
-
|
26
|
+
s = m - n;
|
27
|
+
|
28
|
+
}
|
29
|
-
|
29
|
+
return s;
|
30
|
+
}
|
30
|
-
|
31
|
+
int hold(int s, int f);
|
31
32
|
|
32
|
-
|
33
|
+
int hold(int s,int f) {//持ち点を計算してくれる関数
|
33
|
-
|
34
|
+
|
34
|
-
for (int i = 0; f == 100; i++) {
|
35
35
|
|
36
|
-
if (g - rand_n() == 1 || rand_n() - g == 1) {
|
37
|
-
f=f + 300;
|
38
|
-
}
|
39
|
-
|
36
|
+
//for (int i = 0; f < 1000; i++) {
|
37
|
+
|
40
|
-
|
38
|
+
if (s == 0) {
|
41
|
-
}
|
42
|
-
else if (g - rand_n() == 3 || rand_n() - g == 3) {
|
43
|
-
f=f + 150;
|
44
|
-
}
|
45
|
-
else if (g - rand_n() == 4 || rand_n() - g == 4) {
|
46
|
-
f=f + 100;
|
47
|
-
}
|
48
|
-
else if (g - rand_n() == 5 || rand_n() - g == 5) {
|
49
|
-
f=f + 50;
|
50
|
-
}
|
51
|
-
else if (g - rand_n() == 6 || rand_n() - g == 6) {
|
52
|
-
f=f - 10;
|
53
|
-
}
|
54
|
-
else if (g - rand_n() == 7 || rand_n() - g == 7) {
|
55
|
-
f=f - 20;
|
56
|
-
}
|
57
|
-
else if (g - rand_n() == 8 || rand_n() - g == 8) {
|
58
|
-
f=f - 30;
|
59
|
-
}
|
60
|
-
else if (g - rand_n() == 9 || rand_n() - g == 9) {
|
61
|
-
f=f - 50;
|
62
|
-
}
|
63
|
-
else if (g - rand_n() == 0 || rand_n() - g == 0) {
|
64
|
-
|
39
|
+
f = f + 400;
|
65
|
-
}
|
66
|
-
printf("%dst stage: Yor point is %d", i, f);
|
67
40
|
}
|
68
|
-
|
41
|
+
else if (s == 1) {
|
42
|
+
f = f + 300;
|
69
|
-
|
43
|
+
}
|
44
|
+
else if (s == 2) {
|
45
|
+
f = f + 250;
|
46
|
+
}
|
47
|
+
else if (s == 3) {
|
48
|
+
f = f + 150;
|
49
|
+
}
|
50
|
+
else if (s == 4) {
|
51
|
+
f = f + 100;
|
52
|
+
}
|
53
|
+
else if (s == 5) {
|
54
|
+
f = f + 50;
|
55
|
+
}
|
56
|
+
else if (s == 6) {
|
57
|
+
f = f - 10;
|
58
|
+
}
|
59
|
+
else if (s == 7) {
|
60
|
+
f = f - 20;
|
61
|
+
}
|
62
|
+
else if (s == 8) {
|
63
|
+
f = f - 30;
|
64
|
+
}
|
65
|
+
else if (s == 9) {
|
66
|
+
f = f - 50;
|
67
|
+
}
|
68
|
+
|
69
|
+
//printf("%d回目終了!あなたの持ち点は%d点です。\n", i+1, f);
|
70
|
+
//}
|
70
71
|
return f;
|
71
72
|
}
|
72
73
|
|
74
|
+
|
73
75
|
int main(void) {
|
74
76
|
printf("GESS NUMBER\n");
|
75
77
|
|
76
|
-
printf("0~9の数字がランダムに表示されるので、どの数字が表示されるか予測してください。\n");
|
77
|
-
|
78
|
-
|
79
78
|
printf("You have 50 points\n");
|
80
79
|
|
80
|
+
//キーボードからの入力を受け付ける
|
81
|
+
int f = 50;
|
82
|
+
for (int i = 0; f < 1000; i++) {
|
81
|
-
|
83
|
+
int n = 0;
|
84
|
+
printf("予測した数字(0~9)を入力してください。\n");
|
82
85
|
|
86
|
+
scanf("%d", &n);
|
87
|
+
|
88
|
+
rand_n();//コンピューターがえらんだ数字を表示する
|
89
|
+
|
90
|
+
printf("コンピューターが選んだ数字は%d\n", rand_n());
|
91
|
+
|
92
|
+
int t = 0;
|
93
|
+
|
94
|
+
t = guess(n, rand_n());//入力値との差を計算する
|
95
|
+
|
96
|
+
hold(t,f);//持ち点の計算をする。
|
97
|
+
|
98
|
+
printf("%d回目終了!あなたの持ち点は%d点です。\n", i + 1, f);
|
99
|
+
}
|
83
100
|
printf("Yor point is 1000!\n");
|
84
101
|
|
85
102
|
printf("Quit this game\n");
|