タイトルとゲームオーバ画面を表示するプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
free
記事: 29
登録日時: 5年前

タイトルとゲームオーバ画面を表示するプログラム

#1

投稿記事 by free » 5年前

こんにちは。freeです。
『14歳からはじめるC言語わくわくゲームプログラミング教室』という本で学習を進めているのですが、
それの125ページあたりまで進めてデバックしたところ、次のようなエラーが出てきてどのように対処すれば
いいのかわかりません。

コード:

#include <DxLib.h>

//グローバル変数
//時間計測用変数
int g_lasttime = 0;		//直前の計測時間
float g_fremetime = 0;		//1ループにかかった時間
enum GameState{
	GAME_TITLE,GAME_MAIN,
	GAME_CLEAR,GAME_OVER
};
GameState g_gamestate = GAME_TITLE;
int g_gametitleimg;		//タイトルイメージ
int g_heroimg;		//画像
float g_hx = 0, g_hy = 0;		//座標
//ボタン
BOOL g_akey_prev;		//直前のAボタンの状態
//フォント
int g_middlefont;		//中サイズのフォントハンドル

//関数プロトタイプ宣言
void DrawGameTitle();
void DrawGameMain();
void DrawGameClear();
void DrawGameOver();
BOOL IsAkeyTrigger(int key);

int WINAPI WinMain(HINSTANCE h1, HINSTANCE hP, LPSTR lPC, int nC){
	//ウィンドウモードにする
	ChangeWindowMode(TRUE);
	//ウィンドウサイズを変更する
	SetGraphMode(800, 600, 32);
	//DXライブラリ初期化
	if (DxLib_Init() == -1) return -1;
	
	//画像を読み込み
	g_gametitleimg = LoadGraph("media\\smp1_title.png");
	g_heroimg = LoadGraph("media\\smp1_chara01.png");
	g_middlefont = CreateFontToHandle("メイリオ", 42, -1, DX_FONTTYPE_ANTIALIASING);
	
	SetDrawScreen(DX_SCREEN_BACK);
	g_lasttime = GetNowCount(); //現在時刻の記録
	while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
		//1ループにかかった時間を計測
		int curtime = GetNowCount();
		g_fremetime = (float)(curtime - g_lasttime) / 1000.0f;
		g_lasttime = curtime;

		ClearDrawScreen();
		//画面描画関数に切り替え
		switch (g_gamestate)
		{
		case GAME_TITLE:
			DrawGameTitle();
			break;
		case GAME_MAIN:
			DrawGameMain();
			break;
		case GAME_CLEAR:
			DrawGameClear();
			break;
		case GAME_OVER:
			DrawGameOver();
			break;
		default:
			break;
		}
		ScreenFlip();
	}

	//待機
	WaitKey();
	//DXライブラリの終了処理
	DxLib_End();
	return 0;
}

//タイトル画面描画
void DrawGameTitle(){
	DrawBox(0, 0, 800, 600, GetColor(255, 255, 255), TRUE);
	DrawGraph(0, 0, g_gametitleimg, TRUE);
	//テキスト表示
	DrawStringToHandle(100, 400, "Zキーでゲームスタート",
		GetColor(255, 0, 255), g_middlefont);
	DrawStringToHandle(100, 460, "カーソルキーで上下左右に移動",
		GetColor(0, 0, 0), g_middlefont);
	//キーをチェックして画面を切り替え
	int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
	if (IsAkeyTrigger(key) == TRUE) g_gamestate = GAME_MAIN;
}

//ゲーム本編描画
void DrawGameMain(){
	//自キャラ移動
	int Key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
	float mv = 80.0f * g_fremetime; //移動量計算
	if (Key & PAD_INPUT_UP)		g_hy -= mv;
	if (Key & PAD_INPUT_DOWN)   g_hy += mv;
	if (Key & PAD_INPUT_LEFT)   g_hx -= mv;
	if (Key & PAD_INPUT_RIGHT)  g_hx += mv;
	DrawGraph(g_hx, g_hy, g_heroimg, TRUE);
}

//ゲームクリア画面描画
void DrawGameClear(){

}

//ゲームオーバー画面描画
void DrawGameOver(){

}

//キートリガー処理
BOOL IskeyTrigger(int key){
	if (key & PAD_INPUT_A){
		if (g_akey_prev == FALSE){
			g_akey_prev = TRUE;
			return TRUE;
		}
	}
	else{
		g_akey_prev = FALSE;
	}
	return FALSE;
}
※今現在は、タイトルを表示し、Zキーが押されたら本編に移り変わるようにプログラムする段階です。

エラー
1 error LNK2019: 未解決の外部シンボル "int __cdecl IsAkeyTrigger(int)" (?IsAkeyTrigger@@YAHH@Z) が関数 "void __cdecl DrawGameTitle(void)" (?DrawGameTitle@@YAXXZ) で参照されました。

2 error LNK1120: 1 件の未解決の外部参照

このエラーは、コードによるものでしょうか?(ちなみに、本書サンプルファイルの完成コードと照らし合わせましたが、どこも
間違ってませんでした)

アバター
usao
記事: 1584
登録日時: 7年前

Re: タイトルとゲームオーバ画面を表示するプログラム

#2

投稿記事 by usao » 5年前

「IsAkeyTrigger()という関数が呼ばれてるけど その関数の実装がねぇよ」 というエラーですね.
おそらく114行~の関数がそれなのでしょうが,名前が違っているのではないでしょうか.

free
記事: 29
登録日時: 5年前

Re: タイトルとゲームオーバ画面を表示するプログラム

#3

投稿記事 by free » 5年前

114行目のAという文字がひとつ抜けていました。
あのエラーはそういう意味だったんですね。
usaoさん、ありがとうございます!

閉鎖

“C言語何でも質問掲示板” へ戻る