今日の呟き

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

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

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

投稿記事 by V30 » 10年前

自身が大好きな、自作のパチスロシミュレーションゲーム用リール表示クラスを、21コマ以外でも表示できる様に、改めて作り直す事にしました。

とりあえず、大まかな設計図でもあるヘッダファイルを、旧作を参考に一部追加・削除しながら組み立ててみました。

"Class_CReel_100.h"

CODE:

//*************************************************
//   CReel Class Ver. 0.00   2014.11.08   by V30   
//*************************************************

#ifndef CLASS_CREEL_100
#define CLASS_CREEL_100

#define CHARACTER_MAX 21		//最大コマ数
#define CHARACTER_MIN  1		//最小コマ数

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

	int		i_back_height;		//バックライト画像縦幅
	int		i_back_handle;		//バックライト画像ハンドル
	int		i_back_left[3];		//バックライト表示位置(左上x座標)[array → 0 = 上段, 1 = 中段, 2 = 下段]
	int		i_back_top[3];		//バックライト表示位置(左上y座標)[array → 0 = 上段, 1 = 中段, 2 = 下段]
	BOOL	B_back_visible[3];	//バックライト表示フラグ[array → 0 = 上段, 1 = 中段, 2 = 下段]
	int		i_back_width;		//バックライト画像横幅
	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;		//リール窓枠内表示コマ数
	double	d_speed;			//リール回転速度(1フレーム当たりの縦スクロール幅)
	int		i_src_x;			//リール画像抽出位置x座標
	double	d_src_y;			//リール画像抽出位置y座標
	int		i_state;			//リールの回転状態(0 = 停止中, 1 = 回転中, 2 = 停止受付後, 3 = 停止制御中, 4~ = 停止制御後~自由設定)
	int		i_stop_position;	//リール停止予定位置(下段リール図柄番号)
	int		i_top;				//リール窓内画像の表示位置(左上y座標)
	BOOL	B_visible;			//リール表示フラグ
	int		i_width;			//リール横幅

public:

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

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

	//描画
	void Draw();

	//バックライト描画
	void DrawBacklight();

	//リール描画
	void DrawReel();

	//変数値表示[DEBUG用](left = 左上x座標, top = 左上y座標)
	void DrawVariable(int left, int top);

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

	//速度取得
	double GetSpeed();

	//状態取得
	int  GetState();

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

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

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

	//バックライト画像読込(backlightimagehandle = 画像ハンドル)[自由サイズ。リール表示位置に自動で同調させる為、必ず全リール設定完了後に呼び出す!]
	void LoadBacklightImageHandle(int backlightimagehandle);

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

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

	//バックライト点灯フラグ一括設定
	void SetAllBacklightVisible(BOOL flag);

	//バックライト点灯フラグ個別設定[index → 0 = 上段, 1 = 中段, 2 = 下段]
	void SetBacklightVisible(int index, BOOL flag);

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

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

	//リール回転速度設定(speed = リール回転速度[1フレーム当たりの縦スクロール幅])
	void SetSpeed(double 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:

#include 
#include 

CReel::CReel(){}
void CReel::ChangeImageType(int imagetype){}
void CReel::Draw(){}
void CReel::DrawBacklight(){}
void CReel::DrawReel(){}
void CReel::DrawVariable(int left, int top){}
int  CReel::GetNowPosition(){}
double CReel::GetSpeed(){}
int  CReel::GetState(){}
int  CReel::GetStopPosition(){}
int  CReel::GetWidth(){}
void CReel::Hide(){}
void CReel::LoadBacklightImageHandle(int backlightimagehandle){}
void CReel::LoadImageHandle(int charactermax, int imagetypemax, int reelimagehandle){}
void CReel::Message(const TCHAR *message){}
void CReel::SetAllBacklightVisible(BOOL flag){}
void CReel::SetBacklightVisible(int index, BOOL flag){}
void CReel::SetDrawPosition(int left, int top){}
void CReel::SetNowPosition(int characternumber){}
void CReel::SetSpeed(double speed){}
void CReel::SetState(int statenumber){}
void CReel::SetStopPosition(int characternumber){}
void CReel::Show(){}
void CReel::Start(){}
void CReel::Stop(){}
void CReel::Update(){}
これだけ見ると、突っ込まれそうな箇所があちらこちらに散らばっている気もしますが、コードを作りながら適宣修正して行きたいと思います。

このクラス内ではしない事として、他のクラスを継承する・インスタンスやポインタを持つ・構造体を使う(大して纏まらないから)・リフレッシュレートとの同調・相対座標によるリールの表示・バックライトの点滅・リールの勝手な始動・フラグや抽選による停止位置の決定・図柄の記憶や停止位置によるアクション(SEや払い出し等)・・・とにかく、あまり余計な機能を付けない仕様にします。

停止状態から、回る→停止受け付け→クラス外から停止位置番号を受け取る→指定した所(コマ単位)でズレずにキレイに止まる→停止後処理待ち→回転開始前に戻る・・・といった具合に、単純な制御フローを構築するだけのクラスにしようと思います。

日記内のコードに関しましては、自己責任で使って頂いて結構です。

ワザと書いている(抜けている)部分があります。ツッコミ待ちではありません。

尚、素人の製作日記なのでおかしなコードがあっても静観していただくのが望ましいですが、コメントはにつきましては全然歓迎です。但し、返答等は即座にできないです。

その気になれば半日で完成できるクラスですが、飽きっぽい性格なので、気の向いた時に気の向いた分だけコーディングを進めて行きたいと思います。
最後に編集したユーザー V30 on 2014年11月10日(月) 02:29 [ 編集 1 回目 ]

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