実現したいこと
環境はWindows10、visualstudio2022、DXライブラリです。
ここに実現したいことを箇条書きで書いてください。
- ▲▲機能を動作するようにする
前提
ここに質問の内容を詳しく書いてください。
(例)
TypeScriptで●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
以下の部分で赤い下線部が出ており、
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー C2059 構文エラー: '定数' chatGPTgame2023 C:\Users\Desktop\chatGPTgame2023\main.cpp 15
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー (アクティブ) E0040 識別子が必要です chatGPTgame2023 C:\Users\Desktop\chatGPTgame2023\main.cpp 15
の二つのエラーが出る。
// プレイヤーの移動速度 const int MOVE_SPEED = 5;
該当のソースコード
[https://91.gigafile.nu/0507-b2450a2a1401b6f73eeed7cb12d80e587](url)
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
<編集>
以下のプログラムになぜか同じプログラムが二回書かれていたためエラーが起きていました。
#include "DxLib.h" #include "enemy.h" #include <math.h> // 敵キャラクターの画像 int g_enemy_image; // 攻撃の画像 int g_attack_image; // 敵キャラクターの座標 int g_enemy_x, g_enemy_y; // 攻撃しているかどうかを表すフラグ int g_is_attacking; // 敵キャラクターの画像を読み込む関数 void LoadEnemyImage() { g_enemy_image = LoadGraph("enemy.png"); } // 攻撃の画像を読み込む関数 void LoadAttackImage() { g_attack_image = LoadGraph("attack.png"); } // 敵キャラクターの位置を更新する関数 void UpdateEnemyPosition(int* player_x, int* player_y) { // プレイヤーまでの距離を計算 double distance = sqrt(pow(g_enemy_x - *player_x, 2) + pow(g_enemy_y - *player_y, 2)); if (distance > ATTACK_DISTANCE) { // プレイヤーに近づく if (*player_x > g_enemy_x) { g_enemy_x += MOVE_SPEED; } else { g_enemy_x -= MOVE_SPEED; } if (*player_y > g_enemy_y) { g_enemy_y += MOVE_SPEED; } else { g_enemy_y -= MOVE_SPEED; } g_is_attacking = 0; } else { // プレイヤーに攻撃 g_is_attacking = 1; AttackPlayer(*player_x, *player_y); } } // 敵キャラクターを描画する関数 void DrawEnemy() { if (g_is_attacking) { DrawGraph(g_enemy_x - 32, g_enemy_y - 32, g_attack_image, TRUE); } else { DrawGraph(g_enemy_x - 32, g_enemy_y - 32, g_enemy_image, TRUE); } } // 攻撃を行う関数 void AttackPlayer(int player_x, int player_y) { // プレイヤーにダメージを与える処理を書く } // 敵キャラクターの画像を解放する関数 void DeleteEnemyImage() { DeleteGraph(g_enemy_image); } // 攻撃の画像を解放する関数 void DeleteAttackImage() { DeleteGraph(g_attack_image); } #include "DxLib.h" #include "enemy.h" #include <math.h> // 敵キャラクターの画像 int g_enemy_image; // 攻撃の画像 int g_attack_image; // 敵キャラクターの座標 int g_enemy_x, g_enemy_y; // 攻撃しているかどうかを表すフラグ int g_is_attacking; // 敵キャラクターの画像を読み込む関数 void LoadEnemyImage() { g_enemy_image = LoadGraph("enemy.png"); } // 攻撃の画像を読み込む関数 void LoadAttackImage() { g_attack_image = LoadGraph("attack.png"); } // 敵キャラクターの位置を更新する関数 void UpdateEnemyPosition(int* player_x, int* player_y) { // プレイヤーまでの距離を計算 double distance = sqrt(pow(g_enemy_x - *player_x, 2) + pow(g_enemy_y - *player_y, 2)); if (distance > ATTACK_DISTANCE) { // プレイヤーに近づく if (*player_x > g_enemy_x) { g_enemy_x += MOVE_SPEED; } else { g_enemy_x -= MOVE_SPEED; } if (*player_y > g_enemy_y) { g_enemy_y += MOVE_SPEED; } else { g_enemy_y -= MOVE_SPEED; } g_is_attacking = 0; } else { // プレイヤーに攻撃 g_is_attacking = 1; AttackPlayer(*player_x, *player_y); } } // 敵キャラクターを描画する関数 void DrawEnemy() { if (g_is_attacking) { DrawGraph(g_enemy_x - 32, g_enemy_y - 32, g_attack_image, TRUE); } else { DrawGraph(g_enemy_x - 32, g_enemy_y - 32, g_enemy_image, TRUE); } } // 攻撃を行う関数 void AttackPlayer(int player_x, int player_y) { // プレイヤーにダメージを与える処理を書く } // 敵キャラクターの画像を解放する関数 void DeleteEnemyImage() { DeleteGraph(g_enemy_image); } // 攻撃の画像を解放する関数 void DeleteAttackImage() { DeleteGraph(g_attack_image); }
正しくは
#include "DxLib.h" #include "enemy.h" #include <math.h> // 敵キャラクターの画像 int g_enemy_image; // 攻撃の画像 int g_attack_image; // 敵キャラクターの座標 int g_enemy_x, g_enemy_y; // 攻撃しているかどうかを表すフラグ int g_is_attacking; // 敵キャラクターの画像を読み込む関数 void LoadEnemyImage() { g_enemy_image = LoadGraph("enemy.png"); } // 攻撃の画像を読み込む関数 void LoadAttackImage() { g_attack_image = LoadGraph("attack.png"); } // 敵キャラクターの位置を更新する関数 void UpdateEnemyPosition(int* player_x, int* player_y) { // プレイヤーまでの距離を計算 double distance = sqrt(pow(g_enemy_x - *player_x, 2) + pow(g_enemy_y - *player_y, 2)); if (distance > ATTACK_DISTANCE) { // プレイヤーに近づく if (*player_x > g_enemy_x) { g_enemy_x += MOVE_SPEED; } else { g_enemy_x -= MOVE_SPEED; } if (*player_y > g_enemy_y) { g_enemy_y += MOVE_SPEED; } else { g_enemy_y -= MOVE_SPEED; } g_is_attacking = 0; } else { // プレイヤーに攻撃 g_is_attacking = 1; AttackPlayer(*player_x, *player_y); } } // 敵キャラクターを描画する関数 void DrawEnemy() { if (g_is_attacking) { DrawGraph(g_enemy_x - 32, g_enemy_y - 32, g_attack_image, TRUE); } else { DrawGraph(g_enemy_x - 32, g_enemy_y - 32, g_enemy_image, TRUE); } } // 攻撃を行う関数 void AttackPlayer(int player_x, int player_y) { // プレイヤーにダメージを与える処理を書く } // 敵キャラクターの画像を解放する関数 void DeleteEnemyImage() { DeleteGraph(g_enemy_image); } // 攻撃の画像を解放する関数 void DeleteAttackImage() { DeleteGraph(g_attack_image); }
であります。
またmain.cppは以下のように書くことでビルドできました。
#include <stdio.h> #include <math.h> #include "DxLib.h" #include "enemy.h" #include "controller.h" #define SCREEN_WIDTH 640 #define SCREEN_HEIGHT 480 #define CHAR_SIZE 32 // プレイヤーの座標 int player_x, player_y; // プレイヤーの移動速度 const int move_spped = 5; // プレイヤーの位置を更新する関数 void update_player_position() { // キーボードの状態を取得 int key_up = CheckHitKey(KEY_INPUT_UP); int key_down = CheckHitKey(KEY_INPUT_DOWN); int key_left = CheckHitKey(KEY_INPUT_LEFT); int key_right = CheckHitKey(KEY_INPUT_RIGHT); // キーボードの状態に応じてプレイヤーを移動 if (key_up) { player_y -= MOVE_SPEED; } if (key_down) { player_y += MOVE_SPEED; } if (key_left) { player_x -= MOVE_SPEED; } if (key_right) { player_x += MOVE_SPEED; } } int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int nCmdShow) { // 初期化 SetGraphMode(1470, 780, 32); // ウィンドウの大きさを指定 ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用 SetWindowSizeExtendRate(1.0f); if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理 SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定 if (DxLib_Init() == -1) { return -1; } SetDrawScreen(DX_SCREEN_BACK); // 画像の読み込み player_x = SCREEN_WIDTH / 2; player_y = SCREEN_HEIGHT / 2; LoadEnemyImage(); LoadAttackImage(); // メインループ while (ProcessMessage() == 0) { // 画面をクリア ClearDrawScreen(); // プレイヤーの更新 update_player_position(); DrawBox(player_x - CHAR_SIZE / 2, player_y - CHAR_SIZE / 2, player_x + CHAR_SIZE / 2, player_y + CHAR_SIZE / 2, GetColor(255, 255, 255), TRUE); // 敵キャラクターの更新 UpdateEnemyPosition(&player_x, &player_y); DrawEnemy(); // 画面を反転 ScreenFlip(); } // 終了処理 DeleteEnemyImage(); DeleteAttackImage(); DxLib_End(); return 0; }
以下はそのままで大丈夫でした。
enemy.h
#ifndef ENEMY_H_INCLUDED #define ENEMY_H_INCLUDED #define MOVE_SPEED 2 // 敵キャラクターの移動速度 #define ATTACK_DISTANCE 100 // プレイヤーに攻撃する距離 // 敵キャラクターの画像を読み込む関数 void LoadEnemyImage(); // 攻撃の画像を読み込む関数 void LoadAttackImage(); // 敵キャラクターの位置を更新する関数 void UpdateEnemyPosition(int* player_x, int* player_y); // 敵キャラクターを描画する関数 void DrawEnemy(); // 攻撃を行う関数 void AttackPlayer(int player_x, int player_y); // 敵キャラクターの画像を解放する関数 void DeleteEnemyImage(); // 攻撃の画像を解放する関数 void DeleteAttackImage(); #endif // ENEMY_H_INCLUDED
controllr.h
#include "DxLib.h" #ifndef DEF_KEY_H //二重include防止 #define DEF_KEY_H int Key[256]; int gpUpdateKey() { char tmpKey[256]; GetHitKeyStateAll(tmpKey); for (int i = 0; i < 256; i++) (tmpKey[i] == 0) ? (Key[i] = 0) : Key[i]++; return 0; } int Pad[32]; //ジョイパッドのボタンのための関数 int gpUpdatePad() { int padStat = GetJoypadInputState(DX_INPUT_KEY_PAD1); //入力状態を padStat に格納 for (int i = 0; i < 28; i++) { //ボタン28個分ループ if (padStat & (1 << i)) { //ボタンiの入力フラグが立っていたら Pad[i]++; //加算 } else { //入力がなければ Pad[i] = 0; //0 にする } } return 0; } int PrevPadState = 0; //適切な初期値は0かなきっと int CurrPadState = 0; //適切な初期値は0かなきっと void UpdatePadState() { //「前回」情報を更新 PrevPadState = CurrPadState; //「今回」情報を更新 CurrPadState = GetJoypadInputState(DX_INPUT_KEY_PAD1); //引数はこれで良いのかな? } #endif
。
こちらの質問が複数のユーザーから「調査したこと・試したことが記載されていない質問」という指摘を受けました。

あなたの回答
tips
プレビュー