回答編集履歴

3

複数の文字列を表示するコードを追加

2019/11/18 08:26

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -313,3 +313,131 @@
313
313
  ```
314
314
 
315
315
  ところで、const char * の意味は理解していますか?
316
+
317
+
318
+
319
+ **追記**
320
+
321
+ クラスと構造体はあなたの現在の実力では無理です。
322
+
323
+
324
+
325
+ 複数の文字列を表示する例をグローバルな配列変数で書いてみました。
326
+
327
+ ```C++
328
+
329
+ #include <DxLib.h>
330
+
331
+
332
+
333
+ const char *str[3] = { "あいうabc", "0123456789", "ABCDEFG" };
334
+
335
+ int frame[3] = { 50, 30, 40 };
336
+
337
+ int pos[3];
338
+
339
+ int count[3];
340
+
341
+
342
+
343
+ void drawString(int i, int x, int y, int color)
344
+
345
+ {
346
+
347
+ char c = str[i][pos[i]];
348
+
349
+ if (count[i] == 0 && c != '\0')
350
+
351
+ pos[i] += IsDBCSLeadByte(c) ? 2 : 1;
352
+
353
+ if (++count[i] == frame[i]) count[i] = 0;
354
+
355
+ DrawFormatString(x, y, color, "%.*s", pos[i], str[i]);
356
+
357
+ }
358
+
359
+
360
+
361
+ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
362
+
363
+ {
364
+
365
+ SetFontSize(25); //サイズを64に変更 ???
366
+
367
+ SetFontThickness(10); //太さを8に変更 ???
368
+
369
+ ChangeFont("MS 明朝"); //種類をMS明朝に変更
370
+
371
+ ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォント
372
+
373
+
374
+
375
+ SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定
376
+
377
+ ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
378
+
379
+ if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
380
+
381
+ SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定
382
+
383
+
384
+
385
+ SetWindowSizeChangeEnableFlag(FALSE, FALSE);
386
+
387
+
388
+
389
+ int Green = GetColor(0, 255, 0);
390
+
391
+ int Yellow = GetColor(255, 255, 0);
392
+
393
+ int White = GetColor(255, 255, 255);
394
+
395
+
396
+
397
+ int t = 0;
398
+
399
+ while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
400
+
401
+ drawString(0, 100, 500, Green);
402
+
403
+ drawString(1, 100, 530, Yellow);
404
+
405
+ drawString(2, 500, 530, White);
406
+
407
+ if (++t == 6*60) {
408
+
409
+ t = 0;
410
+
411
+ for (int i = 0; i < 3; i++) pos[i] = count[i] = 0;
412
+
413
+ }
414
+
415
+ }
416
+
417
+
418
+
419
+ DxLib_End(); // DXライブラリ終了処理
420
+
421
+ return 0;
422
+
423
+ }
424
+
425
+ ```
426
+
427
+ 分からないところはどこですか?
428
+
429
+ ・frame と pos と count の意味ですか?
430
+
431
+ ・frame と pos と count の関係ですか?
432
+
433
+ ・DrawFortmatString の書式 "%.*s" ですか?
434
+
435
+
436
+
437
+ それから、構造体を使ったことはありますか?
438
+
439
+ ポインタを使ったことはありますか?
440
+
441
+
442
+
443
+ キー入力に関する問題は別の質問にしてください。

2

struct の追加

2019/11/18 08:26

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -190,7 +190,7 @@
190
190
 
191
191
 
192
192
 
193
- Str str1 = { "あいうabc", 50, 0, 0 };
193
+ struct Str str1 = { "あいうabc", 50, 0, 0 };
194
194
 
195
195
 
196
196
 

1

クラスを構造体に書き換えた

2019/11/16 00:25

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -101,3 +101,215 @@
101
101
  }
102
102
 
103
103
  ```
