質問編集履歴

12

2019/11/21 05:29

投稿

R-ogiura
R-ogiura

スコア60

test CHANGED
File without changes
test CHANGED
@@ -613,3 +613,9 @@
613
613
  文字数制限があるのでこちらのサイトに書きました。
614
614
 
615
615
  [配列の解決したプログラム](https://pastebin.com/fgBeSWM5)
616
+
617
+
618
+
619
+ 編集後の構造体の解決したプログラム
620
+
621
+ [構造体の解決したプログラム](https://pastebin.com/FQJSyKYh)

11

編集

2019/11/21 05:29

投稿

R-ogiura
R-ogiura

スコア60

test CHANGED
File without changes
test CHANGED
@@ -490,6 +490,8 @@
490
490
 
491
491
  編集後の解決したクラスのプログラム
492
492
 
493
+ ```ここに言語を入力
494
+
493
495
  #include <DxLib.h>
494
496
 
495
497
 
@@ -514,8 +516,6 @@
514
516
 
515
517
  : str(str), frame(frame), pos(0), count(0) {}
516
518
 
517
- ```
518
-
519
519
 
520
520
 
521
521
  void drawString(int x, int y, int color) {
@@ -606,6 +606,8 @@
606
606
 
607
607
 
608
608
 
609
+
610
+
609
611
  編集後の配列の解決したプログラム
610
612
 
611
613
  文字数制限があるのでこちらのサイトに書きました。

10

んごいr

2019/11/21 05:12

投稿

R-ogiura
R-ogiura

スコア60

test CHANGED
File without changes
test CHANGED
@@ -490,8 +490,6 @@
490
490
 
491
491
  編集後の解決したクラスのプログラム
492
492
 
493
- ```
494
-
495
493
  #include <DxLib.h>
496
494
 
497
495
 
@@ -516,6 +514,8 @@
516
514
 
517
515
  : str(str), frame(frame), pos(0), count(0) {}
518
516
 
517
+ ```
518
+
519
519
 
520
520
 
521
521
  void drawString(int x, int y, int color) {
@@ -603,3 +603,11 @@
603
603
  }
604
604
 
605
605
  ```
606
+
607
+
608
+
609
+ 編集後の配列の解決したプログラム
610
+
611
+ 文字数制限があるのでこちらのサイトに書きました。
612
+
613
+ [配列の解決したプログラム](https://pastebin.com/fgBeSWM5)

9

編集

2019/11/21 05:11

投稿

R-ogiura
R-ogiura

スコア60

test CHANGED
File without changes
test CHANGED
@@ -44,8 +44,472 @@
44
44
 
45
45
  public:
46
46
 
47
+
48
+
49
+ void setMember(int iMember) { pos = iMember; }
50
+
51
+ Str(const char* str, int frame)
52
+
53
+ : str(str), frame(frame), pos(0), count(0) {}
54
+
55
+
56
+
57
+ void drawString(int x, int y, int color) {
58
+
59
+ if (count == 0 && str[pos]) pos += 1 + IsDBCSLeadByte(str[pos]);
60
+
61
+ if (++count == frame) count = 0;
62
+
63
+ DrawFormatString(x, y, color, "%.*s", pos, str);//ポインタの配列としてstrを*sとして、[]の中のposは%としたのだ。
64
+
65
+ }
66
+
67
+
68
+
69
+ void reset() { pos = count = 0; }
70
+
71
+ };
72
+
73
+
74
+
75
+ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
76
+
77
+ {
78
+
79
+ SetFontSize(25); //サイズを64に変更 ???
80
+
81
+ SetFontThickness(10); //太さを8に変更 ???
82
+
83
+ ChangeFont("MS 明朝"); //種類をMS明朝に変更
84
+
85
+ ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォント
86
+
87
+
88
+
89
+ SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定
90
+
91
+ ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
92
+
93
+ if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
94
+
95
+ SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定
96
+
97
+
98
+
99
+ SetWindowSizeChangeEnableFlag(FALSE, FALSE);
100
+
101
+
102
+
103
+ SetGraphMode(780, 680, 32); // 画面サイズは最大の780*680にしておく
104
+
105
+ SetWindowSize(780, 680); // 最初は 640x480 にしておく ???
106
+
107
+
108
+
109
+ int Green = GetColor(0, 255, 0);
110
+
111
+
112
+
113
+ Str str1("あいうabc", 50); // 6文字を 50フレームごとに 1文字追加
114
+
115
+ // 全部で 300フレーム(5秒)
116
+
117
+ int t = 0;
118
+
119
+ while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
120
+
121
+ str1.drawString(100, 500, Green);
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+ if (++t == 60 * 6) { t = 0; str1.reset(); } // 6秒ごとにリセット
130
+
131
+ }
132
+
133
+
134
+
135
+ DxLib_End(); // DXライブラリ終了処理
136
+
137
+ return 0;
138
+
139
+ }
140
+
141
+ ```
142
+
143
+ こちらが構造体です。
144
+
145
+ ```
146
+
147
+ #include <DxLib.h>
148
+
149
+
150
+
151
+ struct Str {
152
+
153
+ const char *str;
154
+
155
+ int frame;
156
+
157
+ int pos;
158
+
159
+ int count;
160
+
161
+ };
162
+
163
+
164
+
165
+ void drawString(struct Str *s, int x, int y, int color)
166
+
167
+ {
168
+
169
+ char c = s->str[s->pos];
170
+
171
+ if (s->count == 0 && c != '\0')
172
+
173
+ s->pos += IsDBCSLeadByte(c) ? 2 : 1;
174
+
175
+ if (++s->count == s->frame) s->count = 0;
176
+
177
+ DrawFormatString(x, y, color, "%.*s", s->pos, s->str);
178
+
179
+ }
180
+
181
+
182
+
183
+ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
184
+
185
+ {
186
+
187
+ SetFontSize(25); //サイズを64に変更 ???
188
+
189
+ SetFontThickness(10); //太さを8に変更 ???
190
+
191
+ ChangeFont("MS 明朝"); //種類をMS明朝に変更
192
+
193
+ ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォント
194
+
195
+
196
+
197
+ SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定
198
+
199
+ ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
200
+
201
+ if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
202
+
203
+ SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定
204
+
205
+
206
+
207
+ SetWindowSizeChangeEnableFlag(FALSE, FALSE);
208
+
209
+
210
+
211
+ int Green = GetColor(0, 255, 0);
212
+
213
+
214
+
215
+ struct Str str1 = { "あいうabc", 50, 0, 0 };
216
+
217
+
218
+
219
+ int t = 0;
220
+
221
+ while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
222
+
223
+ drawString(&str1, 100, 500, Green);
224
+
225
+ if (++t == 60 * 6) { t = 0; str1.count = str1.pos = 0; }
226
+
227
+ }
228
+
229
+
230
+
231
+ DxLib_End(); // DXライブラリ終了処理
232
+
233
+ return 0;
234
+
235
+ }
236
+
237
+ ```
238
+
239
+
240
+
241
+ こちらが配列のプログラムです。
242
+
243
+ ```ここに言語を入力
244
+
245
+ #include <DxLib.h>
246
+
247
+
248
+
249
+ const char *str[3] = { "あいうabc", "0123456789", "ABCDEFG" };
250
+
251
+ int frame[3] = { 50, 30, 40 };
252
+
253
+ int pos[3];
254
+
255
+ int count[3];
256
+
257
+
258
+
259
+ void drawString(int i, int x, int y, int color)
260
+
261
+ {
262
+
263
+ char c = str[i][pos[i]];
264
+
265
+ if (count[i] == 0 && c != '\0')
266
+
267
+ pos[i] += IsDBCSLeadByte(c) ? 2 : 1;
268
+
269
+ if (++count[i] == frame[i]) count[i] = 0;
270
+
271
+ DrawFormatString(x, y, color, "%.*s", pos[i], str[i]);
272
+
273
+ }
274
+
275
+
276
+
277
+ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
278
+
279
+ {
280
+
281
+ SetFontSize(25); //サイズを64に変更 ???
282
+
283
+ SetFontThickness(10); //太さを8に変更 ???
284
+
285
+ ChangeFont("MS 明朝"); //種類をMS明朝に変更
286
+
287
+ ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォント
288
+
289
+
290
+
291
+ SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定
292
+
293
+ ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
294
+
295
+ if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
296
+
297
+ SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定
298
+
299
+
300
+
301
+ SetWindowSizeChangeEnableFlag(FALSE, FALSE);
302
+
303
+
304
+
305
+ int Green = GetColor(0, 255, 0);
306
+
307
+ int Yellow = GetColor(255, 255, 0);
308
+
309
+ int White = GetColor(255, 255, 255);
310
+
311
+
312
+
313
+ int t = 0;
314
+
315
+ while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
316
+
317
+ drawString(0, 100, 500, Green);
318
+
319
+ drawString(1, 100, 530, Yellow);
320
+
321
+ drawString(2, 500, 530, White);
322
+
323
+ if (++t == 6*60) {
324
+
325
+ t = 0;
326
+
327
+ for (int i = 0; i < 3; i++) pos[i] = count[i] = 0;
328
+
329
+ }
330
+
331
+ }
332
+
333
+
334
+
335
+ DxLib_End(); // DXライブラリ終了処理
336
+
337
+ return 0;
338
+
339
+ }
340
+
341
+ ```
342
+
343
+
344
+
345
+ 編集
346
+
347
+ 構造体のプログラムに関してなのですが
348
+
349
+ ```ここに言語を入力
350
+
351
+ char c = s->str[s->pos];//ポインタsに入っているstr[pos]の文字のデータが一文字ずつcに入る
352
+
353
+ if (s->count == 0 && c != '\0')//その時にcountが0でかつcに入る文字が¥0(文字列の最後の部分\0)でない、すなわち文字ならば日本語一文字は2バイトなので、
354
+
355
+   s->pos += IsDBCSLeadByte(c) ? 2 : 1;//posに2バイトを足す、違う場合は¥0(\0)なので1バイト加える。(¥0(\0)は1バイトなので。)
356
+
357
+ if (++s->count == s->frame) s->count = 0;//一文字ずつ出力する間隔を処理する変数countと間隔の最大値を表すframeが等しくなったら、countを0にする
358
+
359
+ DrawFormatString(x, y, color, "%.*s", s->pos, s->str);//関数drawStringの引数として関数DrawFormatStringの引数を利用する
360
+
361
+ ```
362
+
363
+ の部分に関してわからないことがあります。
364
+
365
+ 最後の部分のs->pos, s->strの中身を表すために"%.*s"と書いていますが、なぜ"%.*s"のように書けるのでしょうか。
366
+
367
+
368
+
369
+ もう一つ、配列のプログラムに関して
370
+
371
+ const char* str[3] = { "あいうabc", "0123456789", "ABCDEFG" };
372
+
373
+ ポインタを使用して右の三つの文字列を配列に入れるまではわかるのですが、**なぜポインタを使用して、constを付けたのかわかりません。**どうか理由を教えてください。
374
+
375
+
376
+
377
+ 編集後のクラスのプログラム
378
+
379
+ ```ここに言語を入力
380
+
381
+ #include <DxLib.h>
382
+
383
+
384
+
385
+ class Str {
386
+
387
+ const char* str;
388
+
389
+ int frame;
390
+
391
+ int pos;
392
+
393
+ int count;
394
+
395
+ public:
396
+
47
397
  int position() const { return pos; } // コレ追加
48
398
 
399
+ Str(const char* str, int frame)
400
+
401
+ : str(str), frame(frame), pos(0), count(0) {}
402
+
403
+
404
+
405
+ void drawString(int x, int y, int color) {
406
+
407
+ if (count == 0 && str[pos]) pos += 1 + IsDBCSLeadByte(str[pos]);
408
+
409
+ if (++count == frame) count = 0;
410
+
411
+ DrawFormatString(x, y, color, "%.*s", pos, str);
412
+
413
+ }
414
+
415
+
416
+
417
+ void reset() { pos = count = 0; }
418
+
419
+ };
420
+
421
+
422
+
423
+ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
424
+
425
+ {
426
+
427
+ SetFontSize(25); //サイズを64に変更 ???
428
+
429
+ SetFontThickness(10); //太さを8に変更 ???
430
+
431
+ ChangeFont("MS 明朝"); //種類をMS明朝に変更
432
+
433
+ ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォント
434
+
435
+
436
+
437
+ SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定
438
+
439
+ ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
440
+
441
+ if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
442
+
443
+ SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定
444
+
445
+
446
+
447
+ SetWindowSizeChangeEnableFlag(FALSE, FALSE);
448
+
449
+
450
+
451
+ SetGraphMode(780, 680, 32); // 画面サイズは最大の780*680にしておく
452
+
453
+ SetWindowSize(780, 680); // 最初は 640x480 にしておく ???
454
+
455
+
456
+
457
+ int Green = GetColor(0, 255, 0);
458
+
459
+
460
+
461
+ Str str1("あいうabc", 50); // 6文字を 50フレームごとに 1文字追加
462
+
463
+ // 全部で 300フレーム(5秒)
464
+
465
+ int t = 0;
466
+
467
+ while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
468
+
469
+ str1.drawString(100, 500, Green);
470
+
471
+ if (++t == 60 * 6) { t = 0; str1.reset(); } // 6秒ごとにリセット
472
+
473
+
474
+
475
+ DrawFormatString(300, 300, Green, "%d",pos);//これを追加した
476
+
477
+ }
478
+
479
+
480
+
481
+ DxLib_End(); // DXライブラリ終了処理
482
+
483
+ return 0;
484
+
485
+ }
486
+
487
+ ```
488
+
489
+
490
+
491
+ 編集後の解決したクラスのプログラム
492
+
493
+ ```
494
+
495
+ #include <DxLib.h>
496
+
497
+
498
+
499
+ class Str {
500
+
501
+ const char* str;
502
+
503
+ int frame;
504
+
505
+ int pos;
506
+
507
+ int count;
508
+
509
+ public:
510
+
511
+ int position() const { return pos; } // コレ追加
512
+
49
513
  void setMember(int iMember) { pos = iMember; }
50
514
 
51
515
  Str(const char* str, int frame)
@@ -139,349 +603,3 @@
139
603
  }
140
604
 
141
605
  ```
142
-
143
- こちらが構造体です。
144
-
145
- ```
146
-
147
- #include <DxLib.h>
148
-
149
-
150
-
151
- struct Str {
152
-
153
- const char *str;
154
-
155
- int frame;
156
-
157
- int pos;
158
-
159
- int count;
160
-
161
- };
162
-
163
-
164
-
165
- void drawString(struct Str *s, int x, int y, int color)
166
-
167
- {
168
-
169
- char c = s->str[s->pos];
170
-
171
- if (s->count == 0 && c != '\0')
172
-
173
- s->pos += IsDBCSLeadByte(c) ? 2 : 1;
174
-
175
- if (++s->count == s->frame) s->count = 0;
176
-
177
- DrawFormatString(x, y, color, "%.*s", s->pos, s->str);
178
-
179
- }
180
-
181
-
182
-
183
- int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
184
-
185
- {
186
-
187
- SetFontSize(25); //サイズを64に変更 ???
188
-
189
- SetFontThickness(10); //太さを8に変更 ???
190
-
191
- ChangeFont("MS 明朝"); //種類をMS明朝に変更
192
-
193
- ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォント
194
-
195
-
196
-
197
- SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定
198
-
199
- ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
200
-
201
- if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
202
-
203
- SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定
204
-
205
-
206
-
207
- SetWindowSizeChangeEnableFlag(FALSE, FALSE);
208
-
209
-
210
-
211
- int Green = GetColor(0, 255, 0);
212
-
213
-
214
-
215
- struct Str str1 = { "あいうabc", 50, 0, 0 };
216
-
217
-
218
-
219
- int t = 0;
220
-
221
- while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
222
-
223
- drawString(&str1, 100, 500, Green);
224
-
225
- if (++t == 60 * 6) { t = 0; str1.count = str1.pos = 0; }
226
-
227
- }
228
-
229
-
230
-
231
- DxLib_End(); // DXライブラリ終了処理
232
-
233
- return 0;
234
-
235
- }
236
-
237
- ```
238
-
239
-
240
-
241
- こちらが配列のプログラムです。
242
-
243
- ```ここに言語を入力
244
-
245
- #include <DxLib.h>
246
-
247
-
248
-
249
- const char *str[3] = { "あいうabc", "0123456789", "ABCDEFG" };
250
-
251
- int frame[3] = { 50, 30, 40 };
252
-
253
- int pos[3];
254
-
255
- int count[3];
256
-
257
-
258
-
259
- void drawString(int i, int x, int y, int color)
260
-
261
- {
262
-
263
- char c = str[i][pos[i]];
264
-
265
- if (count[i] == 0 && c != '\0')
266
-
267
- pos[i] += IsDBCSLeadByte(c) ? 2 : 1;
268
-
269
- if (++count[i] == frame[i]) count[i] = 0;
270
-
271
- DrawFormatString(x, y, color, "%.*s", pos[i], str[i]);
272
-
273
- }
274
-
275
-
276
-
277
- int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
278
-
279
- {
280
-
281
- SetFontSize(25); //サイズを64に変更 ???
282
-
283
- SetFontThickness(10); //太さを8に変更 ???
284
-
285
- ChangeFont("MS 明朝"); //種類をMS明朝に変更
286
-
287
- ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォント
288
-
289
-
290
-
291
- SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定
292
-
293
- ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
294
-
295
- if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
296
-
297
- SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定
298
-
299
-
300
-
301
- SetWindowSizeChangeEnableFlag(FALSE, FALSE);
302
-
303
-
304
-
305
- int Green = GetColor(0, 255, 0);
306
-
307
- int Yellow = GetColor(255, 255, 0);
308
-
309
- int White = GetColor(255, 255, 255);
310
-
311
-
312
-
313
- int t = 0;
314
-
315
- while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
316
-
317
- drawString(0, 100, 500, Green);
318
-
319
- drawString(1, 100, 530, Yellow);
320
-
321
- drawString(2, 500, 530, White);
322
-
323
- if (++t == 6*60) {
324
-
325
- t = 0;
326
-
327
- for (int i = 0; i < 3; i++) pos[i] = count[i] = 0;
328
-
329
- }
330
-
331
- }
332
-
333
-
334
-
335
- DxLib_End(); // DXライブラリ終了処理
336
-
337
- return 0;
338
-
339
- }
340
-
341
- ```
342
-
343
-
344
-
345
- 編集
346
-
347
- 構造体のプログラムに関してなのですが
348
-
349
- ```ここに言語を入力
350
-
351
- char c = s->str[s->pos];//ポインタsに入っているstr[pos]の文字のデータが一文字ずつcに入る
352
-
353
- if (s->count == 0 && c != '\0')//その時にcountが0でかつcに入る文字が¥0(文字列の最後の部分\0)でない、すなわち文字ならば日本語一文字は2バイトなので、
354
-
355
-   s->pos += IsDBCSLeadByte(c) ? 2 : 1;//posに2バイトを足す、違う場合は¥0(\0)なので1バイト加える。(¥0(\0)は1バイトなので。)
356
-
357
- if (++s->count == s->frame) s->count = 0;//一文字ずつ出力する間隔を処理する変数countと間隔の最大値を表すframeが等しくなったら、countを0にする
358
-
359
- DrawFormatString(x, y, color, "%.*s", s->pos, s->str);//関数drawStringの引数として関数DrawFormatStringの引数を利用する
360
-
361
- ```
362
-
363
- の部分に関してわからないことがあります。
364
-
365
- 最後の部分のs->pos, s->strの中身を表すために"%.*s"と書いていますが、なぜ"%.*s"のように書けるのでしょうか。
366
-
367
-
368
-
369
- もう一つ、配列のプログラムに関して
370
-
371
- const char* str[3] = { "あいうabc", "0123456789", "ABCDEFG" };
372
-
373
- ポインタを使用して右の三つの文字列を配列に入れるまではわかるのですが、**なぜポインタを使用して、constを付けたのかわかりません。**どうか理由を教えてください。
374
-
375
-
376
-
377
- 編集後のクラスのプログラム
378
-
379
- ```ここに言語を入力
380
-
381
- #include <DxLib.h>
382
-
383
-
384
-
385
- class Str {
386
-
387
- const char* str;
388
-
389
- int frame;
390
-
391
- int pos;
392
-
393
- int count;
394
-
395
- public:
396
-
397
- int position() const { return pos; } // コレ追加
398
-
399
- Str(const char* str, int frame)
400
-
401
- : str(str), frame(frame), pos(0), count(0) {}
402
-
403
-
404
-
405
- void drawString(int x, int y, int color) {
406
-
407
- if (count == 0 && str[pos]) pos += 1 + IsDBCSLeadByte(str[pos]);
408
-
409
- if (++count == frame) count = 0;
410
-
411
- DrawFormatString(x, y, color, "%.*s", pos, str);
412
-
413
- }
414
-
415
-
416
-
417
- void reset() { pos = count = 0; }
418
-
419
- };
420
-
421
-
422
-
423
- int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
424
-
425
- {
426
-
427
- SetFontSize(25); //サイズを64に変更 ???
428
-
429
- SetFontThickness(10); //太さを8に変更 ???
430
-
431
- ChangeFont("MS 明朝"); //種類をMS明朝に変更
432
-
433
- ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォント
434
-
435
-
436
-
437
- SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定
438
-
439
- ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
440
-
441
- if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
442
-
443
- SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定
444
-
445
-
446
-
447
- SetWindowSizeChangeEnableFlag(FALSE, FALSE);
448
-
449
-
450
-
451
- SetGraphMode(780, 680, 32); // 画面サイズは最大の780*680にしておく
452
-
453
- SetWindowSize(780, 680); // 最初は 640x480 にしておく ???
454
-
455
-
456
-
457
- int Green = GetColor(0, 255, 0);
458
-
459
-
460
-
461
- Str str1("あいうabc", 50); // 6文字を 50フレームごとに 1文字追加
462
-
463
- // 全部で 300フレーム(5秒)
464
-
465
- int t = 0;
466
-
467
- while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
468
-
469
- str1.drawString(100, 500, Green);
470
-
471
- if (++t == 60 * 6) { t = 0; str1.reset(); } // 6秒ごとにリセット
472
-
473
-
474
-
475
- DrawFormatString(300, 300, Green, "%d",pos);//これを追加した
476
-
477
- }
478
-
479
-
480
-
481
- DxLib_End(); // DXライブラリ終了処理
482
-
483
- return 0;
484
-
485
- }
486
-
487
- ```

8

2019/11/20 23:10

投稿

R-ogiura
R-ogiura

スコア60

test CHANGED
File without changes
test CHANGED
@@ -34,6 +34,122 @@
34
34
 
35
35
  class Str {
36
36
 
37
+ const char* str;
38
+
39
+ int frame;
40
+
41
+ int pos;
42
+
43
+ int count;
44
+
45
+ public:
46
+
47
+ int position() const { return pos; } // コレ追加
48
+
49
+ void setMember(int iMember) { pos = iMember; }
50
+
51
+ Str(const char* str, int frame)
52
+
53
+ : str(str), frame(frame), pos(0), count(0) {}
54
+
55
+
56
+
57
+ void drawString(int x, int y, int color) {
58
+
59
+ if (count == 0 && str[pos]) pos += 1 + IsDBCSLeadByte(str[pos]);
60
+
61
+ if (++count == frame) count = 0;
62
+
63
+ DrawFormatString(x, y, color, "%.*s", pos, str);//ポインタの配列としてstrを*sとして、[]の中のposは%としたのだ。
64
+
65
+ }
66
+
67
+
68
+
69
+ void reset() { pos = count = 0; }
70
+
71
+ };
72
+
73
+
74
+
75
+ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
76
+
77
+ {
78
+
79
+ SetFontSize(25); //サイズを64に変更 ???
80
+
81
+ SetFontThickness(10); //太さを8に変更 ???
82
+
83
+ ChangeFont("MS 明朝"); //種類をMS明朝に変更
84
+
85
+ ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォント
86
+
87
+
88
+
89
+ SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定
90
+
91
+ ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
92
+
93
+ if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
94
+
95
+ SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定
96
+
97
+
98
+
99
+ SetWindowSizeChangeEnableFlag(FALSE, FALSE);
100
+
101
+
102
+
103
+ SetGraphMode(780, 680, 32); // 画面サイズは最大の780*680にしておく
104
+
105
+ SetWindowSize(780, 680); // 最初は 640x480 にしておく ???
106
+
107
+
108
+
109
+ int Green = GetColor(0, 255, 0);
110
+
111
+
112
+
113
+ Str str1("あいうabc", 50); // 6文字を 50フレームごとに 1文字追加
114
+
115
+ // 全部で 300フレーム(5秒)
116
+
117
+ int t = 0;
118
+
119
+ while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
120
+
121
+ str1.drawString(100, 500, Green);
122
+
123
+
124
+
125
+
126
+
127
+ DrawFormatString(300, 100, Green, "%d", str1.position());//Str str1("あいうabc", 50);に関しての関数position()のposについて描画できた。
128
+
129
+ if (++t == 60 * 6) { t = 0; str1.reset(); } // 6秒ごとにリセット
130
+
131
+ }
132
+
133
+
134
+
135
+ DxLib_End(); // DXライブラリ終了処理
136
+
137
+ return 0;
138
+
139
+ }
140
+
141
+ ```
142
+
143
+ こちらが構造体です。
144
+
145
+ ```
146
+
147
+ #include <DxLib.h>
148
+
149
+
150
+
151
+ struct Str {
152
+
37
153
  const char *str;
38
154
 
39
155
  int frame;
@@ -42,27 +158,263 @@
42
158
 
43
159
  int count;
44
160
 
161
+ };
162
+
163
+
164
+
165
+ void drawString(struct Str *s, int x, int y, int color)
166
+
167
+ {
168
+
169
+ char c = s->str[s->pos];
170
+
171
+ if (s->count == 0 && c != '\0')
172
+
173
+ s->pos += IsDBCSLeadByte(c) ? 2 : 1;
174
+
175
+ if (++s->count == s->frame) s->count = 0;
176
+
177
+ DrawFormatString(x, y, color, "%.*s", s->pos, s->str);
178
+
179
+ }
180
+
181
+
182
+
183
+ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
184
+
185
+ {
186
+
187
+ SetFontSize(25); //サイズを64に変更 ???
188
+
189
+ SetFontThickness(10); //太さを8に変更 ???
190
+
191
+ ChangeFont("MS 明朝"); //種類をMS明朝に変更
192
+
193
+ ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォント
194
+
195
+
196
+
197
+ SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定
198
+
199
+ ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
200
+
201
+ if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
202
+
203
+ SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定
204
+
205
+
206
+
207
+ SetWindowSizeChangeEnableFlag(FALSE, FALSE);
208
+
209
+
210
+
211
+ int Green = GetColor(0, 255, 0);
212
+
213
+
214
+
215
+ struct Str str1 = { "あいうabc", 50, 0, 0 };
216
+
217
+
218
+
219
+ int t = 0;
220
+
221
+ while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
222
+
223
+ drawString(&str1, 100, 500, Green);
224
+
225
+ if (++t == 60 * 6) { t = 0; str1.count = str1.pos = 0; }
226
+
227
+ }
228
+
229
+
230
+
231
+ DxLib_End(); // DXライブラリ終了処理
232
+
233
+ return 0;
234
+
235
+ }
236
+
237
+ ```
238
+
239
+
240
+
241
+ こちらが配列のプログラムです。
242
+
243
+ ```ここに言語を入力
244
+
245
+ #include <DxLib.h>
246
+
247
+
248
+
249
+ const char *str[3] = { "あいうabc", "0123456789", "ABCDEFG" };
250
+
251
+ int frame[3] = { 50, 30, 40 };
252
+
253
+ int pos[3];
254
+
255
+ int count[3];
256
+
257
+
258
+
259
+ void drawString(int i, int x, int y, int color)
260
+
261
+ {
262
+
263
+ char c = str[i][pos[i]];
264
+
265
+ if (count[i] == 0 && c != '\0')
266
+
267
+ pos[i] += IsDBCSLeadByte(c) ? 2 : 1;
268
+
269
+ if (++count[i] == frame[i]) count[i] = 0;
270
+
271
+ DrawFormatString(x, y, color, "%.*s", pos[i], str[i]);
272
+
273
+ }
274
+
275
+
276
+
277
+ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
278
+
279
+ {
280
+
281
+ SetFontSize(25); //サイズを64に変更 ???
282
+
283
+ SetFontThickness(10); //太さを8に変更 ???
284
+
285
+ ChangeFont("MS 明朝"); //種類をMS明朝に変更
286
+
287
+ ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォント
288
+
289
+
290
+
291
+ SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定
292
+
293
+ ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
294
+
295
+ if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
296
+
297
+ SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定
298
+
299
+
300
+
301
+ SetWindowSizeChangeEnableFlag(FALSE, FALSE);
302
+
303
+
304
+
305
+ int Green = GetColor(0, 255, 0);
306
+
307
+ int Yellow = GetColor(255, 255, 0);
308
+
309
+ int White = GetColor(255, 255, 255);
310
+
311
+
312
+
313
+ int t = 0;
314
+
315
+ while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
316
+
317
+ drawString(0, 100, 500, Green);
318
+
319
+ drawString(1, 100, 530, Yellow);
320
+
321
+ drawString(2, 500, 530, White);
322
+
323
+ if (++t == 6*60) {
324
+
325
+ t = 0;
326
+
327
+ for (int i = 0; i < 3; i++) pos[i] = count[i] = 0;
328
+
329
+ }
330
+
331
+ }
332
+
333
+
334
+
335
+ DxLib_End(); // DXライブラリ終了処理
336
+
337
+ return 0;
338
+
339
+ }
340
+
341
+ ```
342
+
343
+
344
+
345
+ 編集
346
+
347
+ 構造体のプログラムに関してなのですが
348
+
349
+ ```ここに言語を入力
350
+
351
+ char c = s->str[s->pos];//ポインタsに入っているstr[pos]の文字のデータが一文字ずつcに入る
352
+
353
+ if (s->count == 0 && c != '\0')//その時にcountが0でかつcに入る文字が¥0(文字列の最後の部分\0)でない、すなわち文字ならば日本語一文字は2バイトなので、
354
+
355
+   s->pos += IsDBCSLeadByte(c) ? 2 : 1;//posに2バイトを足す、違う場合は¥0(\0)なので1バイト加える。(¥0(\0)は1バイトなので。)
356
+
357
+ if (++s->count == s->frame) s->count = 0;//一文字ずつ出力する間隔を処理する変数countと間隔の最大値を表すframeが等しくなったら、countを0にする
358
+
359
+ DrawFormatString(x, y, color, "%.*s", s->pos, s->str);//関数drawStringの引数として関数DrawFormatStringの引数を利用する
360
+
361
+ ```
362
+
363
+ の部分に関してわからないことがあります。
364
+
365
+ 最後の部分のs->pos, s->strの中身を表すために"%.*s"と書いていますが、なぜ"%.*s"のように書けるのでしょうか。
366
+
367
+
368
+
369
+ もう一つ、配列のプログラムに関して
370
+
371
+ const char* str[3] = { "あいうabc", "0123456789", "ABCDEFG" };
372
+
373
+ ポインタを使用して右の三つの文字列を配列に入れるまではわかるのですが、**なぜポインタを使用して、constを付けたのかわかりません。**どうか理由を教えてください。
374
+
375
+
376
+
377
+ 編集後のクラスのプログラム
378
+
379
+ ```ここに言語を入力
380
+
381
+ #include <DxLib.h>
382
+
383
+
384
+
385
+ class Str {
386
+
387
+ const char* str;
388
+
389
+ int frame;
390
+
391
+ int pos;
392
+
393
+ int count;
394
+
45
395
  public:
46
396
 
397
+ int position() const { return pos; } // コレ追加
398
+
47
- Str(const char *str, int frame)
399
+ Str(const char* str, int frame)
48
-
400
+
49
- : str(str), frame(frame), pos(0), count(0) {}
401
+ : str(str), frame(frame), pos(0), count(0) {}
50
-
51
-
52
-
402
+
403
+
404
+
53
- void drawString(int x, int y, int color) {
405
+ void drawString(int x, int y, int color) {
54
-
406
+
55
- if (count == 0 && str[pos]) pos += 1 + IsDBCSLeadByte(str[pos]);
407
+ if (count == 0 && str[pos]) pos += 1 + IsDBCSLeadByte(str[pos]);
56
-
408
+
57
- if (++count == frame) count = 0;
409
+ if (++count == frame) count = 0;
58
-
410
+
59
- DrawFormatString(x, y, color, "%.*s", pos, str);
411
+ DrawFormatString(x, y, color, "%.*s", pos, str);
60
-
412
+
61
- }
413
+ }
62
-
63
-
64
-
414
+
415
+
416
+
65
- void reset() { pos = count = 0; }
417
+ void reset() { pos = count = 0; }
66
418
 
67
419
  };
