質問編集履歴

4

編集

2020/06/20 17:51

投稿

KZK13
KZK13

スコア43

test CHANGED
File without changes
test CHANGED
@@ -460,4 +460,10 @@
460
460
 
461
461
  for文を使い編集してみました。3と入力するとどんな映画が好きなんですか?と出ますが、適当に14356と入力すると無反応です。14356をループして3を見つけたら反応すると思ったのですが。
462
462
 
463
- [編集したプログラム](https://pastebin.com/PvhwYjH0)
463
+ [2020/06/20に編集したプログラム](https://pastebin.com/PvhwYjH0)
464
+
465
+
466
+
467
+
468
+
469
+ [2020/06/21に編集したプログラム](https://pastebin.com/mjmsBXXN)

3

編集

2020/06/20 17:51

投稿

KZK13
KZK13

スコア43

test CHANGED
File without changes
test CHANGED
@@ -76,7 +76,7 @@
76
76
 
77
77
  int LEFTmark = 0;
78
78
 
79
- const char* str[2] = { "にちわ!","申し訳ございません! "};//ここで文字を直接書いてるので、この文字のバイト数が各posmozi[]に入るだけ
79
+ const char* str[2] = { "な映画が好きなんですか?","申し訳ございません! "};//ここで文字を直接書いてるので、この文字のバイト数が各posmozi[]に入るだけ
80
80
 
81
81
  int frame[2] = { 10,10};//次の一文字が出るまでのカウンタとして働いている、ここの数値を変えることで文字が一文字ずつ出るまでの間隔を設定できる。
82
82
 
@@ -114,7 +114,7 @@
114
114
 
115
115
 
116
116
 
117
- const char* str2[2] = { "にちわ!","申し訳ございません! " };//ここで文字を直接書いてるので、この文字のバイト数が各posmozi[]に入るだけ
117
+ const char* str2[2] = { "な映画が好きなんですか?","申し訳ございません! " };//ここで文字を直接書いてるので、この文字のバイト数が各posmozi[]に入るだけ
118
118
 
119
119
  int frame2[2] = { 10,10 };//次の一文字が出るまでのカウンタとして働いている、ここの数値を変えることで文字が一文字ずつ出るまでの間隔を設定できる。
120
120
 
@@ -256,7 +256,7 @@
256
256
 
257
257
  if (strcmp(input.c_str(), "映画") == 0) {
258
258
 
259
- message = "どんな映画が好きなんですか?";
259
+ // message = "どんな映画が好きなんですか?";
260
260
 
261
261
  konnnitiwasound = LoadSoundMem("line-girl1-konnichiha1.mp3");
262
262
 

2

編集

2020/06/20 08:30

投稿

KZK13
KZK13

スコア43

test CHANGED
File without changes
test CHANGED
@@ -114,6 +114,44 @@
114
114
 
115
115
 
116
116
 
117
+ const char* str2[2] = { "こんにちわ!","申し訳ございません! " };//ここで文字を直接書いてるので、この文字のバイト数が各posmozi[]に入るだけ
118
+
119
+ int frame2[2] = { 10,10 };//次の一文字が出るまでのカウンタとして働いている、ここの数値を変えることで文字が一文字ずつ出るまでの間隔を設定できる。
120
+
121
+ int posmozi2[20];//文字のバイト数が入る箱を表している。
122
+
123
+ int countS2[2];//次の文字が出るまでのカウントするためのもの
124
+
125
+ int z2;//関数drawString外でも使えるように外にも定義を書いた。zの数値は関係なく、文字列が入った数列がif文により同じ変数zの時にframe[z]と同じになるまで+1されていったり、+2バイトor+1バイトされていくため、
126
+
127
+ //文字が一文字ずつ入っていく、なんでzの変数に値を入れて動かす必要がないのだ。ちなみにfor (z = 0; z < 3; ++z)で書いてしまうとキーAを押した際のif文に関係なく関数drawStringの最初のzどこかに値が入っただけで繰り返しを開始してしまうため、今回のように同じ変数zの時にフレームを利用して描画するようにした。
128
+
129
+ char c2 = str[z2][posmozi[z2]];//関数drawString外でも使えるように外にも定義を書いた。
130
+
131
+
132
+
133
+ void drawString2(int z2, int x, int y, int color)
134
+
135
+ {
136
+
137
+ c = str2[z2][posmozi2[z2]];//posmozi[z2]
138
+
139
+ if (countS2[z2] == 0 && c2 != '\0')
140
+
141
+ posmozi2[z2] += IsDBCSLeadByte(c2) ? 2 : 1;
142
+
143
+ if (++countS2[z2] == frame2[z2]) countS2[z2] = 0;
144
+
145
+ DrawFormatString(x, y, color, "%.*s", posmozi2[z2], str2[z2]);
146
+
147
+ DrawFormatString(300, 400, (0, 0, 255), "countS2[0]は%d", countS2[0]);
148
+
149
+ }
150
+
151
+
152
+
153
+
154
+
117
155
  int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
118
156
 
119
157
  {

1

編集編集

2020/06/20 08:29

投稿

KZK13
KZK13

スコア43

test CHANGED
File without changes
test CHANGED
@@ -114,344 +114,312 @@
114
114
 
115
115
 
116
116
 
117
- const char* str2[2] = { "こんにちわ!","申し訳ございません! " };//ここで文字を直接書いてるので、この文字のバイト数が各posmozi[]に入るだけ
118
-
119
- int frame2[2] = { 10,10 };//次の一文字が出るまでのカウンタとして働いている、ここの数値を変えることで文字が一文字ずつ出るまでの間隔を設定できる。
117
+ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
120
-
121
- int posmozi2[20];//文字のバイト数が入る箱を表している。
122
-
123
- int countS2[2];//次の文字が出るまでのカウントするためのもの
124
-
125
- int z2;//関数drawString外でも使えるように外にも定義を書いた。zの数値は関係なく、文字列が入った数列がif文により同じ変数zの時にframe[z]と同じになるまで+1されていったり、+2バイトor+1バイトされていくため、
126
-
127
- //文字が一文字ずつ入っていく、なんでzの変数に値を入れて動かす必要がないのだ。ちなみにfor (z = 0; z < 3; ++z)で書いてしまうとキーAを押した際のif文に関係なく関数drawStringの最初のzどこかに値が入っただけで繰り返しを開始してしまうため、今回のように同じ変数zの時にフレームを利用して描画するようにした。
128
-
129
- char c2 = str[z2][posmozi[z2]];//関数drawString外でも使えるように外にも定義を書いた。
130
-
131
-
132
-
133
- void drawString2(int z2, int x, int y, int color)
134
118
 
135
119
  {
136
120
 
137
- c = str2[z2][posmozi2[z2]];//posmozi[z2]
138
-
139
- if (countS2[z2] == 0 && c2 != '\0')
140
-
141
- posmozi2[z2] += IsDBCSLeadByte(c2) ? 2 : 1;
142
-
143
- if (++countS2[z2] == frame2[z2]) countS2[z2] = 0;
144
-
145
- DrawFormatString(x, y, color, "%.*s", posmozi2[z2], str2[z2]);
146
-
147
- DrawFormatString(300, 400, (0, 0, 255), "countS2[0]は%d", countS2[0]);
121
+
122
+
123
+
124
+
125
+ SetGraphMode(1500, 780, 32); // ウィンドウの大きさを指定
126
+
127
+ ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
128
+
129
+ // DXライブラリの初期化
130
+
131
+ if (DxLib_Init() == -1) return -1;
132
+
133
+ SetFontSize(42); //サイズを42に変更
134
+
135
+ // 描画先を裏にする
136
+
137
+ SetDrawScreen(DX_SCREEN_BACK);
138
+
139
+
140
+
141
+ // キー入力ハンドルを作る(キャンセルなし全角文字有り数値入力じゃなし)
142
+
143
+ //MakeKeyInputは開発者の方が一回呼び出せば使えるように作ったのでループ内には書かない。
144
+
145
+ InputHandle = MakeKeyInput(50, FALSE, FALSE, FALSE);
146
+
147
+
148
+
149
+ // 作成したキー入力ハンドルをアクティブにする
150
+
151
+ SetActiveKeyInput(InputHandle);
152
+
153
+
154
+
155
+ // キー入力終了待ちループ
156
+
157
+ // (ProcessMessageをループごとに行う)
158
+
159
+
160
+
161
+ while (ProcessMessage() == 0)
162
+
163
+ {
164
+
165
+
166
+
167
+ // 画面の初期化
168
+
169
+ ClearDrawScreen();
170
+
171
+
172
+
173
+
174
+
175
+ //まずは描画する部分から作る。
176
+
177
+ // 入力モードを描画
178
+
179
+ DrawKeyInputModeString(640, 480);
180
+
181
+ // 入力途中の文字列を描画
182
+
183
+ DrawKeyInputString(0, 0, InputHandle);
184
+
185
+
186
+
187
+
188
+
189
+ //その後にif文での分岐を考える。
190
+
191
+ // 入力が終了している場合は終了
192
+
193
+ //ループ内とは言えエンターキー一回でCheckKeyInputが呼べればいい。
194
+
195
+ //エンターキーが押されていないとき?の部分。
196
+
197
+ if (CheckKeyInput(InputHandle) != 0) {
198
+
199
+
200
+
201
+ // 入力された文字列を取得
202
+
203
+ char buffer[256];//
204
+
205
+
206
+
207
+ // 入力された文字列を取得
208
+
209
+ GetKeyInputString(buffer, InputHandle);
210
+
211
+ input = buffer;
212
+
213
+
214
+
215
+
216
+
217
+ DrawString(0, 0, input.c_str(), GetColor(255, 255, 255));
218
+
219
+ if (strcmp(input.c_str(), "映画") == 0) {
220
+
221
+ message = "どんな映画が好きなんですか?";
222
+
223
+ konnnitiwasound = LoadSoundMem("line-girl1-konnichiha1.mp3");
224
+
225
+ PlaySoundMem(konnnitiwasound, DX_PLAYTYPE_BACK);
226
+
227
+
228
+
229
+ ++mozicount;
230
+
231
+
232
+
233
+ sitaidou = sitaidou + 50;
234
+
235
+ if (mozicount > 0 && mozicount < 2) {
236
+
237
+ z = 0;
238
+
239
+ }
240
+
241
+ if (mozicount > 1 && mozicount < 3) {
242
+
243
+ z2 = 0;
244
+
245
+ }
246
+
247
+ if (mozicount > 2 && mozicount < 4) {
248
+
249
+ z2 = 0;
250
+
251
+ }
252
+
253
+ messageA = message;
254
+
255
+ }
256
+
257
+ else {
258
+
259
+ message = "申し訳ございません!";
260
+
261
+ situreisimasitasound = LoadSoundMem("line-girl1-moushiwakegozamasen1.mp3");
262
+
263
+ PlaySoundMem(situreisimasitasound, DX_PLAYTYPE_BACK);
264
+
265
+ ++mozicount;
266
+
267
+
268
+
269
+ sitaidou = sitaidou + 50;
270
+
271
+ if (mozicount > 0 && mozicount < 2) {
272
+
273
+ z = 1;
274
+
275
+ }
276
+
277
+ if (mozicount > 1 && mozicount < 3) {
278
+
279
+ z2 = 1;
280
+
281
+ LEFTmark = 12;
282
+
283
+ }
284
+
285
+ if (mozicount > 2 && mozicount < 4) {
286
+
287
+ z2 = 1;
288
+
289
+ }
290
+
291
+ }
292
+
293
+ //duration = 1;
294
+
295
+ // 再度インプットハンドルをアクティブにする
296
+
297
+ SetActiveKeyInput(InputHandle);
298
+
299
+ // 入力文字列を初期化する
300
+
301
+ SetKeyInputString("", InputHandle);
302
+
303
+
304
+
305
+ }
306
+
307
+
308
+
309
+ // DrawFormatString(100, 150, GetColor(255, 255, 0), "ProcessMessage()は%d,modoruは%d", ProcessMessage(), modoru);
310
+
311
+ DrawFormatString(0, 150, GetColor(255, 255, 0), "zは%d,z2は%d,konnnitiwaは%d,sitaidouは%d,mozicountは%d",z, z2,konnnitiwa, sitaidou, mozicount);
312
+
313
+ DrawFormatString(0, 250, GetColor(255, 255, 0), "mozicount2は%d,input.c_str()は%d, LEFTmarkは%d", mozicount2, input.c_str(), LEFTmark);
314
+
315
+
316
+
317
+ //新しい言葉の処理
318
+
319
+ if (rireki == 0) {
320
+
321
+ //文字カウントが1の時
322
+
323
+ if (mozicount > 0 && mozicount < 2) {
324
+
325
+ drawString(z, 10, 100, GetColor(5, 255, 255));
326
+
327
+
328
+
329
+ }
330
+
331
+ }
332
+
333
+ if (rireki == 0) {
334
+
335
+ //文字カウントが2の時
336
+
337
+ if (mozicount > 1 && mozicount < 3) {
338
+
339
+ drawString2(z2, 10, 100, GetColor(255, 255, 255));
340
+
341
+
342
+
343
+ drawString(z, 10, 100+50, GetColor(5, 255, 255));
344
+
345
+
346
+
347
+ }
348
+
349
+ }
350
+
351
+ //文字カウントが3の時
352
+
353
+ if (mozicount > 2&&mozicount < 4) {
354
+
355
+ drawString2(z2, 10, 150+50, GetColor(255, 255, 255));
356
+
357
+ rireki = 1;
358
+
359
+
360
+
361
+ }
362
+
363
+ // 裏画面の内容を表画面に反映させる
364
+
365
+ ScreenFlip();
366
+
367
+
368
+
369
+
370
+
371
+
372
+
373
+
374
+
375
+
376
+
377
+ }
378
+
379
+
380
+
381
+ // 用済みのインプットハンドルを削除する
382
+
383
+ DeleteKeyInput(InputHandle);
384
+
385
+
386
+
387
+ // 画面の初期化
388
+
389
+ ClearDrawScreen();
390
+
391
+
392
+
393
+ // 裏画面の内容を表画面に反映させる
394
+
395
+ ScreenFlip();
396
+
397
+
398
+
399
+ // キー入力待ち
400
+
401
+ // WaitKey();
402
+
403
+
404
+
405
+ //ループないやループから出た後で何かしらの問題が発生したら終了する。
406
+
407
+ // DXライブラリの使用終了
408
+
409
+ DxLib_End();
410
+
411
+
412
+
413
+ // 終了
414
+
415
+ return 0;
148
416
 
149
417
  }
150
418
 
151
-
152
-
153
-
154
-
155
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
156
-
157
- {
158
-
159
-
160
-
161
-
162
-
163
- SetGraphMode(1500, 780, 32); // ウィンドウの大きさを指定
164
-
165
- ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
166
-
167
- // DXライブラリの初期化
168
-
169
- if (DxLib_Init() == -1) return -1;
170
-
171
- SetFontSize(42); //サイズを42に変更
172
-
173
- // 描画先を裏にする
174
-
175
- SetDrawScreen(DX_SCREEN_BACK);
176
-
177
-
178
-
179
- // キー入力ハンドルを作る(キャンセルなし全角文字有り数値入力じゃなし)
180
-
181
- //MakeKeyInputは開発者の方が一回呼び出せば使えるように作ったのでループ内には書かない。
182
-
183
- InputHandle = MakeKeyInput(50, FALSE, FALSE, FALSE);
184
-
185
-
186
-
187
- // 作成したキー入力ハンドルをアクティブにする
188
-
189
- SetActiveKeyInput(InputHandle);
190
-
191
-
192
-
193
- // キー入力終了待ちループ
194
-
195
- // (ProcessMessageをループごとに行う)
196
-
197
-
198
-
199
- while (ProcessMessage() == 0)
200
-
201
- {
202
-
203
-
204
-
205
- // 画面の初期化
206
-
207
- ClearDrawScreen();
208
-
209
-
210
-
211
-
212
-
213
- //まずは描画する部分から作る。
214
-
215
- // 入力モードを描画
216
-
217
- DrawKeyInputModeString(640, 480);
218
-
219
- // 入力途中の文字列を描画
220
-
221
- DrawKeyInputString(0, 0, InputHandle);
222
-
223
-
224
-
225
-
226
-
227
- //その後にif文での分岐を考える。
228
-
229
- // 入力が終了している場合は終了
230
-
231
- //ループ内とは言えエンターキー一回でCheckKeyInputが呼べればいい。
232
-
233
- //エンターキーが押されていないとき?の部分。
234
-
235
- if (CheckKeyInput(InputHandle) != 0) {
236
-
237
-
238
-
239
- // 入力された文字列を取得
240
-
241
- char buffer[256];//
242
-
243
-
244
-
245
- // 入力された文字列を取得
246
-
247
- GetKeyInputString(buffer, InputHandle);
248
-
249
- input = buffer;
250
-
251
-
252
-
253
-
254
-
255
- DrawString(0, 0, input.c_str(), GetColor(255, 255, 255));
256
-
257
- if (strcmp(input.c_str(), "映画") == 0) {
258
-
259
- message = "どんな映画が好きなんですか?";
260
-
261
- konnnitiwasound = LoadSoundMem("line-girl1-konnichiha1.mp3");
262
-
263
- PlaySoundMem(konnnitiwasound, DX_PLAYTYPE_BACK);
264
-
265
-
266
-
267
- ++mozicount;
268
-
269
-
270
-
271
- sitaidou = sitaidou + 50;
272
-
273
- if (mozicount > 0 && mozicount < 2) {
274
-
275
- z = 0;
276
-
277
- }
278
-
279
- if (mozicount > 1 && mozicount < 3) {
280
-
281
- z2 = 0;
282
-
283
- }
284
-
285
- if (mozicount > 2 && mozicount < 4) {
286
-
287
- z2 = 0;
288
-
289
- }
290
-
291
- messageA = message;
292
-
293
- }
294
-
295
- else {
296
-
297
- message = "申し訳ございません!";
298
-
299
- situreisimasitasound = LoadSoundMem("line-girl1-moushiwakegozamasen1.mp3");
300
-
301
- PlaySoundMem(situreisimasitasound, DX_PLAYTYPE_BACK);
302
-
303
- ++mozicount;
304
-
305
-
306
-
307
- sitaidou = sitaidou + 50;
308
-
309
- if (mozicount > 0 && mozicount < 2) {
310
-
311
- z = 1;
312
-
313
- }
314
-
315
- if (mozicount > 1 && mozicount < 3) {
316
-
317
- z2 = 1;
318
-
319
- LEFTmark = 12;
320
-
321
- }
322
-
323
- if (mozicount > 2 && mozicount < 4) {
324
-
325
- z2 = 1;
326
-
327
- }
328
-
329
- }
330
-
331
- //duration = 1;
332
-
333
- // 再度インプットハンドルをアクティブにする
334
-
335
- SetActiveKeyInput(InputHandle);
336
-
337
- // 入力文字列を初期化する
338
-
339
- SetKeyInputString("", InputHandle);
340
-
341
-
342
-
343
- }
344
-
345
-
346
-
347
- // DrawFormatString(100, 150, GetColor(255, 255, 0), "ProcessMessage()は%d,modoruは%d", ProcessMessage(), modoru);
348
-
349
- DrawFormatString(0, 150, GetColor(255, 255, 0), "zは%d,z2は%d,konnnitiwaは%d,sitaidouは%d,mozicountは%d",z, z2,konnnitiwa, sitaidou, mozicount);
350
-
351
- DrawFormatString(0, 250, GetColor(255, 255, 0), "mozicount2は%d,input.c_str()は%d, LEFTmarkは%d", mozicount2, input.c_str(), LEFTmark);
352
-
353
-
354
-
355
- //新しい言葉の処理
356
-
357
- if (rireki == 0) {
358
-
359
- //文字カウントが1の時
360
-
361
- if (mozicount > 0 && mozicount < 2) {
362
-
363
- drawString(z, 10, 100, GetColor(5, 255, 255));
364
-
365
-
366
-
367
- }
368
-
369
- }
370
-
371
- if (rireki == 0) {
372
-
373
- //文字カウントが2の時
374
-
375
- if (mozicount > 1 && mozicount < 3) {
376
-
377
- drawString2(z2, 10, 100, GetColor(255, 255, 255));
378
-
379
-
380
-
381
- drawString(z, 10, 100+50, GetColor(5, 255, 255));
382
-
383
-
384
-
385
- }
386
-
387
- }
388
-
389
- //文字カウントが3の時
390
-
391
- if (mozicount > 2&&mozicount < 4) {
392
-
393
- drawString2(z2, 10, 150+50, GetColor(255, 255, 255));
394
-
395
- rireki = 1;
396
-
397
-
398
-
399
- }
400
-
401
- // 裏画面の内容を表画面に反映させる
402
-
403
- ScreenFlip();
404
-
405
-
406
-
407
-
408
-
409
-
410
-
411
-
412
-
413
-
414
-
415
- }
416
-
417
-
418
-
419
- // 用済みのインプットハンドルを削除する
420
-
421
- DeleteKeyInput(InputHandle);
422
-
423
-
424
-
425
- // 画面の初期化
426
-
427
- ClearDrawScreen();
428
-
429
-
430
-
431
- // 裏画面の内容を表画面に反映させる
432
-
433
- ScreenFlip();
434
-
435
-
436
-
437
- // キー入力待ち
438
-
439
- // WaitKey();
440
-
441
-
442
-
443
- //ループないやループから出た後で何かしらの問題が発生したら終了する。
444
-
445
- // DXライブラリの使用終了
446
-
447
- DxLib_End();
448
-
449
-
450
-
451
- // 終了
452
-
453
- return 0;
454
-
455
- }
456
-
457
419
  ```
420
+
421
+
422
+
423
+ for文を使い編集してみました。3と入力するとどんな映画が好きなんですか?と出ますが、適当に14356と入力すると無反応です。14356をループして3を見つけたら反応すると思ったのですが。
424
+
425
+ [編集したプログラム](https://pastebin.com/PvhwYjH0)