今日の呟き

リール表示クラスを改めて作ってみる_2

アバター
V30
記事: 21
登録日時: 9年前
住所: 岡山県

リール表示クラスを改めて作ってみる_2

投稿記事 by V30 » 9年前

素人の、素人による、素人のための(ためにならない気がする?)クラス製作日記・第2弾!

本日二度目の投稿なので、半日記です。

ヘッダファイルを眺めていると何かスッキリ感がないので、後から追加できる機能はぶった斬りました。

"Class_CReel_100.h"

CODE:

//*************************************************
//   CReel Class Ver. 0.01   2014.11.09   by V30   
//*************************************************

#ifndef CLASS_CREEL_100
#define CLASS_CREEL_100

#define CHARACTER_MAX	21		//最大図柄数
#define CHARACTER_MIN	 1		//最小図柄数
#define SHOW_MAX		 3		//最大表示コマ数
#define SHOW_MIN		 1		//最小表示コマ数

//リール表示クラス[縦1列表示型] ver. 0.01
class CReel
{
private:

	int		i_character_height;	//リール図柄1コマ縦幅
	int		i_character_max;	//リール図柄総数
	BOOL	B_enable;			//リール稼働フラグ
	int		i_handle;			//リール画像ハンドル
	int		i_height;			//リール図柄1コマ縦幅
	int		i_image_type;		//現在のリール画像タイプ
	int		i_image_type_max;	//リール画像タイプの保持数
	int		i_left;				//リール窓内画像の表示位置(左上x座標)
	int		i_now_position;		//リールの現在位置(下段リール図柄番号)
	int		i_show_margin;		//描画サイズの上下プラス分(上下均等)
	int		i_show_segment;		//リール窓枠内表示コマ数
	int		i_speed;			//リール回転速度(1フレーム当たりの縦スクロール幅)
	int		i_src_h[2];			//抽出画像縦幅[array → 0 = 抽出画像1, 1 = 抽出画像2] 
	int		i_src_y[2];			//リール画像抽出位置y座標[array → 0 = 抽出画像1, 1 = 抽出画像2]
	int		i_state;			//リールの回転状態(0 = 停止中, 1 = 回転中, 2 = 停止受付後, 3 = 停止制御中, 4~ = 停止制御後~自由設定)
	int		i_stop_position;	//リール停止予定位置(下段リール図柄番号)
	int		i_top;				//リール窓内画像の表示位置(左上y座標)
	BOOL	B_visible;			//リール表示フラグ
	int		i_width;			//リール横幅

public:

	//コンストラクタ
	CReel();

	//描画
	void Draw();

	//現在位置[図柄番号]取得
	int  GetNowPosition();

	//速度取得
	int  GetSpeed();

	//状態取得
	int  GetState();

	//指定停止位置[図柄番号]取得
	int  GetStopPosition();

	//リール幅取得
	int  GetWidth();

	//リール表示フラグOFF
	void Hide();

	//リール画像読込(charactermax = 図柄コマ数, imagetypemax = 画像タイプの保持数(横分割数), reelimagehandle = 画像ハンドル)[自由サイズ。但し、縦(高さ)のサイズは図柄のコマ数で割り切れる事!]
	void LoadImageHandle(int charactermax, int imagetypemax, int reelimagehandle);

	//メッセージ表示(*message = "メッセージ")
	void Message(const TCHAR *message);

	//描画位置設定(left = 左上x座標, top = 左上y座標)
	void SetDrawPosition(int left, int top);

	//表示リール画像変更(imagetype = リール画像タイプ)
	void SetImageType(int imagetype);

	//描画サイズの上下プラス分設定(marginsize = 上下片側分、最大半コマサイズ[小数点以下切り捨て])
	void SetMargin(int marginsize);

	//リール位置指定(characternumber = 下段図柄番号)
	void SetNowPosition(int characternumber);

	//リール回転速度設定(speed = リール回転速度[1フレーム当たりの縦スクロール幅])
	void SetSpeed(int speed);

	//状態設定(statenumber → 0 = 停止中, 1 = 回転中, 2 = 停止受付後, 3 = 停止制御中, 4~ = 停止制御後~自由設定)
	void SetState(int statenumber);

	//停止位置指定(characternumber = 下段図柄番号)
	void SetStopPosition(int characternumber);

	//リール表示フラグON
	void Show();

	//リール回転スタート
	void Start();

	//リール回転強制停止
	void Stop();

	//アップデート[シフトダウン計算]
	void Update();
};

#endif //!CLASS_CREEL_100
"Class_CReel_100.cpp"

CODE:

//*************************************************
//   CReel Class Ver. 0.01   2014.11.09   by V30   
//*************************************************

