質問編集履歴

3

変数

2019/08/22 02:48

投稿

carnage0216
carnage0216

スコア194

test CHANGED
File without changes
test CHANGED
@@ -597,3 +597,7 @@
597
597
 
598
598
 
599
599
  ```
600
+
601
+
602
+
603
+ jimbeさんのプログラム正しかったです。キャラの移動を50倍してみると正しく機能していることがわかりました。

2

編集

2019/08/22 02:48

投稿

carnage0216
carnage0216

スコア194

test CHANGED
File without changes
test CHANGED
@@ -545,3 +545,55 @@
545
545
  }
546
546
 
547
547
  ```
548
+
549
+ 編集
550
+
551
+ 入門書を見るなりしてjimbeさんから頂いたコードを正しく使おうとやっているのですが
552
+
553
+ どうもうまくいきません。
554
+
555
+ 条件文としては正しいと思うのですが
556
+
557
+ 右のキーが押される&右のマスが0という条件で
558
+
559
+ 写真[7]を表示するプログラムとして
560
+
561
+ ```
562
+
563
+ if (Key[KEY_INPUT_RIGHT] == 1)
564
+
565
+ {
566
+
567
+ if (idou[nx + 1][ny + 0] == 0)
568
+
569
+ { //移動しようとする先が空いていれば
570
+
571
+ //移動可能
572
+
573
+ nx = nx + 1; //移動
574
+
575
+ playerphoto = gh[7];
576
+
577
+ }
578
+
579
+
580
+
581
+ else {
582
+
583
+ // 移動不可能
584
+
585
+ playerphoto = gh[9];
586
+
587
+
588
+
589
+ }
590
+
591
+
592
+
593
+ }
594
+
595
+ と書いたんですが、うまくいきません。
596
+
597
+
598
+
599
+ ```

1

編集

2019/08/22 01:53

投稿

carnage0216
carnage0216

スコア194

test CHANGED
File without changes
test CHANGED
@@ -305,3 +305,243 @@
305
305
  }
306
306
 