68
420
 
@@ -72,402 +424,60 @@
72
424
 
73
425
  {
74
426
 
75
- SetFontSize(25); //サイズを64に変更 ???
76
-
77
- SetFontThickness(10); //太さを8に変更 ???
78
-
79
- ChangeFont("MS 明朝"); //種類をMS明朝に変更
80
-
81
- ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォント
82
-
83
-
84
-
85
- SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定
86
-
87
- ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
88
-
89
- if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
90
-
91
- SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定
92
-
93
-
94
-
95
- SetWindowSizeChangeEnableFlag(FALSE, FALSE);
96
-
97
-
98
-
99
- SetGraphMode(780, 680, 32); // 画面サイズは最大の780*680にしておく
100
-
101
- SetWindowSize(780, 680); // 最初は 640x480 にしておく ???
102
-
103
-
104
-
105
- int Green = GetColor(0, 255, 0);
106
-
107
-
108
-
109
- Str str1("あいうabc", 50); // 6文字を 50フレームごとに 1文字追加
110
-
111
- // 全部で 300フレーム(5秒)
112
-
113
- int t = 0;
114
-
115
- while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
116
-
117
- str1.drawString(100, 500, Green);
118
-
119
- if (++t == 60 * 6) { t = 0; str1.reset(); } // 6秒ごとにリセット
120
-
121
- }
122
-
123
-
124
-
125
- DxLib_End(); // DXライブラリ終了処理
126
-
127
- return 0;
128
-
129
- }
130
-
131
- ```
132
-
133
- こちらが構造体です。
134
-
135
- ```
136
-
137
- #include <DxLib.h>
138
-
139
-
140
-
141
- struct Str {
142
-
143
- const char *str;
144
-
145
- int frame;
146
-
147
- int pos;
148
-
149
- int count;
150
-
151
- };
152
-
153
-
154
-
155
- void drawString(struct Str *s, int x, int y, int color)
156
-
157
- {
158
-
159
- char c = s->str[s->pos];
160
-
161
- if (s->count == 0 && c != '\0')
162
-
163
- s->pos += IsDBCSLeadByte(c) ? 2 : 1;
164
-
165
- if (++s->count == s->frame) s->count = 0;
166
-
167
- DrawFormatString(x, y, color, "%.*s", s->pos, s->str);
168
-
169
- }
170
-
171
-
172
-
173
- int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
174
-
175
- {
176
-
177
- SetFontSize(25); //サイズを64に変更 ???
178
-
179
- SetFontThickness(10); //太さを8に変更 ???
180
-
181
- ChangeFont("MS 明朝"); //種類をMS明朝に変更
182
-
183
- ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォント
184
-
185
-
186
-
187
- SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定
188
-
189
- ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
190
-
191
- if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
192
-
193
- SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定
194
-
195
-
196
-
197
- SetWindowSizeChangeEnableFlag(FALSE, FALSE);
198
-
199
-
200
-
201
- int Green = GetColor(0, 255, 0);
202
-
203
-
204
-
205
- struct Str str1 = { "あいうabc", 50, 0, 0 };
206
-
207
-
208
-
209
- int t = 0;
210
-
211
- while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
212
-
213
- drawString(&str1, 100, 500, Green);
214
-
215
- if (++t == 60 * 6) { t = 0; str1.count = str1.pos = 0; }
216
-
217
- }
218
-
219
-
220
-
221
- DxLib_End(); // DXライブラリ終了処理
222
-
223
- return 0;
224
-
225
- }
226
-
227
- ```
228
-
229
-
230
-
231
- こちらが配列のプログラムです。
232
-
233
- ```ここに言語を入力
234
-
235
- #include <DxLib.h>
236
-
237
-
238
-
239
- const char *str[3] = { "あいうabc", "0123456789", "ABCDEFG" };
240
-
241
- int frame[3] = { 50, 30, 40 };
242
-
243
- int pos[3];
244
-
245
- int count[3];
246
-
247
-
248
-
249
- void drawString(int i, int x, int y, int color)
250
-
251
- {
252
-
253
- char c = str[i][pos[i]];
254
-
255
- if (count[i] == 0 && c != '\0')
256
-
257
- pos[i] += IsDBCSLeadByte(c) ? 2 : 1;
258
-
259
- if (++count[i] == frame[i]) count[i] = 0;
260
-
261
- DrawFormatString(x, y, color, "%.*s", pos[i], str[i]);
262
-
263
- }
264
-
265
-
266
-
267
- int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
268
-
269
- {
270
-
271
- SetFontSize(25); //サイズを64に変更 ???
272
-
273
- SetFontThickness(10); //太さを8に変更 ???
274
-
275
- ChangeFont("MS 明朝"); //種類をMS明朝に変更
276
-
277
- ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォント
278
-
279
-
280
-
281
- SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定
282
-
283
- ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
284
-
285
- if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
286
-
287
- SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定
288
-
289
-
290
-
291
- SetWindowSizeChangeEnableFlag(FALSE, FALSE);
292
-
293
-
294
-
295
- int Green = GetColor(0, 255, 0);
296
-
297
- int Yellow = GetColor(255, 255, 0);
298
-
299
- int White = GetColor(255, 255, 255);
300
-
301
-
302
-
303
- int t = 0;
304
-
305
- while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
306
-
307
- drawString(0, 100, 500, Green);
308
-
309
- drawString(1, 100, 530, Yellow);
310
-
311
- drawString(2, 500, 530, White);
312
-
313
- if (++t == 6*60) {
314
-
315
- t = 0;
316
-
317
- for (int i = 0; i < 3; i++) pos[i] = count[i] = 0;
318
-
319
- }
320
-
321
- }
322
-
323
-
324
-
325
- DxLib_End(); // DXライブラリ終了処理
326
-
327
- return 0;
328
-
329
- }
330
-
331
- ```
332
-
333
-
334
-
335
- 編集
336
-
337
- 構造体のプログラムに関してなのですが
338
-
339
- ```ここに言語を入力
340
-
341
- char c = s->str[s->pos];//ポインタsに入っているstr[pos]の文字のデータが一文字ずつcに入る
342
-
343
- if (s->count == 0 && c != '\0')//その時にcountが0でかつcに入る文字が¥0(文字列の最後の部分\0)でない、すなわち文字ならば日本語一文字は2バイトなので、
344
-
345
-   s->pos += IsDBCSLeadByte(c) ? 2 : 1;//posに2バイトを足す、違う場合は¥0(\0)なので1バイト加える。(¥0(\0)は1バイトなので。)
346
-
347
- if (++s->count == s->frame) s->count = 0;//一文字ずつ出力する間隔を処理する変数countと間隔の最大値を表すframeが等しくなったら、countを0にする
348
-
349
- DrawFormatString(x, y, color, "%.*s", s->pos, s->str);//関数drawStringの引数として関数DrawFormatStringの引数を利用する
350
-
351
- ```
352
-
353
- の部分に関してわからないことがあります。
354
-
355
- 最後の部分のs->pos, s->strの中身を表すために"%.*s"と書いていますが、なぜ"%.*s"のように書けるのでしょうか。
356
-
357
-
358
-
359
- もう一つ、配列のプログラムに関して
360
-
361
- const char* str[3] = { "あいうabc", "0123456789", "ABCDEFG" };
362
-
363
- ポインタを使用して右の三つの文字列を配列に入れるまではわかるのですが、**なぜポインタを使用して、constを付けたのかわかりません。**どうか理由を教えてください。
364
-
365
-
366
-
367
- 編集後のクラスのプログラム
368
-
369
- ```ここに言語を入力
370
-
371
- #include <DxLib.h>
372
-
373
-
374
-
375
- class Str {
376
-
377
- const char* str;
378
-
379
- int frame;
380
-
381
- int pos;
382
-
383
- int count;
384
-
385
- public:
386
-
387
- int position() const { return pos; } // コレ追加
388
-
389
- Str(const char* str, int frame)
390
-
391
- : str(str), frame(frame), pos(0), count(0) {}
392
-
393
-
394
-
395
- void drawString(int x, int y, int color) {
396
-
397
- if (count == 0 && str[pos]) pos += 1 + IsDBCSLeadByte(str[pos]);
398
-
399
- if (++count == frame) count = 0;
400
-
401
- DrawFormatString(x, y, color, "%.*s", pos, str);
427
+ SetFontSize(25); //サイズを64に変更 ???
428
+
429
+ SetFontThickness(10); //太さを8に変更 ???
430
+
431
+ ChangeFont("MS 明朝"); //種類をMS明朝に変更
432
+
433
+ ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォント
434
+
435
+
436
+
437
+ SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定
438
+
439
+ ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
440
+
441
+ if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
442
+
443
+ SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定
444
+
445
+
446
+
447
+ SetWindowSizeChangeEnableFlag(FALSE, FALSE);
448
+
449
+
450
+
451
+ SetGraphMode(780, 680, 32); // 画面サイズは最大の780*680にしておく
452
+
453
+ SetWindowSize(780, 680); // 最初は 640x480 にしておく ???
454
+
455
+
456
+
457
+ int Green = GetColor(0, 255, 0);
458
+
459
+
460
+
461
+ Str str1("あいうabc", 50); // 6文字を 50フレームごとに 1文字追加
462
+
463
+ // 全部で 300フレーム(5秒)
464
+
465
+ int t = 0;
466
+
467
+ while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
468
+
469
+ str1.drawString(100, 500, Green);
470
+
471
+ if (++t == 60 * 6) { t = 0; str1.reset(); } // 6秒ごとにリセット
472
+
473
+
474
+
475
+ DrawFormatString(300, 300, Green, "%d",pos);//これを追加した
402
476
 
403
477
  }
404
478
 
405
479
 
406
480
 
407
- void reset() { pos = count = 0; }
408
-
409
- };
410
-
411
-
412
-
413
- int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
414
-
415
- {
416
-
417
- SetFontSize(25); //サイズを64に変更 ???
418
-
419
- SetFontThickness(10); //太さを8に変更 ???
420
-
421
- ChangeFont("MS 明朝"); //種類をMS明朝に変更
422
-
423
- ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォント
424
-
425
-
426
-
427
- SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定
428
-
429
- ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
430
-
431
- if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
432
-
433
- SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定
434
-
435
-
436
-
437
- SetWindowSizeChangeEnableFlag(FALSE, FALSE);
438
-
439
-
440
-
441
- SetGraphMode(780, 680, 32); // 画面サイズは最大の780*680にしておく
442
-
443
- SetWindowSize(780, 680); // 最初は 640x480 にしておく ???
444
-
445
-
446
-
447
- int Green = GetColor(0, 255, 0);
448
-
449
-
450
-
451
- Str str1("あいうabc", 50); // 6文字を 50フレームごとに 1文字追加
452
-
453
- // 全部で 300フレーム(5秒)
454
-
455
- int t = 0;
456
-
457
- while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
458
-
459
- str1.drawString(100, 500, Green);
460
-
461
- if (++t == 60 * 6) { t = 0; str1.reset(); } // 6秒ごとにリセット
462
-
463
-
464
-
465
- DrawFormatString(300, 300, Green, "%d",pos);//これを追加した
466
-
467
- }
468
-
469
-
470
-
471
481
  DxLib_End(); // DXライブラリ終了処理
