タイトル画面について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
E.T.

タイトル画面について

#1

投稿記事 by E.T. » 7年前

はじめて質問させていただきます。
C++は最近使い始めたばかりなのですが、タイトル画面の表示で困っています。
複数のサイト、サンプルを見ながら自分なりに組んだのですが、エラーが出てしまいます…

Main.cpp

コード:

#include "DxLib.h"

#include "Title.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{	
	//////////////////////////////
	//
	//  ウィンドウ関係の設定及び初期化処理
	//
	//////////////////////////////
	SetMainWindowText("");					// ウィンドウタイトル名の変更
	ChangeWindowMode(TRUE);									// ウィンドウモードに設定

	//DXライブラリ初期化処理
	if (DxLib_Init() == -1)
	{
		return -1;
	}

	//////////////////////////////
	//
	//  動作の処理
	//
	//////////////////////////////
	//タイトル画面の表示
	Title();
	return 0;												// ソフトの終了 
}
********************************************************************************************************************
Title.cpp

コード:

#include "DxLib.h"

void Title() {
	//////////////////////////////
	//
	//  変数の宣言
	//
	//////////////////////////////
	char	mKey[256];										// キーボード入力確認用
	int		key[256];										// キーボード入力確認用
	int		selectNum = 0;									// メニューの選択番号
	int		titleImage;										// タイトル画像格納用
	int		i = 0;											// ループ用

	// キーの入力状態を更新する
	int UpdateKey() {
		char tmpKey[256];	//現在のキーの入力状態を格納する
		GetHitKeyStateAll(tmpKey);	//全てのキーの入力状態を得る
		for (int i = 0; i < 256; i++) {
			if (tmpKey[i] != 0) {	//i番のキーコードに対応するキーが押されていたら
				Key[i]++;
			}
			else {
				Key[i] = 0;
			}
		}
		return 0;
	}

	//// メニュー項目の表示に必要な構造体を用意する
	typedef struct {
		int title_x_pos, title_y_pos;						// 座標格納用変数
		char title_entry[128];								// 項目名格納用変数
	} MenuElement_t;
	


	//////////////////////////////
	//
	//  変数の初期化
	//
	//////////////////////////////
	// メニュー項目要素を5つ作る
	MenuElement_t MenuElement[5]={
		{ 230, 250, "ゲームスタート" },
		{ 250, 280, "おまけ" },
		{ 250, 310, "ヘルプ" },
		{ 250, 340, "コンフィグ" },
		{ 250, 370, "ゲーム終了" },
	};



	//////////////////////////////
	//
	//  画像関連の読み込み
	//
	//////////////////////////////
	titleImage = LoadGraph("image/BG_TITLE.png");			// タイトル画像読み込み



	//////////////////////////////
	//
	//  タイトル画面の動作処理
	//
	//////////////////////////////
	while (ProcessMessage() == 0 && UpdateKey() == 0) {

		//タイトル画面の選択操作
		if (key[KEY_INPUT_UP] == 1) {						// UPキーが押された
			selectNum = (selectNum + 4) % 5;
		}
		
		if (key[KEY_INPUT_DOWN] == 1) {						// DOWNキーが押された
			selectNum = (selectNum + 1) % 5;
		}

		//選択によるメニュー項目の表示位置
		//  選択によるメニューの表示位置
		for (i = 0; i<5; i++) {
			if (i == selectNum) {
				MenuElement[i].title_x_pos = 230;			// 選択されているメニュー項目を20pxずらす
			}
			else {
				MenuElement[i].title_x_pos = 250;			// 選択されていないメニュー項目を揃える
			}
		}

		//タイトル画面をメモリへ描画
		ClearDrawScreen();									// 画面のクリア
		
		DrawGraph(0, 0, titleImage, TRUE);					// タイトル画像
		for (i = 0; i < 5; i++) {							// メニュー項目
			DrawFormatString(MenuElement[i].title_x_pos, MenuElement[i].title_y_pos, GetColor(255, 255, 255), MenuElement[i].title_entry);
		}

		ScreenFlip();										// 表画面に反映

	}

}
********************************************************************************************************************

Title.h

コード:

#pragma once

void Title();
********************************************************************************************************************
こんな感じのプログラムなのですが、Title.cppの

コード:


	// キーの入力状態を更新する
	int UpdateKey() {
		char tmpKey[256];	//現在のキーの入力状態を格納する
		GetHitKeyStateAll(tmpKey);	//全てのキーの入力状態を得る
		for (int i = 0; i < 256; i++) {
			if (tmpKey[i] != 0) {	//i番のキーコードに対応するキーが押されていたら
				Key[i]++;
			}
			else {
				Key[i] = 0;
			}
		}
		return 0;
	}
この部分でエラーが発生してしまいます。わかる方がいましたら、教えていただけないでしょうか。

E.T.

Re: タイトル画面について

#2

投稿記事 by E.T. » 7年前

追記

環境はOS : Windows 10
コンパイラ : Visual Studio 2015
で、
エラー内容は

重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
          expected a ';' 16

エラー C2601 'UpdateKey': local function definitions are illegal Test_App_1 c:\users\xxxxx\desktop\test_app_1\title.cpp 16

エラー C2065 'Key': undeclared identifier Test_App_1 c:\users\xxxxx\desktop\test_app_1\title.cpp 21

エラー C2065 'Key': undeclared identifier Test_App_1 c:\users\xxxxx\desktop\test_app_1\title.cpp 24


です。

hide

Re: タイトル画面について

#3

投稿記事 by hide » 7年前

C++は関数内で関数を定義することはできなかったと思いますので、その辺りで引っかかっているように見えます。
なので、まずはint UpdateKey() 及びそこから参照している変数を Title()の外側に出してみてください。
また、Key というものが定義されていないと書かれています。大文字小文字区別されますので修正しましょう。
その後、キー入力を管理するファイルを作りましょう。

E.T.

Re: タイトル画面について

#4

投稿記事 by E.T. » 7年前

>hide様
ありがとうございます!
大文字小文字をすべて合わせ、Title()の外にだしたら
うまくいきました。

またなにかあれば教えていただけると助かります。

閉鎖

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