https://bituse.info/game/shot/9
こちらのサイトを参考にシュミレーションゲームを制作しようとしています
それで、敵を追加する項目でg_count;という拡張子が見当たらないとエラーが出てしまったでサイトをよく見ると
『まず、最初に説明しておかなければならないのは、変数g_countです。
これはゲームが開始してから何ループしたのかを表す変数です。
これはmain.cppでグローバル変数として定義し、define.hでextern宣言して共有できるようにしています。』
と説明されていたので
main.cpp に int g_count; と追加し
define.h に extern int g_count; と追加したところ見たことないエラーが出てしまい色々試したのですが解決できません。
どなたか分かる方助けてほしいです。
追記
あれからc言語の基礎など学んだりしたのですが未だに進めていません。
どなたか解決方法をお願いしたいです。
エラーメッセージ
1>------ ビルド開始: プロジェクト: gamegame, 構成: Release Win32 ------ 1>back.cpp 1>control.cpp 1>enemy.cpp 1>main.cpp 1>pch.cpp 1>player.cpp 1>control.obj : error LNK2001: 外部シンボル "int g_count" (?g_count@@3HA) は未解決です 1>C:\Users\rikua\source\repos\gamegame\Release\gamegame.exe : fatal error LNK1120: 1 件の未解決の外部参照 1>プロジェクト "gamegame.vcxproj" のビルドが終了しました -- 失敗。 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
main.cpp
#include "pch.h" #include "control.h" //キー取得用配列 char key[256]; // プログラムは WinMain から始まります int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode(TRUE); if( DxLib_Init() == -1 ) // DXライブラリ初期化処理 { return -1 ; // エラーが起きたら直ちに終了 } CONTROL *control = new CONTROL; while(ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll(key)==0){ control->All(); } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }
define.h
#include <windows.h> //プレイヤーの歩くスピード #define PLAYER_SPEED 5 #define MARGIN 10 //メッセージボックス #define MSG(m) {\ MessageBox(NULL,m,"メッセージ",MB_OK);} //extern宣言してkey配列にどこからでもアクセスできるようにする extern char key[256]; extern int g_count; #pragma once #define PSHOT_NUM 20 #define PSHOT_SPEED 14 struct SHOT { bool flag;//弾が発射中かどうか double x;//x座標 double y;//y座標 int gh;//グラフィックハンドル int width, height;//画像の幅と高さ };
enemy.cpp
#include "pch.h" #include "enemy.h" ENEMY::ENEMY() { LoadDivGraph("enemy.png", 3, 1, 3, 27, 25, gh); width = 27; height = 25; x = 50; y = -50; in_time = 180; stop_time = 300; out_time = 420; count = 0; endflag = false; } void ENEMY::Move() { //出てきてから止まる時間までの間なら下に移動 if (in_time < g_count && g_count < stop_time) { y += 2; //帰還時間を過ぎたら戻る。 } else if (g_count > out_time) { y -= 2; if (y < -40) { endflag = true; } } } void ENEMY::Draw() { int temp; if (!endflag) { temp = count % 40 / 10; if (temp == 3) temp = 1; DrawGraph(x, y, gh[temp], TRUE); } } bool ENEMY::All() { Move(); Draw(); ++count; return endflag; }
enemy.h
#include "pch.h" class ENEMY { private: double x, y; int gh[3]; int width, height; int in_time, stop_time, out_time; int count; bool endflag; public: bool All(); void Move(); void Draw(); ENEMY(); };
control.cpp
#include "pch.h" #include "control.h" CONTROL::CONTROL() { //プレイヤークラスの生成 player = new PLAYER; back = new BACK; } CONTROL::~CONTROL() { //プレイヤークラスの解放 delete player; } void CONTROL::All() { //描画領域を指定 SetDrawArea(MARGIN, MARGIN, MARGIN + 380, MARGIN + 460); back->All(); player->All(); if (enemy != NULL) { if (enemy->All()) { delete enemy; enemy = NULL; } } ++g_count; } コード
回答1件
あなたの回答
tips
プレビュー