#include 
#include 

CReel::CReel(){}
void CReel::Draw(){}
int  CReel::GetNowPosition()
{
	return i_now_position;
}
int  CReel::GetSpeed()
{
	return i_speed;
}
int  CReel::GetState()
{
	return i_state;
}
int  CReel::GetStopPosition()
{
	return i_stop_position;
}
int  CReel::GetWidth()
{
	return i_width;
}
void CReel::Hide()
{
	B_visible = FALSE;
}
void CReel::LoadImageHandle(int charactermax, int imagetypemax, int reelimagehandle){}
void CReel::Message(const TCHAR *message){}
void CReel::SetDrawPosition(int left, int top)
{
	i_left = left;
	i_top = top;
}
void CReel::SetImageType(int imagetype){}
void CReel::SetNowPosition(int characternumber)
{
	i_now_position = characternumber;
}
void CReel::SetSpeed(int speed)
{
	i_speed = speed;
}
void CReel::SetState(int statenumber)
{
	i_state = statenumber;
}
void CReel::SetStopPosition(int characternumber)
{
	i_stop_position = characternumber;
}
void CReel::Show()
{
	B_visible = TRUE;
}
void CReel::Start()
{
	i_state = 1;
}
void CReel::Stop()
{
	i_state = 0;
}
void CReel::Update()
{
	if (B_enable == FALSE) return;
}
"Class_CReel_100_Tester.cpp"

CODE:

//****************************************
//          CReel Class - Tester          
//****************************************

#include 
#include 

#define WIDTH	1280								//ウインドウ幅
#define HEIGHT	 720								//ウインドウ高さ
#define DEPTH	  32								//ビット深度
#define TITLE	"CReel Class - Tester"				//ウインドウタイトル

//***アプリケーション本体***
int WINAPI WinMain(HINSTANCE h1, HINSTANCE hP, LPSTR lpC, int nC)
{
	SetOutApplicationLogValidFlag(FALSE);			//ログ出力OFF
	ChangeWindowMode(TRUE);							//ウインドウモード変更[FALSE・全文省略(デフォルト)は、全画面モード]
	SetGraphMode(WIDTH, HEIGHT, DEPTH);				//ウインドウサイズ設定
	SetWindowSizeChangeEnableFlag(TRUE);			//ウインドウサイズ変更可能フラグ設定
	SetWindowTextA(TITLE);							//ウインドウタイトル設定
	if (DxLib_Init() == -1) return -1;				//DxLibを初期化→DxLibが異常なら、アプリを異常終了
	SetDrawScreen(DX_SCREEN_BACK);					//描画画面を裏画面に切り替え

	int		graphichandle = LoadGraph("reel.bmp");	//グラフィックハンドル(リール画像読み込み)
	CReel*	p_reel = new CReel;						//インスタンス生成

	//メインループ
	while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClsDrawScreen() == 0)
	{
		if (CheckHitKey(KEY_INPUT_ESCAPE)) break;	//アプリ終了

		p_reel->Update();							//アップデート
		p_reel->Draw();								//描画
	}

	delete p_reel;									//インスタンス破棄

	DxLib_End();									//DxLib終了処理
	return 0;										//アプリケーション正常終了
}
設計がしっかりしていないので、コーディングの前に色々と改めました。バージョン番号の更新は、ちゃんと動くようになったら1.00にしますが、それまでは更新しないかも知れないし、超適当に扱います。



クラスの出来を確かめる、テストプログラム"Class_CReel_100_Tester.cpp"を追加しました。因みに、まだ画像は表示できません。なぜか、16:9のハイビジョン比率です。

リール画像の総コマ数は、1コマの表示設定でも現実的には2ないし3コマ以上ないと表現不可能ですが、ここはゲームのお話なので、ささやかな仮想世界を盛り込みました。

このクラスは1コマ表示を実現したいのが主な趣旨ですので、表示コマ数を1~3コマに設定しました。4コマ以上は後からでも追加できますし、要らない気がするので却下。2コマも使わない気がしますが、余計なコーディングが増えるので放置。

座標は全て、int型で扱う事にしました。スクロールの精度は、1ピクセル単位で十分だろっ!て事です。

変数値に直接アクセスする関数の名前は、Set~()、Get~()に統一(旧作ではそうでしたが)しました。その他の関数は、重要な案件がない限り、void型にして置きます。



とにかく、『シンプルイズベスト』を目指して作って行こうと思います。既に、そうでもない臭いがしますが・・・。

日記を書いている時間をコーディングに費やした方が?と思われそうですが、最後までグダグダやらさせて頂きます。

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