どうにも解決できず〆切もかなり迫っているのでこちらにて質問させていただきます。
冬休みの課題でサンプルのシューティングゲームを指定通りに改造するものがありまして、
その指定の中で「2ステージ制にする」が出来そうだったので、やってみたのですが、
どうにも出来ませんでした。
改造前は、
drawGameTitle()でタイトル呼び出し→drawGameMain()でゲーム処理→drawGameClear()でゲームクリア処理 という感じで、
改造後は、
drawGameTitle()でタイトル呼び出し→drawGameMain()でゲーム処理→drawNextStageで次ステージの処理→drawGameMain2()で2ステージ目の処理→drawGameClear()でクリア処理
という感じで行きたいのですが、
drawNextStage()でdrawGameMain2()を呼びだそうとしてもdrawGameMain2()が未定義とエラーが出て先に進めません。
未定義と出たので、ヘッダファイル等を確認したのですが、drawGameMain2()は定義されていました。
main.cppの一部
void ShootGame::drawGameClear(){
jikicnt.move();
bakucnt.move();
GameFrame::drawGameClear();
SoundBox::play(4);
score = 0; //すこあ初期化
}
void ShootGame::drawGameOver(){
tekicnt.move(jikicnt.getx(), jikicnt.gety());
bakucnt.move();
GameFrame::drawGameOver();
}
void ShootGame::drawGameTitle(){
GameFrame::drawGameTitle();
SoundBox::playbgm(0);
}
void ShootGame::drawNextStage(){
GameFrame::drawGameMain2(); //←ここでエラーが出てしまいます
}
int WINAPI WinMain(HINSTANCE hI, HINSTANCE hp, LPSTR lpC, int nC){
ShootGame *sg = new ShootGame();
sg->doMainLoop(TRUE);
delete sg;
sg = NULL;
#ifndef __GAMEFRAME_H__
#define __GAMEFRAME_H__
#include <DxLib.h>
enum GAMESTATE{
GAME_TITLE = 1, GAME_MAIN, GAME_OVER, GAME_CLEAR,NEXT_STAGE
};
class GameFrame{
virtual void loadFiles()throw(int){}
virtual void initStage(){}
GAMESTATE gstate;
int starttime;
static unsigned int animcounter;
static float idouryou[20];
void setIdouHosei();
protected:
virtual void drawGameTitle();
virtual void drawGameMain();
virtual void drawGameMain2();
virtual void drawGameClear();
virtual void drawGameOver();
virtual void drawNextStage();
GAMESTATE setGameState(GAMESTATE state);
int largefont, smallfont;
public:
virtual ~GameFrame(){}
void doMainLoop(int);
static unsigned int getAnimCnt();
static float IdouHosei(int);
};
#endif
1ステージ目になるdrawGameMain()関数でゲームクリア時2ステージ目へ移行するために
setGameStateをNEXT_STAGEにしているのですが、こちらも未定義エラーと出ます。
同じようにNEXT_STAGEはヘッダファイルに記載しています。
main.cpp drawGameMain()
void ShootGame::drawGameMain(){
SoundBox::playbgm(1);
DrawGraph(0, 0, backjpg, false);
DrawFormatString(0, 0, GetColor(255, 255, 255), "Score:%d", score);
DrawFormatString(100, 0, GetColor(255, 255, 255), "Stage:1", score);//すこあひょうじ
jikicnt.move();
tekicnt.move(jikicnt.getx(), jikicnt.gety());
bakucnt.move();
atarihantei();
if (jikicnt.isGameOver() == true){
setGameState(GAME_OVER);
bakucnt.setBaku(1, jikicnt.getx(), jikicnt.gety());
}
if (tekicnt.isGameClear() == true){
setGameState(NEXT_STAGE); //←ここも未定義エラー
bakucnt.setBaku(2, tekicnt.getx(), tekicnt.gety());
}
が正しく定義されないのかがよくわかりません。
まだまだ未熟な者ですみません。解決法あればよろしくお願いします。
ソースファイルなどこちらに置いておきます。
http://file.immigrants.jp/c++/test_2015_01_05.zip