前提・実現したいこと
Visual Studio上でDXライブラリを使用してアクションゲームを作っています。
エラーなく動いていたファイルを分割し、新たに当たり判定を実装したところ「ビルド エラーが発生しました。続行して、最後に成功したビルドを実行しますか?」というダイアログが出て以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー C2065 'player': 定義されていない識別子です。 Action_Game Collision.cpp 8 エラー C2065 'player': 定義されていない識別子です。 Action_Game Collision.cpp 9 エラー C2065 'enemy': 定義されていない識別子です。 Action_Game Collision.cpp 10 エラー C2065 'enemy': 定義されていない識別子です。 Action_Game Collision.cpp 11 エラー C2065 'Font': 定義されていない識別子です。 Action_Game Collision.cpp 17 エラー C2065 'player': 定義されていない識別子です。 Action_Game Collision.cpp 24 エラー C2065 'player': 定義されていない識別子です。 Action_Game Collision.cpp 25 エラー C2065 'enemy': 定義されていない識別子です。 Action_Game Collision.cpp 26 エラー C2065 'enemy': 定義されていない識別子です。 Action_Game Collision.cpp 27 エラー C2065 'Font': 定義されていない識別子です。 Action_Game CCollision.cpp 33 エラー C2065 'Key': 定義されていない識別子です。 Action_Game Player.cpp 49 エラー C2065 'Key': 定義されていない識別子です。 Action_Game Player.cpp 57 エラー C2065 'Key': 定義されていない識別子です。 Action_Game Player.cpp 82 エラー C2065 'Key': 定義されていない識別子です。 Action_Game Player.cpp 86
該当のソースコード
C++
1//main.cpp 2 3#include "DxLib.h" 4#include "Player.h" 5#include "Enemy.h" 6#include "Collision.h" 7 8//初期ウィンドウサイズは640x480 9 10//キー押下フレーム数 11char Key[256]; 12 13int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 14 LPSTR lpCmdLine, int nCmdShow) { 15 if (ChangeWindowMode(TRUE) != 0) { 16 return 0; 17 } 18 if (DxLib_Init() != 0) { 19 return 0; 20 } 21 if (SetDrawScreen(DX_SCREEN_BACK) != 0) { 22 return 0; 23 } 24 if (SetBackgroundColor(0, 255, 0) != 0) { 25 return 0; 26 } 27 28 //音楽ファイルロード 29 int Handle_bgm = LoadSoundMem("./Audio/famipop3.mp3"); 30 31 //音楽再生 32 PlaySoundMem(Handle_bgm, DX_PLAYTYPE_LOOP); 33 34 Player_Initialize(); 35 36 Enemy_Initialize(); 37 38 while (1) { 39 if (ScreenFlip() != 0) { 40 break; 41 } 42 if (ProcessMessage() != 0) { 43 break; 44 } 45 if (ClearDrawScreen() != 0) { 46 break; 47 } 48 if (GetHitKeyStateAll(Key) != 0) { 49 break; 50 } 51 52 Player_Update(); 53 54 Enemy_Update(); 55 56 CheckHitWidth(); 57 58 CheckHitHeight(); 59 60 Player_Draw(); 61 62 Enemy_Draw(); 63 } 64 65 Player_Finalize(); 66 67 Enemy_Finalize(); 68 69 //DXライブラリ終了処理 70 DxLib_End(); 71 72 return 0; 73} 74 75//-------------------------------------------------- 76 77//Player.cpp 78 79#include "DxLib.h" 80#include "Player.h" 81 82//プレイヤー画像用 83typedef struct { 84 int x, y, y_prev, y_temp, flag, fflag, img; 85} player_t; 86player_t player; 87int Handle_p[16]; 88bool jflag = false; 89bool sflag = false; 90 91//フォントデータロード 92int Font = CreateFontToHandle("メイリオ", 32, 4, DX_FONTTYPE_ANTIALIASING_EDGE); 93 94//初期化 95void Player_Initialize() { 96 //画像ファイルロード 97 LoadDivGraph("./Image/player.png", 16, 4, 4, 64, 64, Handle_p); 98 99 //プレイヤー座標 100 player.x = 64 / 2; 101 player.y = 480 - (64 / 2); 102 player.y_prev = 0; 103 player.y_temp = 0; 104 105 //フラグ 106 player.flag = 0; 107 player.fflag = 0; 108} 109 110//計算 111void Player_Update() { 112 //プレイヤー移動制御 113 if (player.x < (64 / 2)) { 114 player.x = (64 / 2); 115 } 116 if (player.x + (64 / 2) > 640) { 117 player.x = 640 - (64 / 2); 118 } 119 if (player.y < (64 / 2)) { 120 player.y = (64 / 2); 121 } 122 if (player.y + (64 / 2) > 480) { 123 player.y = 480 - (64 / 2); 124 } 125 126 //下キーが押下された場合 127 if (Key[KEY_INPUT_DOWN] == 1) { 128 //しゃがみフラグ 129 sflag = true; 130 } else { 131 sflag = false; 132 } 133 134 //上キーが押下され現在のy座標が480 - (64 / 2)でしゃがみフラグが立っていない場合 135 if (Key[KEY_INPUT_UP] == 1 && player.y == 480 - (64 / 2) && sflag == false) { 136 //ジャンプフラグ 137 jflag = true; 138 //現在のy座標を前回分に保存 139 player.y_prev = player.y; 140 //現在のy座標を24減らす 141 player.y = player.y - 24; 142 } 143 144 //ジャンプフラグが立っている場合 145 if (jflag == true) { 146 //現在のy座標を一時分に保存 147 player.y_temp = player.y; 148 //現在y += (現在y - 前回y) + 1 149 player.y += (player.y - player.y_prev) + 1; 150 //一時保存のy座標を前回分に保存 151 player.y_prev = player.y_temp; 152 //現在のy座標が480 - (64 / 2)の場合 153 if (player.y == 480 - (64 / 2)) { 154 //ジャンプフラグを元に戻す 155 jflag = false; 156 } 157 } 158 159 //右キーが押下された場合 160 if (Key[KEY_INPUT_RIGHT] == 1) { 161 //右フラグ 162 player.flag = 1; 163 //左キーが押下された場合 164 } else if (Key[KEY_INPUT_LEFT] == 1) { 165 //左フラグ 166 player.flag = 2; 167 //押下されなかった場合 168 } else { 169 //停止フラグ 170 player.flag = 0; 171 } 172 173 if (player.flag == 2) { 174 if (sflag == true) { 175 player.img = Handle_p[13]; 176 } else { 177 //xを減らす 178 player.x--; 179 player.fflag = 2; 180 if (jflag == true) { 181 player.img = Handle_p[12]; 182 } else { 183 //x座標に合わせた画像を指定 184 player.img = Handle_p[(player.x % 64) / 16 + 8]; 185 } 186 } 187 } else if (player.flag == 1) { 188 if (sflag == true) { 189 player.img = Handle_p[5]; 190 } else { 191 //xを増やす 192 player.x++; 193 player.fflag = 1; 194 if (jflag == true) { 195 player.img = Handle_p[4]; 196 } else { 197 //x座標に合わせた画像を指定 198 player.img = Handle_p[(player.x % 64) / 16]; 199 } 200 } 201 } else if (player.fflag == 2) { 202 if (sflag == true) { 203 player.img = Handle_p[13]; 204 } else if (jflag == true) { 205 player.img = Handle_p[12]; 206 } else { 207 player.img = Handle_p[8]; 208 } 209 } else { 210 if (sflag == true) { 211 player.img = Handle_p[5]; 212 } else if (jflag == true) { 213 player.img = Handle_p[4]; 214 } else { 215 player.img = Handle_p[0]; 216 } 217 } 218} 219 220//描画 221void Player_Draw() { 222 //タイトル描画 223 DrawStringToHandle(20, 20, "アクションゲーム", GetColor(0, 0, 0), Font, GetColor(255, 255, 255)); 224 225 //画像描画 226 DrawGraph(player.x - (64 / 2), player.y - (64 / 2), player.img, TRUE); 227} 228 229//終了処理 230void Player_Finalize() { 231 DeleteGraph(player.img); 232} 233 234//-------------------------------------------------- 235 236//Player.h 237 238#ifndef DEF_PLAYER_H 239 240#define DEF_PLAYER_H 241 242//初期化 243void Player_Initialize(); 244 245//計算 246void Player_Update(); 247 248//描画 249void Player_Draw(); 250 251//終了処理 252void Player_Finalize(); 253 254#endif 255 256//-------------------------------------------------- 257 258//Enemy.cpp 259 260#include "DxLib.h" 261#include "Enemy.h" 262 263//エネミー画像用 264typedef struct { 265 int x, y, img; 266} enemy_t; 267enemy_t enemy; 268int Handle_e[16]; 269 270//初期化 271void Enemy_Initialize() { 272 //画像ファイルロード 273 LoadDivGraph("./Image/enemy.png", 16, 4, 4, 64, 64, Handle_e); 274 275 //エネミー座標 276 enemy.x = 640 - (64 / 2); 277 enemy.y = 480 - (64 / 2); 278} 279 280//計算 281void Enemy_Update() { 282 //エネミー移動制御 283 if (enemy.y < (64 / 2)) { 284 enemy.y = (64 / 2); 285 } 286 if (enemy.y + (64 / 2) > 480) { 287 enemy.y = 480 - (64 / 2); 288 } 289 290 //xを減らす 291 enemy.x--; 292 //x座標に合わせた画像を指定 293 enemy.img = Handle_e[(enemy.x % 64) / 16]; 294} 295 296//描画 297void Enemy_Draw() { 298 //画像描画 299 enemy.img = Handle_e[0]; 300 DrawGraph(enemy.x - (64 / 2), enemy.y - (64 / 2), enemy.img, TRUE); 301} 302 303//終了処理 304void Enemy_Finalize() { 305 DeleteGraph(enemy.img); 306} 307 308//-------------------------------------------------- 309 310//Enemy.h 311 312#ifndef DEF_ENEMY_H 313 314#define DEF_ENEMY_H 315 316//初期化 317void Enemy_Initialize(); 318 319//計算 320void Enemy_Update(); 321 322//描画 323void Enemy_Draw(); 324 325//終了処理 326void Enemy_Finalize(); 327 328#endif 329 330//-------------------------------------------------- 331 332//Collision.cpp 333 334#include "DxLib.h" 335#include "Player.h" 336#include "Enemy.h" 337#include "Collision.h" 338 339//横の当たり判定 340int CheckHitWidth() { 341 int L1 = player.x; 342 int R1 = player.x + 64; 343 int L2 = enemy.x; 344 int R2 = enemy.x + 64; 345 if (R1 < L2 || R2 < L1) { 346 //当たっていない 347 return 0; 348 } else { 349 //当たっている 350 DrawStringToHandle(20, 400, "Game Over", GetColor(0, 0, 0), Font, GetColor(255, 255, 255)); 351 return 1; 352 } 353} 354 355//縦の当たり判定 356int CheckHitHeight() { 357 int U1 = player.y; 358 int D1 = player.y + 64; 359 int U2 = enemy.y; 360 int D2 = enemy.y + 64; 361 if (D1 < U2 || D2 < U1) { 362 //当たっていない 363 return 0; 364 } else { 365 //当たっている 366 DrawStringToHandle(20, 400, "Game Clear", GetColor(0, 0, 0), Font, GetColor(255, 255, 255)); 367 return 2; 368 } 369} 370 371//-------------------------------------------------- 372 373//Collision.h 374 375#ifndef DEF_COLLISION_H 376 377#define DEF_COLLISION_H 378 379//横の当たり判定 380int CheckHitWidth(); 381 382//縦の当たり判定 383int CheckHitHeight(); 384 385#endif
試したこと
「#include」に何らかの問題があるのかと思い文を見直してみましたがおかしいと思う部分は発見できず、インターネット上で調べても解決に役立ちそうなページは発見できませんでした。
補足情報(FW/ツールのバージョンなど)
Microsoft Visual C++ 2019
DXライブラリ Windows版 Visual C++用 Ver3.22c
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/12 11:41
2021/04/13 01:22 編集
2021/04/13 01:26
2021/04/13 01:40
2021/04/13 01:47
2021/04/13 11:29
2021/04/13 11:42
2021/04/14 01:11
2021/04/14 01:24
2021/04/14 01:28
2021/04/14 04:28