本日二度目の投稿なので、半日記です。
ヘッダファイルを眺めていると何かスッキリ感がないので、後から追加できる機能はぶった斬りました。
"Class_CReel_100.h"
//*************************************************
// 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
//*************************************************
// 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;
}
//****************************************
// 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; //アプリケーション正常終了
}
クラスの出来を確かめる、テストプログラム"Class_CReel_100_Tester.cpp"を追加しました。因みに、まだ画像は表示できません。なぜか、16:9のハイビジョン比率です。
リール画像の総コマ数は、1コマの表示設定でも現実的には2ないし3コマ以上ないと表現不可能ですが、ここはゲームのお話なので、ささやかな仮想世界を盛り込みました。
このクラスは1コマ表示を実現したいのが主な趣旨ですので、表示コマ数を1~3コマに設定しました。4コマ以上は後からでも追加できますし、要らない気がするので却下。2コマも使わない気がしますが、余計なコーディングが増えるので放置。
座標は全て、int型で扱う事にしました。スクロールの精度は、1ピクセル単位で十分だろっ!て事です。
変数値に直接アクセスする関数の名前は、Set~()、Get~()に統一(旧作ではそうでしたが)しました。その他の関数は、重要な案件がない限り、void型にして置きます。
とにかく、『シンプルイズベスト』を目指して作って行こうと思います。既に、そうでもない臭いがしますが・・・。
日記を書いている時間をコーディングに費やした方が?と思われそうですが、最後までグダグダやらさせて頂きます。