307
307
  ```
308
+
309
+
310
+
311
+ 編集が遅くなりました。すいません。jimbeさんのプログラムをそのまま入れてみました。ですが、思うように動きませんでした。もしかしたら組み込む場所が違ったのかもしれません。
312
+
313
+ ```
314
+
315
+ #include "DxLib.h"
316
+
317
+
318
+
319
+
320
+
321
+
322
+
323
+ int Key[256]; // キーが押されているフレーム数を格納する
324
+
325
+
326
+
327
+ // キーの入力状態を更新する
328
+
329
+ int gpUpdateKey() {
330
+
331
+ char tmpKey[256]; // 現在のキーの入力状態を格納する
332
+
333
+ GetHitKeyStateAll(tmpKey); // 全てのキーの入力状態を得る
334
+
335
+ for (int i = 0; i < 256; i++) {
336
+
337
+ if (tmpKey[i] != 0) { // i番のキーコードに対応するキーが押されていたら
338
+
339
+ Key[i]++; // 加算
340
+
341
+ }
342
+
343
+ else { // 押されていなければ
344
+
345
+ Key[i] = 0; // 0にする
346
+
347
+ }
348
+
349
+ }
350
+
351
+ return 0;
352
+
353
+ }
354
+
355
+
356
+
357
+ // プログラムは WinMain から始まります
358
+
359
+ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
360
+
361
+ {
362
+
363
+ SetGraphMode(1600, 680, 32); // ウィンドウの大きさを指定
364
+
365
+ ChangeWindowMode(TRUE);
366
+
367
+
368
+
369
+ int playerphoto;
370
+
371
+ int nx=2, ny =2 ; // 最初のキャラのX座をdxとY座標をdyである。配列の真ん中の0を最初の座標としたため(2,2)となる
372
+
373
+
374
+
375
+ if (DxLib_Init() == -1) // DXライブラリ初期化処理
376
+
377
+ {
378
+
379
+ return -1; // エラーが起きたら直ちに終了
380
+
381
+ }
382
+
383
+
384
+
385
+
386
+
387
+
388
+
389
+ //1. 3x3マスの2次元配列
390
+
391
+ int idou[5][5] = {
392
+
393
+ {1,1,1,1,1 },
394
+
395
+ {1,0,0,0,1 },
396
+
397
+ {1,0,0,0,1 },
398
+
399
+ {1,0,0,0,1 },
400
+
401
+ {1,1,1,1,1 },
402
+
403
+ };
404
+
405
+
406
+
407
+
408
+
409
+ //DrawGraph(dx, dy, playerphoto, FALSE);
410
+
411
+
412
+
413
+
414
+
415
+
416
+
417
+
418
+
419
+
420
+
421
+ //グラフィックハンドル格納用配列
422
+
423
+ int gh[12];
424
+
425
+ LoadDivGraph("charall.png", 12, 3, 4, 49, 66, gh);//画像読み込み
426
+
427
+
428
+
429
+
430
+
431
+ SetDrawScreen(DX_SCREEN_BACK);
432
+
433
+ while (ScreenFlip() == 0 && ProcessMessage() == 0 && gpUpdateKey() == 0) {
434
+
435
+ DrawGraph(nx, ny, gh[5], FALSE);// プレイヤーの画像を描画
436
+
437
+
438
+
439
+ // カーソルキーの右が押されている
440
+
441
+
442
+
443
+ if (Key[KEY_INPUT_RIGHT] == 1)
444
+
445
+ {
446
+
447
+
448
+
449
+ //①if (idou[ny + 1][nx + 1]) {nx==0,}//紙を読む nx==0でidou[nx + 1]がidou[1]の時移動可能にして、その座標に移動する、nx==1でidou[nx + 1]がidou[2]の時移動不可能と
450
+
451
+ //①のidou[ny + 1][nx + 1]を利用してif文で書きたいが、idou[ny + 1][nx + 1]を単体でidou[ny + 1]として使えるか?
452
+
453
+ if (idou[nx + 1][ny + 0] == 0) { //移動しようとする先が空いていれば
454
+
455
+ //移動可能
456
+
457
+ nx = nx + 1; //移動
458
+
459
+ playerphoto = gh[7];
460
+
461
+ }
462
+
463
+ else {
464
+
465
+ // 移動不可能
466
+
467
+ playerphoto = gh[9];
468
+
469
+ }
470
+
471
+
472
+
473
+ if (Key[KEY_INPUT_LEFT] == 1)
474
+
475
+ {
476
+
477
+ nx = nx - 1;
478
+
479
+ playerphoto = gh[2];
480
+
481
+ }
482
+
483
+
484
+
485
+ if (Key[KEY_INPUT_UP] == 1)
486
+
487
+ {
488
+
489
+ ny = ny + 1;
490
+
491
+ playerphoto = gh[4];
492
+
493
+ }
494
+
495
+ if (Key[KEY_INPUT_DOWN] == 1)
496
+
497
+ {
498
+
499
+ ny = ny - 1;
500
+
501
+ playerphoto = gh[3];
502
+
503
+ }
504
+
505
+
506
+
507
+ if (nx == 0 && ny == 0)
508
+
509
+ {
510
+
511
+
512
+
513
+ playerphoto = gh[7];
514
+
515
+ }
516
+
517
+
518
+
519
+ ScreenFlip();
520
+
521
+ // 画面をクリア
522
+
523
+ ClearDrawScreen();
524
+
525
+
526
+
527
+ DrawGraph(nx, ny, playerphoto, FALSE);
528
+
529
+
530
+
531
+ }
532
+
533
+ }
534
+
535
+
536
+
537
+ DxLib_End(); // DXライブラリ使用の終了処理
538
+
539
+
540
+
541
+ return 0; // ソフトの終了
542
+
543
+
544
+
545
+ }
546
+
547
+ ```