472
482
 
473
483
  return 0;

7

ふぁ

2019/11/20 22:25

投稿

R-ogiura
R-ogiura

スコア60

test CHANGED
File without changes
test CHANGED
@@ -232,7 +232,101 @@
232
232
 
233
233
  ```ここに言語を入力
234
234
 
235
+ #include <DxLib.h>
236
+
237
+
238
+
239
+ const char *str[3] = { "あいうabc", "0123456789", "ABCDEFG" };
240
+
241
+ int frame[3] = { 50, 30, 40 };
242
+
243
+ int pos[3];
244
+
245
+ int count[3];
246
+
247
+
248
+
249
+ void drawString(int i, int x, int y, int color)
250
+
251
+ {
252
+
253
+ char c = str[i][pos[i]];
254
+
255
+ if (count[i] == 0 && c != '\0')
256
+
257
+ pos[i] += IsDBCSLeadByte(c) ? 2 : 1;
258
+
259
+ if (++count[i] == frame[i]) count[i] = 0;
260
+
261
+ DrawFormatString(x, y, color, "%.*s", pos[i], str[i]);
262
+
263
+ }
264
+
265
+
266
+
267
+ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
268
+
269
+ {
270
+
271
+ SetFontSize(25); //サイズを64に変更 ???
272
+
273
+ SetFontThickness(10); //太さを8に変更 ???
274
+
275
+ ChangeFont("MS 明朝"); //種類をMS明朝に変更
276
+
277
+ ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォント
278
+
279
+
280
+
281
+ SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定
282
+
283
+ ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
284
+
285
+ if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
286
+
287
+ SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定
288
+
289
+
290
+
291
+ SetWindowSizeChangeEnableFlag(FALSE, FALSE);
292
+
293
+
294
+
295
+ int Green = GetColor(0, 255, 0);
296
+
297
+ int Yellow = GetColor(255, 255, 0);
298
+
299
+ int White = GetColor(255, 255, 255);
300
+
301
+
302
+
235
- const char*
303
+ int t = 0;
304
+
305
+ while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
306
+
307
+ drawString(0, 100, 500, Green);
308
+
309
+ drawString(1, 100, 530, Yellow);
310
+
311
+ drawString(2, 500, 530, White);
312
+
313
+ if (++t == 6*60) {
314
+
315
+ t = 0;
316
+
317
+ for (int i = 0; i < 3; i++) pos[i] = count[i] = 0;
318
+
319
+ }
320
+
321
+ }
322
+
323
+
324
+
325
+ DxLib_End(); // DXライブラリ終了処理
326
+
327
+ return 0;
328
+
329
+ }
236
330
 
237
331
  ```
