とりあえず、大まかな設計図でもあるヘッダファイルを、旧作を参考に一部追加・削除しながら組み立ててみました。
"Class_CReel_100.h"
//*************************************************
// 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
#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や払い出し等)・・・とにかく、あまり余計な機能を付けない仕様にします。
停止状態から、回る→停止受け付け→クラス外から停止位置番号を受け取る→指定した所(コマ単位)でズレずにキレイに止まる→停止後処理待ち→回転開始前に戻る・・・といった具合に、単純な制御フローを構築するだけのクラスにしようと思います。
日記内のコードに関しましては、自己責任で使って頂いて結構です。
ワザと書いている(抜けている)部分があります。ツッコミ待ちではありません。
尚、素人の製作日記なのでおかしなコードがあっても静観していただくのが望ましいですが、コメントはにつきましては全然歓迎です。但し、返答等は即座にできないです。
その気になれば半日で完成できるクラスですが、飽きっぽい性格なので、気の向いた時に気の向いた分だけコーディングを進めて行きたいと思います。