質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

Q&A

解決済

1回答

584閲覧

DXライブラリでRPGを作りたいが、描画がうまくできない

hoge_hoge_PG

総合スコア15

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

0グッド

0クリップ

投稿2018/12/22 13:53

前提・実現したい

「ライブラリではじめるC言語ゲーム開発」という本を購入しました。

サンプルコードをそのまま入力してビルドをしたら、
画面表示がおかしくなりました。

何が原因なのか知りたいです。

環境は
windows10でvisualstadio2017を使用しています。
DXライブラリも使用しています。

発生している問題・エラーメッセージ

ビルドは正常終了してエラーメッセージはありませんが、 画面上に描画されるマップチップが一列目のみ表示されて、 それ以降がブラックアウトしていまいます。 キャラクターは問題なく動きます。

該当のソースコード

C++

1 2//main.cpp 3 4#define _CRT_SECURE_NO_WARNINGS 5 6#include "DxLib.h" 7#include "main.h" 8#include "map.h" 9#include "move.h" 10#include "event.h" 11#include "fileload.h" 12 13// プログラムは WinMain から始まります 14int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { 15 16 ChangeWindowMode(TRUE); 17 SetDrawMode(DX_SCREEN_BACK); 18 if (DxLib_Init() == -1) { 19 return -1; 20 } 21 22 fileload(); 23 24 while (ScreenFlip() == 0 && ProcessMessage() == 0 && GetHitKeyStateAll(key) == 0) { 25 ClearDrawScreen(); 26 27 28 draw_map(); 29 30 31 DrawGraph(s_pos_x * 32, s_pos_y * 32, chara[0].chip[s_vector], TRUE); 32 33 if (key[KEY_INPUT_RETURN] == 1) { 34 while (CheckHitKey(KEY_INPUT_RETURN) == 1); 35 event_check(); 36 } 37 else { 38 39 if (key[KEY_INPUT_UP] == 1) { 40 if (s_pos_y > 0) { 41 s_pos_y -= 1; 42 vector_up(); 43 } 44 else { 45 vector_up(); 46 map_check(); 47 } 48 } 49 50 if (key[KEY_INPUT_DOWN] == 1) { 51 if (s_pos_y < 14) { 52 s_pos_y += 1; 53 vector_down(); 54 } 55 else { 56 vector_down(); 57 map_check(); 58 } 59 } 60 61 if (key[KEY_INPUT_RIGHT] == 1) { 62 if (s_pos_x < 19) { 63 s_pos_x += 1; 64 vector_right(); 65 } 66 else { 67 vector_right(); 68 map_check(); 69 } 70 } 71 72 if (key[KEY_INPUT_LEFT] == 1) { 73 if (s_pos_x > 0) { 74 s_pos_x -= 1; 75 vector_left(); 76 } 77 else { 78 vector_left(); 79 map_check(); 80 } 81 } 82 83 WaitTimer(50); 84 85 } 86 87 if (key[KEY_INPUT_ESCAPE] == 1) { 88 89 DxLib_End(); 90 91 return 0; 92 } 93 } 94} 95 96 97//main.h 98 99 100int map[2][15][20]; 101int now_map = 1; 102 103int map_chip[2][330]; 104 105int s_pos_x = 0; 106int s_pos_y = 0; 107 108int s_vector = 1; 109 110int vector_check = 0; 111 112int i, j; 113 114char key[256]; 115int chara_all = 32; 116struct chara1 { 117 118 int no; 119 int chara_no; 120 int pos_x; 121 int pos_y; 122 int map; 123 int battle; 124 int eve_flag; 125 int bgm; 126 int face_no; 127 int chip_vector; 128 bool flag; 129 int kihatu; 130 int talk_count; 131 char kaiwa[3][30]; 132}; 133static struct chara1 chara_eve[32] = { -1 }; 134 135struct chara2 { 136 char name[10]; 137 int face[8]; 138 int chip[12]; 139}; 140 141static struct chara2 chara[32] = { -1 }; 142 143 144//fileload.h 145 146 147void fileload(void) { 148 int f, g, h; 149 150 LoadDivGraph("map/field2.png", 5, 1, 5, 32, 32, map_chip[0]); 151 LoadDivGraph("map/mono.png", 328, 8, 38, 32, 32, map_chip[1]); 152 LoadDivGraph("chara/shuzinkou.png", 12, 3, 4, 32, 32, chara[0].chip); 153 LoadDivGraph("chara/murabitoA.png", 12, 3, 4, 32, 32, chara[4].chip); 154 155 156 FILE *fp; 157 if ((fp = fopen("map.txt", "r")) == NULL) 158 printf("ファイルをオープンできません。\n"); 159 else { 160 f = 0; 161 g = 0; 162 while (fscanf(fp, "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d", &map[f][g][0], &map[f][g][1], 163 &map[f][g][2], &map[f][g][3], &map[f][g][4], &map[f][g][5], &map[f][g][6], &map[f][g][7], &map[f][g][8], 164 &map[f][g][9], &map[f][g][10], &map[f][g][11], &map[f][g][12], &map[f][g][13], &map[f][g][14], &map[f][g][15], 165 &map[f][g][16], &map[f][g][17], &map[f][g][18], &map[f][g][19]) == 20) { 166 g++; 167 if (g == 15) { 168 f = f + 1; 169 g = 0; 170 } 171 } 172 fclose(fp); 173 174 if ((fp = fopen("event.txt", "r")) == NULL) 175 printf("ファイルをオープンできません。\n"); 176 177 else { 178 h = 0; 179 while (fscanf(fp, " %d%d%d%d%d%d%d%d%d%d%d%d%d %s%s%s", &chara_eve[h].no, &chara_eve[h].chara_no, &chara_eve[h].pos_x, 180 &chara_eve[h].pos_y, &chara_eve[h].map, &chara_eve[h].battle, &chara_eve[h].eve_flag, &chara_eve[h].bgm, &chara_eve[h].face_no, 181 &chara_eve[h].chip_vector, &chara_eve[h].flag, &chara_eve[h].kihatu, &chara_eve[h].talk_count, &chara_eve[h].kaiwa[0], 182 &chara_eve[h].kaiwa[1], &chara_eve[h].kaiwa[2]) == 16) { 183 h = h + 1; 184 } 185 fclose(fp); 186 } 187 } 188} 189 190 191//map.h 192 193 194void draw_map(void) { 195 for (i = 0; i < 15; i++) { 196 for (j = 0; j < 20; j++) { 197 198 DrawGraph(j * 32, i * 32, map_chip[1][map[now_map - 1][i][j]], FALSE); 199 } 200 for (i = 0; i < chara_all; i++) { 201 if (chara_eve[i].map == now_map && chara_eve[i].flag == FALSE) { 202 DrawGraph(chara_eve[i].pos_x * 32, chara_eve[i].pos_y * 32, 203 chara[chara_eve[i].chara_no].chip[chara_eve[i].chip_vector], TRUE); 204 } 205 } 206 } 207 } 208 209void map_check(void) { 210 if (now_map == 1 && s_pos_y == 14) { 211 if (s_vector >= 0 && s_vector <= 2) { 212 now_map = 2; 213 s_pos_y = 0; 214 } 215 } 216 if (now_map == 2 && s_pos_y == 0) { 217 if (s_vector >= 9 && s_vector <= 11) { 218 now_map = 1; 219 s_pos_y = 14; 220 } 221 } 222} 223 224 225// event.h 226 227 228int s_vector_check(int); 229 230void event_check(void) { 231 232 int vector = s_vector_check(s_vector); 233} 234 235int s_vector_check(int vector) { 236 237 if (vector >= 0 && vector <= 2) 238 return(0); 239 240 else if (vector <= 5) 241 return(1); 242 243 else if (vector <= 8) 244 return(2); 245 246 else if (vector <= 11) 247 return(3); 248 249 else 250 return(4); 251 252} 253 254 255// move.h 256 257 258void vector_up(void) { 259 260 if (s_vector < 9 || s_vector > 11) { 261 262 s_vector = 9; 263 vector_check = 1; 264 } 265 else { 266 s_vector = s_vector + vector_check; 267 268 if (s_vector == 11) { 269 vector_check = -1; 270 } 271 else if (s_vector == 9) { 272 vector_check = 1; 273 } 274 } 275} 276 277void vector_down(void) { 278 279 if (s_vector < 0 || s_vector > 2) { 280 281 s_vector = 0; 282 vector_check = 1; 283 } 284 else { 285 s_vector = s_vector + vector_check; 286 287 if (s_vector == 2) { 288 vector_check = -1; 289 } 290 else if (s_vector == 0) { 291 vector_check = 1; 292 } 293 } 294} 295 296void vector_right(void) { 297 298 if (s_vector < 6 || s_vector > 8) { 299 300 s_vector = 6; 301 vector_check = 1; 302 } 303 else { 304 s_vector = s_vector + vector_check; 305 306 if (s_vector == 8) { 307 vector_check = -1; 308 } 309 else if (s_vector == 6) { 310 vector_check = 1; 311 } 312 } 313} 314void vector_left(void) { 315 316 if (s_vector < 3 || s_vector > 5) { 317 318 s_vector = 3; 319 vector_check = 1; 320 } 321 else { 322 s_vector = s_vector + vector_check; 323 324 if (s_vector == 5) { 325 vector_check = -1; 326 } 327 else if (s_vector == 3) { 328 vector_check = 1; 329 } 330 } 331} 332 333 334//map.txt 335 336 3370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3380 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3390 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3400 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3410 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3420 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3430 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3440 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3450 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3460 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3470 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3480 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3490 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3510 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3521 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3531 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3541 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3551 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3561 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3571 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3581 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3591 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3601 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3611 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3621 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3631 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3641 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3651 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3661 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 367 368 369//event.txt 370 371 3720 4 5 3 1 -1 1 -1 0 1 1 0 3 こんにちわ! ここは はじまり 373 374 375 376