238
332
 

6

編集後のクラスのプログラム

2019/11/19 23:41

投稿

R-ogiura
R-ogiura

スコア60

test CHANGED
File without changes
test CHANGED
@@ -270,7 +270,7 @@
270
270
 
271
271
 
272
272
 
273
- 編集 クラスのプログラム
273
+ 編集後のクラスのプログラム
274
274
 
275
275
  ```ここに言語を入力
276
276
 

5

2019/11/19 23:13

投稿

R-ogiura
R-ogiura

スコア60

test CHANGED
File without changes
test CHANGED
@@ -267,3 +267,117 @@
267
267
  const char* str[3] = { "あいうabc", "0123456789", "ABCDEFG" };
268
268
 
269
269
  ポインタを使用して右の三つの文字列を配列に入れるまではわかるのですが、**なぜポインタを使用して、constを付けたのかわかりません。**どうか理由を教えてください。
270
+
271
+
272
+
273
+ 編集 クラスのプログラム
274
+
275
+ ```ここに言語を入力
276
+
277
+ #include <DxLib.h>
278
+
279
+
280
+
281
+ class Str {
282
+
283
+ const char* str;
284
+
285
+ int frame;
286
+
287
+ int pos;
288
+
289
+ int count;
290
+
291
+ public:
292
+
293
+ int position() const { return pos; } // コレ追加
294
+
295
+ Str(const char* str, int frame)
296
+
297
+ : str(str), frame(frame), pos(0), count(0) {}
298
+
299
+
300
+
301
+ void drawString(int x, int y, int color) {
302
+
303
+ if (count == 0 && str[pos]) pos += 1 + IsDBCSLeadByte(str[pos]);
304
+
305
+ if (++count == frame) count = 0;
306
+
307
+ DrawFormatString(x, y, color, "%.*s", pos, str);
308
+
309
+ }
310
+
311
+
312
+
313
+ void reset() { pos = count = 0; }
314
+
315
+ };
316
+
317
+
318
+
319
+ int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
320
+
321
+ {
322
+
323
+ SetFontSize(25); //サイズを64に変更 ???
324
+
325
+ SetFontThickness(10); //太さを8に変更 ???
326
+
327
+ ChangeFont("MS 明朝"); //種類をMS明朝に変更
328
+
329
+ ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォント
330
+
331
+
332
+
333
+ SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定
334
+
335
+ ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
336
+
337
+ if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
338
+
339
+ SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定
340
+
341
+
342
+
343
+ SetWindowSizeChangeEnableFlag(FALSE, FALSE);
344
+
345
+
346
+
347
+ SetGraphMode(780, 680, 32); // 画面サイズは最大の780*680にしておく
348
+
349
+ SetWindowSize(780, 680); // 最初は 640x480 にしておく ???
350
+
351
+
352
+
353
+ int Green = GetColor(0, 255, 0);
354
+
355
+
356
+
357
+ Str str1("あいうabc", 50); // 6文字を 50フレームごとに 1文字追加
358
+
359
+ // 全部で 300フレーム(5秒)
360
+
361
+ int t = 0;
362
+
363
+ while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
364
+
365
+ str1.drawString(100, 500, Green);
366
+
367
+ if (++t == 60 * 6) { t = 0; str1.reset(); } // 6秒ごとにリセット
368
+
369
+
370
+
371
+ DrawFormatString(300, 300, Green, "%d",pos);//これを追加した
372
+
373
+ }
374
+
375
+
376
+
377
+ DxLib_End(); // DXライブラリ終了処理
378
+
379
+ return 0;
380
+
381
+ }
382
+
383
+ ```

4

へんsっゆ

2019/11/19 22:26

投稿

R-ogiura
R-ogiura

スコア60

test CHANGED
File without changes
test CHANGED
@@ -232,101 +232,7 @@
232
232
 
233
233
  ```ここに言語を入力
