Project:Project_SH 第4回「画面モードとキー入力」

アバター
藍沢 冬月
記事: 0
登録日時: 14年前
住所: 京都
連絡を取る:

Project:Project_SH 第4回「画面モードとキー入力」

投稿記事 by 藍沢 冬月 » 14年前

前回までで、なんとかメインループが完成しました。
では、今回はいよいよ実際に画面に描画処理を行ってみましょう。

◆ファイル構成
/Project
  Project_SH.sln …VC++の場合のみ
  /codeフォルダ   …ここにプログラムを入れる
   Main.cpp       …これがメインのファイル
   GameFrame.cpp  …GameFrameファイル
   GameFrame.h    …GameFrameファイルのヘッダ
  /includeフォルダ …ここにヘッダとかを入れる
   Globalpack.h    …主なヘッダファイル
  /dataフォルダ    …ここにデータを入れる

CODE:

// -------------------------------------
// グローバルなヘッダファイル
// Globalpack.h
 
// インクルードガード
#ifndef __GLOBE_PACK
#define __GLOBE_PACK

// インクルード
#include "DxLib.h"
 
// グローバル変数
extern int Screen_Mode ;
 
#endif
 

ここで、コメントにもありますが、インクルードガードを行っています。
これは、ヘッダファイルがいくつか別のファイルから読み込まれているときに、何回もインクルードされるのを防ぐ処理です。

#ifndef …識別子が定義されていなければ、という意味。
そんなわけで、#include "DxLib.h"~#endifまでの処理が2度以上インクルードされるのを防ぐことができました。
このファイルはこの先作るほとんどすべてのファイルで読み込みを行うのでこの処理をしておきました。

CODE:

/*=============================================*
 *
 *   Main.cpp
 *   provided by C++
 *
*=============================================*/
 
#include "../include/Globalpack.h"
#include "GameFrame.h"
 
// グローバル変数
int Screen_Mode = 0 ;
 
// ここでクラスの継承を行う
class MainGameFrame :public GameFrame
{
private:
protected:
public:
	void doMainLoop() ;
	void doDrawObj() {}
	void doObjInit() {}
	void doKeyCheck() {}
};
 
// メインループ関数
void MainGameFrame::doMainLoop()
{
	// ここでプロセスループ
	while( !ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll_2() && !Key[ KEY_INPUT_ESCAPE ] )
	{
		// 初めの読み込み画面
		if( Screen_Mode / 10 == 0 )
		{
			DrawString( 0, 0, "読み込みんぐ...", GetColor( 255, 0, 0 ) ) ;
		}
		// メニュー画面
		if( Screen_Mode / 10 == 1 )
		{
			DrawString( 0, 0, "めぬー", GetColor( 255, 0, 0 ) ) ;
		}
		// ゲーム実行画面
		if( Screen_Mode / 10 == 2 )
		{
			DrawString( 0, 0, "ガメーン", GetColor( 255, 0, 0 ) ) ;
		}
 
		// キーチェック
		if( Key[ KEY_INPUT_SPACE ] == 1 && Screen_Mode != 20 ) Screen_Mode += 10 ;
		if( Key[ KEY_INPUT_RETURN ] == 1 && Screen_Mode != 0 ) Screen_Mode -= 10 ;
 
		ScreenFlip() ;
	}
}
 
// WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
	// ここにメインの処理
	MainGameFrame *mf = new MainGameFrame ;
	if( mf->Frame_ini() != -1 ) mf->doMainLoop() ;
 
	// いまはキーのウェイトでもかけておく
	WaitKey() ;
 
	// DXライブラリ使用の終了処理
	DxLib_End() ;
 
	// ソフトの終了
	return 0 ;
}
 

こんかいは、Screen_Modeというグローバル変数を用意して、
それの値によって画面のモードを変えるという処理を行っています。
((externについてはCの知識なので解説は割愛します。
で、キーが押されたら画面を変えるという処理をするのですが、
Key[ ... ] != 0みたいに書いてしまうと、Screen_Mode += 10の処理が何回も実行されることになるので、
それはまずいからKey[...] == 1と書いているわけです。

実行画面も載せておきました。
他にもちょこちょこと変えたりもしていますが、多分プログラムを見れば分かると思います。

では、次からいよいよプレイヤーを作るという処理に入っていきたいと思います。
添付ファイル
sc402.jpg
sc402.jpg (16.72 KiB) 閲覧数: 47 回
sc401.jpg
sc401.jpg (16.73 KiB) 閲覧数: 54 回
sc400.jpg
sc400.jpg (17.1 KiB) 閲覧数: 54 回
最後に編集したユーザー 藍沢 冬月 on 2010年11月13日(土) 23:38 [ 編集 1 回目 ]

コメントはまだありません。