アクションRPGを作ろうかなと思っています。
というか作ってはいます。
……あっ、2Dです。
デスペナさんの質問と回答とを見てしっかりと設計することって重要なんだなぁ、とひしひしと感じたので、
できるかぎり作業の工程を書き残していこうかな……と。
あぁ、あと次の日記を書くまでに実装したいところを書いておけばやる気が継続ってのもあってですね( ・д・)
ゲームとしての仕様などはまだあんまり考えていないので
とりあえず今出来ているところ、それからプログラム自体の仕様を整理することにします。
クラス図

スクリーンショット

ソース
[拡張子 zip は無効化されているため、表示できません]
出来ている点:
マップファイルの読み込み、表示(スクロール無し)
キャラが移動(慣性あり)
可変ジャンプ
プログラムの仕様:
エラーは例外で投げ、捕捉。
エラークラスはstd::exceptionを継承。
マップクラスはシングルトンパターンで管理。
エラークラス
► スポイラーを表示
CODE:
/*
* @file エラークラス
* @base std::exception
*/
#pragma once
#include
#include
class CError : public std::exception{
private: // メンバ変数
std::string mMessage; // エラーメッセージの保存
public: // メンバ関数
// コンストラクタ
CError::CError( const char* file, int line, const char* function, const std::string& message ){
// 文字列の結合
std::ostringstream oss;
oss
class CBaseSingleton abstract{
private: // メンバ変数
static T* spInstance; // インスタンス
protected: // メンバ関数
CBaseSingleton(){} // コンストラクタ
virtual ~CBaseSingleton(){} // デストラクタ
public: // メンバ関数
static void CreateInstance(){ if( !spInstance ) spInstance = new T; } // インスタンス生成
static void DeleteInstance(){ delete spInstance; spInstance = nullptr; } // インスタンス破棄
static T& Instance(){ return *spInstance; } // インスタンス取得
};
// staticメンバ定義
template
T* CBaseSingleton::spInstance = nullptr;
継承先はこんな感じ
CODE:
#include "Error.h"
class CSingleton : public CBaseSingleton{
friend CBaseSingleton;
private: // メンバ関数
CSingleton(); // コンストラクタ
CSingleton( const CSingleton& ); // 実体の定義はしない
CSingleton& operator=( const CSingleton& ); // 実体の定義はしない
~CSingleton(){} // デストラクタ
};
シングルトンクラスは少し冗長だけれどもインスタンス生成と解放のタイミングを管理できる。
少し気になるのはCMapクラスをシングルトンパターンにするかどうか……
いろいろなところで呼び出されるからシングルトンにしているもののグローバル変数と同じで乱用はダメかな。
プログラムを組むときは
- グローバル変数を使わない
- マクロはできる限り使わない(inline関数でできることはinline関数でする)
- オブジェクト指向を意識した設計を行う(個々の処理の分離,継承包含の意識)
- コメントをできるかぎり入れる
- マジックナンバーを使わない
- メモリリークが起きないようにする
- リソースの確保は必要な部分のみ(ゲーム内の画像はゲームシーンクラスが生成された時点で確保し、解放されたらリリースする)
こんなかんじで。
素材確保が大変だけれども画像素材は仮置きなり何なりしてできる限り自作する。
SE素材は難しいけどpixtone noiseやsoftyaさんが書いてらっしゃったソフトを使ってできるところは自作、あとはネットから補給。
BGMはクリエイティブ・コモンズなどのフリー素材から探す
ゲームのシステムについては
武器は無印ロックマンのように遠距離攻撃のみを3種ほど最終的には作ろうかな……と。
とりあえずは前に飛ぶだけの豆鉄砲を実装しようと思います。
ステージクリア方式ではなくダンジョン探索型にしようと思います。
次回までの目標
スクロールの実装
武器(豆鉄砲)の実装
効果音,BGMを流せるようにする
作業のお供
作業の裏でひたすら流してます( >ω<)b
明日中間試験の最終日なんでではでは( ・∀・)ノシ
P.S.
そういえばクラス図の作成、
今はOpenOffice使っているんですが、フリーで使い勝手のいいのってありますか?