104
+
105
+ ---
106
+
107
+ C++ のクラスについて十分に学習しましたか?
108
+
109
+ データメンバ(メンバ変数)、メンバ関数、コンストラクタ、メンバ初期化子リスト、
110
+
111
+ public などのアクセス指定子などの意味を全部理解していますか?
112
+
113
+
114
+
115
+ DxLib は C++ でコードを書くことになっていますが、
116
+
117
+ C の知識だけで書くこともできます。
118
+
119
+
120
+
121
+ クラスの代わりに構造体で書き直してみました。
122
+
123
+ ```C++
124
+
125
+ #include <DxLib.h>
126
+
127
+
128
+
129
+ struct Str {
130
+
131
+ const char *str;
132
+
133
+ int frame;
134
+
135
+ int pos;
136
+
137
+ int count;
138
+
139
+ };
140
+
141
+
142
+
143
+ void drawString(struct Str *s, int x, int y, int color)
144
+
145
+ {
146
+
147
+ char c = s->str[s->pos];
148
+
149
+ if (s->count == 0 && c != '\0')
150
+
151
+ s->pos += IsDBCSLeadByte(c) ? 2 : 1;
152
+
153
+ if (++s->count == s->frame) s->count = 0;
154
+
155
+ DrawFormatString(x, y, color, "%.*s", s->pos, s->str);
156
+
157
+ }
158
+
159
+
160
+
161
+ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
162
+
163
+ {
164
+
165
+ SetFontSize(25); //サイズを64に変更 ???
166
+
167
+ SetFontThickness(10); //太さを8に変更 ???
168
+
169
+ ChangeFont("MS 明朝"); //種類をMS明朝に変更
170
+
171
+ ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォント
172
+
173
+
174
+
175
+ SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定
176
+
177
+ ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
178
+
179
+ if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
180
+
181
+ SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定
182
+
183
+
184
+
185
+ SetWindowSizeChangeEnableFlag(FALSE, FALSE);
186
+
187
+
188
+
189
+ int Green = GetColor(0, 255, 0);
190
+
191
+
192
+
193
+ Str str1 = { "あいうabc", 50, 0, 0 };
194
+
195
+
196
+
197
+ int t = 0;
198
+
199
+ while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
200
+
201
+ drawString(&str1, 100, 500, Green);
202
+
203
+ if (++t == 60 * 6) { t = 0; str1.count = str1.pos = 0; }
204
+
205
+ }
206
+
207
+
208
+
209
+ DxLib_End(); // DXライブラリ終了処理
210
+
211
+ return 0;
212
+
213
+ }
214
+
215
+ ```
216
+
217
+ C の構造体について十分学習しましたか?
218
+
219
+ 演算子->の意味を理解していますか?
220
+
221
+
222
+
223
+ 構造体も使わずに書いてほしいと言われたら、あまり良いことでは
224
+
225
+ ありませんが、グローバル変数を使えばできます。
226
+
227
+ ```C++
228
+
229
+ #include <DxLib.h>
230
+
231
+
232
+
233
+ const char *str;
234
+
235
+ int frame;
236
+
237
+ int pos;
238
+
239
+ int count;
240
+
241
+
242
+
243
+ void drawString(int x, int y, int color)
244
+
245
+ {
246
+
247
+ if (count == 0 && str[pos] != '\0')
248
+
249
+ pos += IsDBCSLeadByte(str[pos]) ? 2 : 1;
250
+
251
+ if (++count == frame) count = 0;
252
+
253
+ DrawFormatString(x, y, color, "%.*s", pos, str);
254
+
255
+ }
256
+
257
+
258
+
259
+ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
260
+
261
+ {
262
+
263
+ SetFontSize(25); //サイズを64に変更 ???
264
+
265
+ SetFontThickness(10); //太さを8に変更 ???
266
+
267
+ ChangeFont("MS 明朝"); //種類をMS明朝に変更
268
+
269
+ ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォント
270
+
271
+
272
+
273
+ SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定
274
+
275
+ ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
276
+
277
+ if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
278
+
279
+ SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定
280
+
281
+
282
+
283
+ SetWindowSizeChangeEnableFlag(FALSE, FALSE);
284
+
285
+
286
+
287
+ int Green = GetColor(0, 255, 0);
288
+
289
+
290
+
291
+ str = "あいうabc", frame = 50, pos = count = 0;
292
+
293
+
294
+
295
+ int t = 0;
296
+
297
+ while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
298
+
299
+ drawString(100, 500, Green);
300
+
301
+ if (++t == 60 * 6) { t = 0; pos = count = 0; }
302
+
303
+ }
304
+
305
+
306
+
307
+ DxLib_End(); // DXライブラリ終了処理
308
+
309
+ return 0;
310
+
311
+ }
312
+
313
+ ```
314
+
315
+ ところで、const char * の意味は理解していますか?