前提・実現したい
「ライブラリではじめる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年の本なので古くなっているのが原因かもしれません。)
回答1件
あなたの回答
tips
プレビュー