回答編集履歴

5

修正

2017/10/22 13:12

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -102,7 +102,7 @@
102
102
 
103
103
 
104
104
 
105
- Card cards[] = {
105
+ static Card cards[] = {
106
106
 
107
107
  {10, "無の剣", "相手に無属性威力4の攻撃。"},
108
108
 

4

追記

2017/10/22 13:12

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -35,3 +35,155 @@
35
35
 
36
36
 
37
37
  ループに突入する前に適切に構造体変数を初期化する必要があるでしょう。
38
+
39
+
40
+
41
+ ---
42
+
43
+ 私ならカード周りをこういう風に実装するかな、とちょっと書いてみました。
44
+
45
+
46
+
47
+ **card.h**
48
+
49
+ ```C
50
+
51
+ #ifndef INCLUDED_CARD
52
+
53
+ #define INCLUDED_CARD
54
+
55
+
56
+
57
+ typedef struct {
58
+
59
+ int id_;
60
+
61
+ char name_[10];
62
+
63
+ char caption_[128];
64
+
65
+ } Card;
66
+
67
+
68
+
69
+ int get_type_num_of_cards(void);
70
+
71
+ Card *get_random_card(Card *);
72
+
73
+
74
+
75
+ int get_card_id(const Card *);
76
+
77
+ const char *get_card_name(const Card *);
78
+
79
+ const char *get_card_caption(const Card *);
80
+
81
+
82
+
83
+ int print_card_info(const Card *);
84
+
85
+
86
+
87
+ #endif
88
+
89
+ ```
90
+
91
+
92
+
93
+ **card.c**
94
+
95
+ ```C
96
+
97
+ #include "card.h"
98
+
99
+ #include <stdio.h>
100
+
101
+ #include <stdlib.h>
102
+
103
+
104
+
105
+ Card cards[] = {
106
+
107
+ {10, "無の剣", "相手に無属性威力4の攻撃。"},
108
+
109
+ {11, "緑の剣", "相手に木属性威力4の攻撃。"},
110
+
111
+ {12, "赤の剣", "相手に火属性威力4の攻撃。"},
112
+
113
+ {13, "青の剣", "相手に水属性威力4の攻撃。"},
114
+
115
+ {20, "無の盾", "全属性の攻撃を半減させる。"},
116
+
117
+ {21, "緑の盾", "水属性の攻撃を無効化、木属性の攻撃を半減させる。"},
118
+
119
+ {22, "赤の盾", "木属性の攻撃を無効化、火属性の攻撃を半減させる。"},
120
+
121
+ {23, "青の盾", "火属性の攻撃を無効化、水属性の攻撃を半減させる。"}
122
+
123
+ };
124
+
125
+
126
+
127
+ int get_type_num_of_cards(void) {
128
+
129
+ return sizeof(cards) / sizeof(cards[0]);
130
+
131
+ }
132
+
133
+ Card *get_random_card(Card *card) {
134
+
135
+ *card = cards[
136
+
137
+ rand() % get_type_num_of_cards()
138
+
139
+ ];
140
+
141
+ return card;
142
+
143
+ }
144
+
145
+
146
+
147
+ int get_card_id(const Card *card) {
148
+
149
+ return card->id_;
150
+
151
+ }
152
+
153
+ const char *get_card_name(const Card *card) {
154
+
155
+ return card->name_;
156
+
157
+ }
158
+
159
+ const char *get_card_caption(const Card *card) {
160
+
161
+ return card->caption_;
162
+
163
+ }
164
+
165
+
166
+
167
+ int print_card_info(const Card *card) {
168
+
169
+ return printf(
170
+
171
+ "id: %d, %s\n%s\n",
172
+
173
+ get_card_id(card),
174
+
175
+ get_card_name(card),
176
+
177
+ get_card_caption(card)
178
+
179
+ );
180
+
181
+ }
182
+
183
+ ```
184
+
185
+
186
+
187
+ 割と手抜きです。実際には外部ファイルにカードの情報を置いた方がよいでしょう。
188
+
189
+ あんまり参考にならないかもしれませんが、こういう書き方もあるよ、と言うことで。

3

追記

2017/10/22 13:10

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -24,14 +24,14 @@
24
24
 
25
25
 
26
26
 
27
- `std->cards`の値が初期化されていません
27
+ `std->cards`の値が初期化される前に参照されていま
28
28
 
29
29
 
30
30
 
31
- ですので、if文内部が実行される保証ありません。
31
+ ですので、if文内部が実行される保証ありません。
32
32
 
33
- また、終了条件を満たす保証もありません。
33
+ また、ループ内が実行されなければ、終了条件を満たす保証もありません。
34
34
 
35
35
 
36
36
 
37
- ループに突入する前に適切に初期化する必要があるでしょう。
37
+ ループに突入する前に適切に構造体変数を初期化する必要があるでしょう。

2

大丈夫だった

2017/10/22 06:08

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,11 +1,3 @@
1
- 勘違いしていたため、いったん取り下げます。
2
-
3
-
4
-
5
- ちょっと無視してください
6
-
7
- ---
8
-
9
1
  Initia関数内のこの部分が非常に怪しいです。
10
2
 
11
3
  > ```C
@@ -32,18 +24,14 @@
32
24
 
33
25
 
34
26
 
35
- 終了条件`std->have[f] < 10`ですが、これは内部のif文が実行されないと書き換えられません。
36
-
37
- if文に関しましても、`std->cards[n - 1][m]`の値がループ内で書き換えられていません。
27
+ `std->cards`の値が初期化されていません。
38
28
 
39
29
 
40
30
 
41
- ループ突入前に次どちらかの条件を満たしていないと絶対に脱出ません。
31
+ ですので、if文内部が実行される保証がありません。
42
32
 
43
- - !(std->have[f] < 10)
33
+ また、終了条件を満たす保証もありません。
44
-
45
- - std->cards[n - 1][m] == CardMax
46
34
 
47
35
 
48
36
 
49
- このたりをも一度見直してみてください
37
+ ループに突入する前に適切に初期化する必要がるでしょう。

1

追記

2017/10/22 06:07

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,3 +1,11 @@
1
+ 勘違いしていたため、いったん取り下げます。
2
+
3
+
4
+
5
+ ちょっと無視してください
6
+
7
+ ---
8
+
1
9
  Initia関数内のこの部分が非常に怪しいです。
2
10
 
3
11
  > ```C