RPG講座を勉強しつつクラス化を試みる

SG
記事: 2
登録日時: 14年前
住所: 新潟

RPG講座を勉強しつつクラス化を試みる

投稿記事 by SG » 14年前

ソフト屋さんのRPG講座が恐ろしく勉強になる。
C++勉強中ですが、慣れてみようということで人様のコードをクラス化していじっています。
RPG講座はCですがオブジェクト指向にとても近いようで、初心者の私でもクラス化しやすい。

以下はソフト屋さん(http://dixq.net/forum/blog.php?u=114&b=2074)の
RPG講座がオリジナルであることを明記します。

シーン遷移クラスという感じですが、キャラのアニメーション管理とかにも応用効きそうですよね。

CODE:

#ifndef _CSTATEMNG_
#define _CSTATEMNG_


class CStateMng
{
private:	

	int nowState;           //現在の状態
    int beforeState;        //前の状態(STM_UpdateStateで現在の状態が変化なら保存)
    int nextState;          //次の状態(STM_UpdateStateで現在の状態にコピー)
    int stateNums;          //状態数
    int bBack;              //状態を戻すフラグ
    int bReset;             //状態を強制設定するフラグ
    int *pFlameCounts;      //フレームカウント配列。状態数分。

	//  フレームカウントのセット
	void STM_SetFrameCount(int count);

	//  コピー禁止措置
    CStateMng(const CStateMng&);
    CStateMng& operator = (const CStateMng&);
  
public:
	
    //  コンストラクタ
	CStateMng();
	CStateMng(int _stateNums);
	
	//  デストラクタ
	~CStateMng();
	//  状態を強制設定する。フレームカウントは0に初期化される。
	void STM_ResetState(int state);	
	//  状態を遷移する。フレームカウントは0に初期化される。
	void STM_ChangeState(int state);
	//  現在の状態を得る。
	int STM_GetState()const;
	//  現在の状態のフレームカウントを得る。
	int STM_GetFrameCount()const;
	//  1つ前の状態を得る。
	int STM_GetBackState()const;
	//  前の状態に戻す。フレームカウントはそのまま。
	void STM_SetBackState(int state);
	//  状態・フレームカウントを更新する。
	void STM_UpdateState();

};

#endif

#include 
#include "DxLib.h"
#include "CStateMng.h"

CStateMng::CStateMng()
{
	nowState=-1;			//現在の状態
    beforeState=-2;			//前の状態(STM_UpdateStateで現在の状態が変化なら保存)
    nextState=-3;			//次の状態(STM_UpdateStateで現在の状態にコピー)
    stateNums=0;			//状態数
	bBack=FALSE;			//状態を戻すフラグ
	bReset=FALSE;
    pFlameCounts=NULL;      //フレームカウント配列。状態数分。
}

CStateMng::CStateMng(int _stateNums)
{
	nowState=-1;			//現在の状態
    beforeState=-2;			//前の状態(STM_UpdateStateで現在の状態が変化なら保存)
    nextState=-3;			//次の状態(STM_UpdateStateで現在の状態にコピー)
    stateNums=_stateNums;   //状態数
    bBack=FALSE;			//状態を戻すフラグ
	bReset=FALSE;
	pFlameCounts=NULL;      //フレームカウント配列。状態数分。

	if(pFlameCounts == NULL)
	{
		pFlameCounts = new int[_stateNums];	//動的確保

		for(int i=0; i=0 );
    assert( nowState =0 );
    assert( nowStatestateNums );
    
    //  フレームカウントを設定する。
    pFlameCounts[nowState] = count;
}
最後に編集したユーザー SG on 2011年6月22日(水) 22:00 [ 編集 2 回目 ]

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