試したこと

そもそもですが、本に書いてある通りに書くと、ビルドでエラーになりました。
定義されていない配列をscanfのところで使っていたので、変数を定義しました。
他にも足りていない変数を定義たり、その他のエラーメッセージを潰していったので、
エラーメッセージは出なくなりました。

また、本に記載されていた完成版のサンプルコードがあるのですが、
そちらを実行してみると、タイトル画面でフリーズしてしまいます。
(2014年の本なので古くなっているのが原因かもしれません。)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Bull

2018/12/23 01:27

DXライブラリのバージョンは幾つですか? Visaul Studio 2017 ですと、あまり古いものはダメだったような。 最新のバージョンは 3.19f です。
hoge_hoge_PG

2018/12/23 01:30

返答ありがとうございます。 Ver 3.19dでした。
Bull

2018/12/23 01:52

それなら大丈夫そうですね。 "map/mono.png" を読み込むときの分割総数 (328) と横分割 (8)、縦分割 (38)、が合ってないようですが、何か特別な意図がありますか?
hoge_hoge_PG

2018/12/23 01:59

普通にミスです。修正しました。分割総数(304)に修正しました。 ビルドし直しましたが、ビルド後のブラックアウトは変わりません。
Bull

2018/12/23 02:38

後確認するのは、マップチップが確実に読み込まれているか、マップデータが間違いなく読み込まれているかくらいですが、実際にプログラムをデバッグしてみない事には何とも。
hoge_hoge_PG