234
234
 
235
- #include <DxLib.h>
236
-
237
-
238
-
239
- const char *str[3] = { "あいうabc", "0123456789", "ABCDEFG" };
240
-
241
- int frame[3] = { 50, 30, 40 };
242
-
243
- int pos[3];
244
-
245
- int count[3];
246
-
247
-
248
-
249
- void drawString(int i, int x, int y, int color)
250
-
251
- {
252
-
253
- char c = str[i][pos[i]];
254
-
255
- if (count[i] == 0 && c != '\0')
256
-
257
- pos[i] += IsDBCSLeadByte(c) ? 2 : 1;
258
-
259
- if (++count[i] == frame[i]) count[i] = 0;
260
-
261
- DrawFormatString(x, y, color, "%.*s", pos[i], str[i]);
262
-
263
- }
264
-
265
-
266
-
267
- int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
268
-
269
- {
270
-
271
- SetFontSize(25); //サイズを64に変更 ???
272
-
273
- SetFontThickness(10); //太さを8に変更 ???
274
-
275
- ChangeFont("MS 明朝"); //種類をMS明朝に変更
276
-
277
- ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォント
278
-
279
-
280
-
281
- SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定
282
-
283
- ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
284
-
285
- if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
286
-
287
- SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定
288
-
289
-
290
-
291
- SetWindowSizeChangeEnableFlag(FALSE, FALSE);
292
-
293
-
294
-
295
- int Green = GetColor(0, 255, 0);
296
-
297
- int Yellow = GetColor(255, 255, 0);
298
-
299
- int White = GetColor(255, 255, 255);
300
-
301
-
302
-
303
- int t = 0;
235
+ const char*
304
-
305
- while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
306
-
307
- drawString(0, 100, 500, Green);
308
-
309
- drawString(1, 100, 530, Yellow);
310
-
311
- drawString(2, 500, 530, White);
312
-
313
- if (++t == 6*60) {
314
-
315
- t = 0;
316
-
317
- for (int i = 0; i < 3; i++) pos[i] = count[i] = 0;
318
-
319
- }
320
-
321
- }
322
-
323
-
324
-
325
- DxLib_End(); // DXライブラリ終了処理
326
-
327
- return 0;
328
-
329
- }
330
236
 
331
237
  ```
332
238
 

3

変数

2019/11/19 22:24

投稿

R-ogiura
R-ogiura

スコア60

test CHANGED
File without changes
test CHANGED
@@ -353,3 +353,11 @@
353
353
  の部分に関してわからないことがあります。
354
354
 
355
355
  最後の部分のs->pos, s->strの中身を表すために"%.*s"と書いていますが、なぜ"%.*s"のように書けるのでしょうか。
356
+
357
+
358
+
359
+ もう一つ、配列のプログラムに関して
360
+
361
+ const char* str[3] = { "あいうabc", "0123456789", "ABCDEFG" };
362
+
363
+ ポインタを使用して右の三つの文字列を配列に入れるまではわかるのですが、**なぜポインタを使用して、constを付けたのかわかりません。**どうか理由を教えてください。

2

へんしゅう

2019/11/19 04:50

投稿

R-ogiura
R-ogiura

スコア60

test CHANGED
File without changes
test CHANGED
@@ -329,3 +329,27 @@
329
329
  }
330
330
 
331
331
  ```
332
+
333
+
334
+
335
+ 編集
336
+
337
+ 構造体のプログラムに関してなのですが
338
+
339
+ ```ここに言語を入力
340
+
341
+ char c = s->str[s->pos];//ポインタsに入っているstr[pos]の文字のデータが一文字ずつcに入る
342
+
343
+ if (s->count == 0 && c != '\0')//その時にcountが0でかつcに入る文字が¥0(文字列の最後の部分\0)でない、すなわち文字ならば日本語一文字は2バイトなので、
344
+
345
+   s->pos += IsDBCSLeadByte(c) ? 2 : 1;//posに2バイトを足す、違う場合は¥0(\0)なので1バイト加える。(¥0(\0)は1バイトなので。)
346
+
347
+ if (++s->count == s->frame) s->count = 0;//一文字ずつ出力する間隔を処理する変数countと間隔の最大値を表すframeが等しくなったら、countを0にする
348
+
349
+ DrawFormatString(x, y, color, "%.*s", s->pos, s->str);//関数drawStringの引数として関数DrawFormatStringの引数を利用する
350
+
351
+ ```
352
+
353
+ の部分に関してわからないことがあります。
354
+
355
+ 最後の部分のs->pos, s->strの中身を表すために"%.*s"と書いていますが、なぜ"%.*s"のように書けるのでしょうか。

1

hennsuu

2019/11/19 04:29

投稿

R-ogiura
R-ogiura

スコア60

test CHANGED
@@ -1 +1 @@
1
- クラス、構造体、配列で作った関数の外で同じ変数を扱う方法。
1
+ クラス、構造体、配列で作った関数の外(while (){}の{}の中)で同じ変数を扱う方法。
test CHANGED
@@ -24,6 +24,8 @@
24
24
 
25
25
  関数の中以外で(while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen())の{}の中でpos[i]を使うにはどのように書けばいいでしょうか。他にも原因は同じですが、DrawFormatString(300, 300, Green, "%d", i);と書いてみたのですが、変数iが定義されていないとでてエラーになります。
26
26
 
27
+ こちらがクラスのプログラムです。
28
+
27
29
  ```
28
30
 
29
31
  #include <DxLib.h>