2018/12/23 04:36

マップチップ自体は読み込まれているのを確認していますが、 map.hあたりがやはりおかしいのですかね。
guest

回答1

0

ベストアンサー

適当に画像を作って実行してみました

C++

1//map.h 2 3 4void draw_map(void) { 5 for (i = 0; i < 15; i++) { 6 for (j = 0; j < 20; j++) { 7 8 DrawGraph(j * 32, i * 32, map_chip[1][map[now_map - 1][i][j]], FALSE); 9 } 10 for (i = 0; i < chara_all; i++) { 11 if (chara_eve[i].map == now_map && chara_eve[i].flag == FALSE) { 12 DrawGraph(chara_eve[i].pos_x * 32, chara_eve[i].pos_y * 32, 13 chara[chara_eve[i].chara_no].chip[chara_eve[i].chip_vector], TRUE); 14 } 15 } 16 } 17 }

外側のループ変数 'i' を内側でも使ってますね。
これを例えば 'j' に変えれば、とりあえずマップの表示はできました。

投稿2018/12/23 04:38

Bull

総合スコア986

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoge_hoge_PG

2018/12/23 04:57

ご指摘いただき、ありがとうございました。 グローバル変数とローカル変数が重複するという初歩的なミスをしていました。 サンプルコードを信用しすぎて、基礎的な原則を見落としていたようです。 これでやっと前に進めます。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問