スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ジャンプ17号感想

●ワンピース

盲目のおじさんは悪魔の実の能力者っぽい。
さて、何の実か考えてみよう。
--------------------------------------
【1】ボトボトの実
【2】ベコベコの実
【3】実は、悪魔の実ではなく何らかの奥義。

(覇気、六式など)
--------------------------------------
一応可能性として入れましたが、3は除外。

ボトボトだと何か格好悪いので、(ちょっと意味も合わないし)
【2】のベコベコの実であると予想してみる。


●トリコ
-------------------------------
副料理長トミーロッド 死亡 -
-------------------------------
トミーロッドさんが敗北しました。
死亡、となっているのですが、個人的には下記の表現の方が良いかと思った。

-------------------------------
副料理長トミーロッド 消滅 
-------------------------------
だって跡形も残ってないんだもの。
悪魔の髪は恐ろしいです。

あと、もしかしたら、今後サニーがピンチになった時に、
髪の中で生きていたトミーロッドさんが話しかけてきたり、
サニーが虫の生成とかを土台とする新たな技を覚えたり、
そんな展開もありそうだなと思った。


●食戟のソーマ
あ、思い出した!
今回登場した兄弟は、初期に一回だけ登場してたような気がする。

※薙切 仙左衛門さんが、「研鑽して、君たちが"玉"となるのだ!」とか言ってた時。
 弟の方は、よだれを垂らした化け物みたいな描写になってたような気が。


●スポーティングソルト
読みきりです。
とりあえず、服の形状がおかしな所があるなと思いました。
どことは言わないですが。


●暗殺教室
ONE OUTS -ワンナウツでも超前衛守備を敷く展開があったのですが、
今回は、それを更に超越する前衛守備を敷いてきました。

近すぎる(笑)

というか、あんなに近かったら球を捕れないですし、
完全に妨害目的だろうと思う。


<追記予定!>
スポンサーサイト

テーマ : 週刊少年ジャンプ全般 - ジャンル : アニメ・コミック

ジャンプ16号感想

●ワンピース (休載)
ワンピースが不審な休載という話題を見かけたが、
これの事だったのか。

ネット上では、座頭市の人物似せたキャラクターを出したから
とかいう仮説が出ているが、どうなんだろう。
(座頭市の人物に似せたキャラクター … カジノで負けていた盲目の男性。)

17号からは普通に連載らしいので、
多分問題は無いだろう
と思うのだが、やっぱり権利上何かあったのかな?


●食戟のソーマ
おぉ今週はカラー絵だ! とても綺麗である。
そして、そのカラー絵に主人公は存在しないという。

主人公というか、一切、男性が存在しない。
まぁ、そういう事なんだろうと思った。

また、下記の説明文もあったのだが、
-----------------------------------------------------
―極星寮で盛り上がる 男子には聞かせられない話…!?
-----------------------------------------------------
一色先輩あたりが、天井裏で盗み聞きしてそうな気がする。


んで、本編。
早速、地獄の合宿が始まりました。
即退学って怖いですね。

まぁ、それはそうと、
試験を勝ち抜いた料理人が凄い人物であるという事は分かりました。


そして、最後の方で主人公の足をぐりぐり踏みつける料理人が出てきましたね。

踏みつけているのを四宮シェフが目撃し、
「よし、オマエ退学」と宣告されれば斬新な展開だったと思う。

実際、調理場での怒声や罵声が客のテーブルにまで聞こえて来て
客が離れる
という話は聞いた事あるし、
(少なくとも、自分はそういう店に進んで行きたいと思わない)

料理以外の所で摩擦を起こす人間は、立派な退学理由になると思う。
(そうしないと、なんか今回退学になった蜜柑香りヘアーの人がかわいそうだ。


●トリコ
サニーさんは、「切断されたお前の腕が 生きている事は知ってた」
みたいな事を言ってたのですが、

自分には完全に不意打ちを食らった様にしか見えなかったです。

生きているのは知っていたが、"もののけ姫"の狼の生首の如く、
"あんなに動けるとは思ってなかった"、という事なのかな。

勝敗の行方ですが、なんか良いライバル的な関係になって
トミーロッドさんが敗北
しそうである。

というか、トミーロッドさんは
トドメを刺せるチャンスで、肩のほんの一部をかじるだけ
だったり、
サニーさんは、トミーロッドさんの金縛り状態が解除されるまで待ったりと、

なんでそんな紳士的な行動をしているのだろう。


●ニセコイ
楽が小野寺さんと一緒になれるように、
席を交代する集さん
格好良かったです。

良い人過ぎる(笑)
好感度が結構上がったかもしれない。

----------------------------
ガンガン行け
くっつけ
押し倒せ
チューしろ

------------------------------------------------
ああ…るりちゃんも背中で喜んでくれてる…!
------------------------------------------------

これ、ちょっと「喜んでる」とは違うと思います、小野寺さん(笑)


<追記予定!>

テーマ : 週刊少年ジャンプ全般 - ジャンル : アニメ・コミック

ローグライクゲームを作ってみよう!  その9 ~アーカイブ読み込み+α~

さて、引き続きゲーム制作の前提となるシステム作りの解説を行ってまいります。

今回やるのは、下記の二つ!
-----------------------------------------
【1】アーカイブファイル読み込み
【2】入力管理システムの構築

-----------------------------------------

まず、アーカイブファイルの読み込みです。

※アーカイブファイルの作成、読み込み自体は前回解説したので、
こちらをお読みください。

【参考URL】アーカイブファイル作成ファイルを作ってみた!



■アーカイブファイルからの読み込み
読み込み方は極めて単純です。

まず、今までファイル読み込み用のCLoaderFileクラスを使用していたのですが、
同様に、アーカイブファイルから読み込む為のCLoaderArchiveクラスを作成します。
※CLoaderBaseを継承。

【参考画像】
SampleRogue4_1.jpg

で、読み込みクラスを生成する部分で、
CLoaderBaseにCLoaderArchiveをnewして代入する部分を作ります。
(ただのswitch文への追記ですね。)

int t_ClassType = t_ParamVec[ t_OffSet + 1 ];

std::tr1::shared_ptr< CLoaderBase > t_LoaderBase;
switch( t_ClassType ){
case 1: t_LoaderBase.reset( new CLoaderFile() ); break;
case 2: t_LoaderBase.reset( new CLoaderArchive() ); break;
default:break;
}


で、後はCLoaderArchiveクラスの中身を作るだけです。

CArchiveクラスという、アーカイブファイルを管理するクラスを作成しているので、
このクラスからファイルサイズとファイルポインタを取得し、
1)ファイルサイズを超えるまでint型の変数を読む
2)すべて読み込み終わったら、Factoryクラスに読み込んだ値を渡す

という部分を作れば完成です。

int CLoaderArchive::Init( std::vector< int >& t_ParamVec, int t_Offset )
{
int result = -1;

//変数4つ分の要素数があれば
if( ( int )t_ParamVec.size() > t_Offset + 3 ){
//各データを変数に代入
m_Priority = t_ParamVec[ t_Offset ];
m_LoadNum = t_ParamVec[ t_Offset + 1 ];
m_CreateNum = t_ParamVec[ t_Offset + 2 ];
int t_FileNameNum = t_ParamVec[ t_Offset + 3 ];

//ファイル名の分の要素数があれば。
if( ( int )t_ParamVec.size() > t_FileNameNum + t_Offset + 3 ){
//ファイル名のデータは、t_Offsetの位置から4つ後ろの変数から開始するので、t_Offset + 4と指定。
std::vector< char > t_FileNameVec;
ChangeIntToStr( t_FileNameVec, t_ParamVec, t_Offset + 4, t_FileNameNum );

CArchive& t_Archive = CArchive::getInstance();
m_FileSize = t_Archive.GetFileSize( &t_FileNameVec[ 0 ] );
m_pFile = t_Archive.GetPointer( &t_FileNameVec[ 0 ] );


//ファイルが正常に読み込めていれば
if( m_FileSize > 0 && m_pFile != NULL ){
result = 0;
}
}
}
return( result );
}

int CLoaderArchive::GetValue()
{
int result = -1;
int t_Value = 0;
int t_Flag = 0;
int t_State = 0;

for( ; m_NowVecNum < m_FileSize; m_NowVecNum++ ){
if( m_pFile[ m_NowVecNum ] >= '0' && m_pFile[ m_NowVecNum ] <= '9' ){
t_Value = ( t_Value * 10 ) + ( m_pFile[ m_NowVecNum ] - '0' );
t_State = 1;
}else if( t_State == 0 && m_pFile[ m_NowVecNum ] == '-' ){
t_Flag = 1;
t_State = 1;
}else if( t_State == 1 ){
if( t_Flag == 0 ){
result = t_Value;
}else{
result = -t_Value;
}
break;
}
}
//現在の添え字がファイルデータの要素数を超えた場合、オブジェクト生成モードに移行
if( m_NowVecNum >= m_FileSize ){
m_LoaderState = LOAD_OBJECT;
}
return( result );
}


んで、今回のアーカイブファイル読み込み作成クラスを作成したことにより、
テクスチャデータのcsvファイル記載形式が変わりました。

★今まで
SampleRogue4_3.jpg

★今回
SampleRogue4_2.jpg


2番目にLoadTypeが加わっただけです。
※LoadType … 読み込み方法を切り替えるフラグです。フラグは下記の2種類。
1:ファイルから読み込み、2:アーカイブファイル読み込み


プログラムの方は、下記の様に変更されています。

★今まで
if(画像分割するなら){
LoadDivGraph( //省略);
}else{
LoadGraph(//省略);
}

★今回
switch( t_ClassType ){
case 1:
if(画像分割するなら){
LoadDivGraph( //省略);
}else{
LoadGraph(//省略);
}
break;
case 2:
if(画像分割するなら){
CreateDivGraphFromMem( //省略);
}else{
CreateGraphFromMem(//省略);
}
break;
}



■入力管理システムの構築
まず入力判定をする場合のことを考えます。

例えば、「Enterキーを押したらゲーム開始」と決めたとします。
例:
if( Key[ KEY_INPUT_RETURN ] == 1 ){
//何らかの処理
}


ここで「やっぱりZキーでゲーム開始にしよう」
仕様変更が入ったとします。

この場合、当然ソースコードの書き換えが必要になり、
また、入力判定の書き換え忘れ等が発生する可能性があります。

なので、上記の可能性を考えると、
固定値を記載するのはマズイという結論に至りました。


そこで、下記の様な仕組みにしました。

<準備>
const int KEY_TYPE_MAX = 256;
char m_KeyFlag[ KEY_TYPE_MAX ];
int m_KeyCount[ KEY_TYPE_MAX ];
std::vector< int > m_KeyVec;

・GetHitKeyStateAll関数で、m_KeyFlagに押されているかどうかのフラグをセット
・KeyFlagが1であればm_KeyCountの値を加算、0ならm_KeyCountも0にする。
・初期化の際、m_KeyVecをKEY_TYPE_MAXの値だけ拡張しておく。
・初期化の際、m_KeyVecの0~255の添え字には、0~255を入れておく。
・キーが押されているかを判定する際、m_KeyCountの値を直接確認するのではなく、
 m_KeyVecの値を介して確認する。


赤字の部分が重要です。
図で見た方が分かり易いかもしれないので、画像を貼ってみます。

★今まで
RogueSample4_4.jpg


★今回
RogueSample4_5.jpg


要はm_KeyVecの値をm_KeyCountの添え字として使っている訳です。
これ、何のメリットがあるの?というと、
キーコンフィグ機能が実装できる
のです。

例えば、KEY_INPUT_Q = 16、 KEY_INPUT_P = 25 なのですが、

下記の様に、あらかじめKeyVecに値を代入しておくことにより、
「Qを押したら処理A実行」の部分を、「Pを押したら処理A実行」
動作を変える事が出来るのです。

//事前に代入しておく。
m_KeyVec[ 16 ] = 25;

int CheckKey( int t_KeyNum ){
int result = -1;

result = m_KeyCount[ m_KeyVec[ t_KeyNum ] ]

return( reuslt );
}

int main(void){
//代入されたので、「P」が押された際に処理A実行
if( CheckKey( KEY_INPUT_Q ) == 1 ){
//処理A
}
return( 0 );
}
※配列の範囲外チェックは省いています。


また、それだけではなく、
オリジナルのキーを作ることも出来ます。

例えば、m_KeyVecを要素数500に拡張します。
そして、m_KeyVec[499] = 25 と代入しておけば、

プログラム中の下記の記載がある部分は、「Pを押したら実行」という動作になります。
if( CheckKey( 499 ) == 1 ){

}


で、m_KeyVecに代入する値を外部ファイルに押し出してやれば、
コンパイルせずに、入力に反応するキーを
変える事が出来る
という寸法です。

今回は、
257 = 「M」
258 = 「N」
259 = 「O」
260 = 「P」 という事にしました。

実際のソースコードは下記の通り。
if( t_InputManager.CheckInput( 257 ) == 1 ){
//「M」キーを押した際に実行される。 (描画優先順位変更)
t_Manager.ChangePriority( 2, 2 );
}else if( t_InputManager.CheckInput( 258 ) == 1 ){
//「N」キーを押した際に実行される。 (描画状態変更)
t_Manager.ChangeDrawState( 0, 2 );
}else if( t_InputManager.CheckInput( 259 ) == 1 ){
//「O」キーを押した際に実行される。 (描画状態変更)
t_Manager.ChangeDrawState( 0, 1 );
}else if( t_InputManager.CheckInput( 260 ) == 1 ){
//「P」キーを押した際に実行される。 (テクスチャ変更)
t_Manager.ChangeTexture( 0, 0, 3 );
}


将来的には、入力番号257~260はゲームパッドの入力を受け付ける、
という風にしても良い
かもしれません。
その内、改良してみようと思います。

外部ファイルは下記の様になっているので、
KeyVecNumとKeyTypeを任意の値に書き換えれば動作が変わるはずです。

■InputData.csv
RogueSample4_6.jpg




★注意事項
今回からアーカイブファイル読み込みを実装したので、それに対する注意。
----------------------------------------------------------------------
【1】ファイルを個別に読み込む場合、プログラム中のInit.csvを読み込む部分の
   2番目の引数を1にしてください。
int t_Param[] = { 2, 1, 1, 100, 100 };
【2】アーカイブファイルから読み込む場合は、2番目の引数を2にして下さい。
int t_Param[] = { 2, 2, 1, 100, 100 };
【3】TextureData.csvには、ファイル読み込みタイプを指定するフラグがあります。
(2列目の"LoadType"の項目)
 こちらもファイル読み込みの場合は1、アーカイブからの場合は2を指定して下さい。

----------------------------------------------------------------------

なので、開発の際は下記の手順になると思われます。
----------------------------------------------------------------------------
【1】TextureData.csvの、"LoadType"の項目は1に指定。
【2】プログラム中のInit.csvを読み込む部分の、2番目の引数を1に指定。
【3】プログラム中に、MyArchive.arcを読み込む部分があるので、そこはコメントアウト。
【4】開発中は、各.png.jpgなどのファイルを個別に読み込んで実行

【5】TextureData.csvの"LoadType"の項目を2に指定。
【6】任意のフォルダに、アーカイブにするファイルとあーかいば.exeを入れる。
   あーかいば.exeを起動して、MyArchive.arcを作成
【7】プログラム中の、MyArchive.arcを読み込む部分のコメントアウトを外す
【8】プログラム中のInit.csvを読み込む部分の、2番目の引数を2に指定。

----------------------------------------------------------------------------

【ソースコード一式】http://rudora3.web.fc2.com/RogueSample4.zip

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

ジャンプ15号感想

まず暗殺教室の表紙について。

日本列島を殺せんせーの目にするというのは、
面白い発想である。

あと、個人的に"ダンガンロンパ"の
"モノクマ"にも似せてあるのかな?
と思った。

【参考画像】
monokuma.jpg
↑モノクマさん。


●暗殺教室
本編に「超中学生級」とかいう表現が出てたので、
表紙のヤツはやはりダンガンロンパのモノクマを題材にしているのであろうと思った。

※ダンガンロンパでは、「超高校生級」という表現がゲーム内で出てくる。


●めだかボックス
あれっ、もしかしてまだ続く?(連載的な意味で)

えらい早く不知火不知編が収束に向かったので、
もう最終回になってしまうんじゃないかと思ってたのですが。

もしかしたら、打ち切りと連載続行の狭間に居たから、
展開を終わらせるか終わらせないか混乱
しているのかもしれない。

かつての野球漫画「ミスターフルスイング」でも、
最後そんな感じでゴチャゴチャになってた。


●ワンピース
意志を持ったおもちゃが生活しているだと…?

なにナチュラルに解説しているのだ。
これ結構おかしな事ではないか。

さて、下記のどれだろう。
---------------------------------------------------------
【1】生きている様に見えるけど、全部機械だよ
【2】人形やおもちゃに命を宿らせられる能力者がいるよ
【3】おもちゃ全部が"人造ヒトヒトの実"を食べさせられたよ
【4】実は全部ドフラミンゴさんが操っているよ

---------------------------------------------------------
【4】は無いとして、
ありそうなのは【1】と【2】だろうか。

ヨミヨミの実の存在からして、「魂」の概念はあるっぽいし、
何らかの魂を物に吹き込む能力者が居るのではないか、と予想。


●トリコ
最後の2コマで、なんかトミーロッドさんが
作画崩壊を起こしてる。

一体 誰だよコレ。


●ニセコイ
酒で酔っ払ってキスを迫ったり、服を若干脱ぎ始めるお話でした。

な、なんだコレは。
前回の悪霊払いの為には口移しする必要がある、抱き着く必要がある、等と同様、
なんか妄想・願望の様な展開になって来てるような。

これ行き過ぎると人気が落ちそうなので、
控えめにした方が良いかなと思ってる。

あと、10年前の約束の相手とかどうなっているの?
流石にそろそろ進展して欲しいものだが。

物語の根幹を成すものなのに。

なんかもう、名探偵コナンの
申し訳程度に時々出てくる"黒の組織"的な扱いになっているではないか。
これでいいのか。

まさか、なし崩し的に日常描写系の漫画に転換するつもりなのか…?


●ワールドトリガー
見えない内臓があって、それがトリガーを使用する際の
強さに関わってくる
との事。

それは、あのメガネの男性は強くなることは出来ない、
(修行でパワーアップ、などは不可)という感じなのだろうか?

で、でも流石に"トリオン器官を強くする方法"とかはあるんじゃ?
…ないの?


●食戟のソーマ
試験に合格したと思ったら、地獄の合宿とかが始まるのか。
こんな学校行きたくないよ(´・ω・`)

就職活動で例えると、
第20次面接まで用意されてて一回でも受からなければ不合格
みたいな感じである。

話がそれてしまうが、現実世界で
受験戦争とかで幼稚園の頃から英才教育を施されている子供は
結構ストレスを抱えてしまうんじゃないかとか思った。

テーマ : 週刊少年ジャンプ全般 - ジャンル : アニメ・コミック

友達が お笑い芸人になっていて、テレビに出演してた模様・・・! (驚愕)

今日、友人から聞いた話なのですが、
なんか自分の小・中学校の頃の友達
お笑い芸人になっていて、テレビに出演していたらしい。

マジでか!


調べてみたら、本当でした。

(株)プロダクション 人力舎に所属、
裸月光というグループ名で活動している模様。

【参考画像】
hadakagekkou.jpg
【参考URL】JINRIKISHA OFFICIAL WEB

名前出ししてるので、特に伏字にはしませんが、
木下翔太君です。(写真:左)

木下君は明るくて活発な性格です。
中学校の頃はよく「キノピー」という愛称で呼ばれてた印象があります。
まさか、お笑い芸人になっていたなんて、予想外。

昼休みは、よく
ジャンケンをして、負けたらロッカーに1分間閉じ込められるとかいう
謎のゲームをやったりしてました。

(自分も負けて、閉じ込められた経験あり。
  閉じ込められた際は外から鍵もかけるので中々怖かったです。
   ※もちろんロッカーの鍵を開ける係は、近くで待機してました。)


一回、誰かが冗談で、
「よし、そろそろ(ロッカーの鍵を開けずに)帰るか」と言った際、
木下君が「うぉぉい!?」とか言いながらパニックになったのをよく覚えています。
(慌てて自分がロッカーの鍵を開けました。
 力づくで出ようとしてたので、ちょっとロッカーの扉が変形したような気がする。)


まぁそんな事はともかく、
お笑い芸人は売れなかったらすぐ消えてしまうみたいなイメージがあるので、
是非とも頑張ってほしいです!

ちょくちょく今後の動向を見て行く事にする・・・!

【Twitter】裸月光・木下翔太
【Blog】裸月光・木下のたまには服を着ろ!ブログ

テーマ : 日記 - ジャンル : 日記

ジャンプ14号感想

●めだかボックス
あれ?なんか展開が速すぎる様な。
もしかして、終わってしまうのか。

しかし月が落ちてきてそれを破壊して死ぬとか、
何でそんな「パッキー」みたいな終わり方をするんだ。

※パッキー … 恐竜の漫画。何の脈絡もなく突如 隕石が落ちてくる事が分かり、
        主人公であるパッキーが頭突きで破壊して最終回を迎えた。

あとどうでもいいこと。
-------------------------------------
言彦…恐れ入ったぞ
あれだけの戦闘を経ていまだ健在とは…
一体何をすれば終わるんだよ言彦編は…

-------------------------------------
めだかさん…、今やってるのは、言彦編ではなく、
不知火不知編(しらぬいしらず編)なのです。

言彦のインパクトが強すぎてタイトル変わっちゃったよ。


●トリコ
サニーは、"気色悪いと思う敵"と戦う運命にあるんだなぁと思い始めるようになった。

とりあえず、ココはグリンパーチを無視して
ひとまずトミーロッドさんとか、そこら辺りに致死性の毒を撒いたら良いのでは?
とか思った。

ちょっと相性が悪すぎるよ。

まぁ、とりあえず、至る各所でバトルが始まる(盛り上がる)所で、
別のシーンに移る
、という状態になっているので、
物語的には面白い状態かなと思ってる。


●食戟のソーマ
----------------------------------------------
わ~~~~~ん(椀)
----------------------------------------------
笑った。
いやいや、なんじゃこりゃ。

しかも(椀) かっこわん って何なんだ。ギャグなのか。

料理食べていきなり「わ~~ん(椀)」とかギャグを言いながら転倒するとは驚愕した。
意味が分からないもの。

これは薙切 えりなさんが失望して立ち去ってしまうのも無理はない。


とりあえず、イクミさんは肉のプロフェッショナルであったが、
"丼"のプロフェッショナルではないので敗北した
というのは、なるほどなーと思いました。
(肉自体は美味くても、肉+ご飯の組み合わせが出来なかった)


●目を見張るほどの未成年
面白かった。

この作者の作品は、「てめぇどこ見て歩いてんだ!」みたいな
ありそうな言い回し
異次元の展開へ持って行くから面白いです。

あと、時岡蹴子さんとか妙に愛着が沸きそうなキャラクターが多いような。
(前回の静岡県の茶葉を一瞬で収穫できる兄は登場しないのだろうか?)

■イルカ
-----------------------------------------------
イルカ「ほら!イルカは簡単な計算も出来るんです!!
    どうです!すごいでしょう!!」
生徒A「どうしたんだよイルカ急に…」
イルカ「いいからすごいと言いなさい!!
    ほら!!こんな方程式まで」 (カッカッ

-----------------------------------------------
イルカ君 必死過ぎる(笑)

うん、イルカ君は凄いよ、凄いんだよ。

逆に考えるんだ。
中学校レベルの知識しかないのに、
高校の期末テストで46位になれる
のが凄い、と…!

もしカラス君が転校してきたら、
知能レベルを勝負をしてほしい
と思う。


●ワールドトリガー
なんだか、あまり感情移入出来てないような気がする。(自分が)

なんでなのか考察してみた。
-----------------------------------------
・クラスメイトの生徒の描写が少ない
・いじめやカツアゲなど、辟易する人間が多い

-----------------------------------------

まず一つ目なんですが。
現在、生徒たちが襲われています。

が、「その生徒たちが助かってほしい」と思えなければ
特に来週の展開なんかは気にならなくなってしまうのです。

個人的に、下記の様な展開があれば、
現在の生徒たちが襲撃を受けている状況に
感情移入出来た(助かってほしいと思えた)と思う。
-------------------------------------------------------------
・転校生である主人公を、クラスメイト全員が温かく迎えてくれる
・クラスメイトに、幼馴染の女の子とか(ヒロイン)がいる

-------------------------------------------------------------



<追記予定!>

テーマ : 週刊少年ジャンプ全般 - ジャンル : アニメ・コミック

ローグライクゲーム制作講座

※こちらは、ローグライクゲーム制作関連の記事をまとめたページです。

説明順序がゴチャゴチャになっている所があるので、
その内また纏めなおす予定です。

とりあえず、その6~その8はかなりゲームの基盤に値する部分の解説なので、
こちらから読むのをオススメしております。

ローグライクゲームを作ってみよう!  その1 ~ランダムダンジョン生成~
ローグライクゲームを作ってみよう!  その2 ~ランダムダンジョン生成~
ローグライクゲームを作ってみよう!  その3 ~ランダムダンジョン生成~
ローグライクゲームを作ってみよう!  その4 ~マップスクロールその他~
ローグライクゲームを作ってみよう!  その5 ~移動処理~
ローグライクゲームを作ってみよう!  その6 ~描画システム~
ローグライクゲームを作ってみよう!  その7 ~生成システム~
ローグライクゲームを作ってみよう!  その8 ~外部ファイル読み込みシステム~

<追記予定!>

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

ローグライクゲームを作ってみよう!  その8 ~外部ファイル読み込み~

前回やった内容についてですが、
画像や描画オブジェクトの生成機構を作りました。

で、作ったのはいいのですが、
「このオブジェクトを生成してくれ」とFactoryクラスに依頼するたびに、
下記のコードを書かなければ
なりません。

{
std::vector< int > t_Vec;
std::string t_Str( "grade.jpg" );//grade.jpgは、256×256の画像とする。
int t_Param[] = { 0, 2, 2, 128, 128 };//画像配列番号、x分割、y分割、分割した際の横幅、分割した際の縦幅

CharToInt( t_Str, t_Vec );

for( int i = 0, count = sizeof( t_Param ) / sizeof( t_Param[ 0 ] ); i < count; i++ )
{
t_Vec.push_back( t_Param[ i ] );
}
IFactory::Create( FACTORY_TEXTURE, t_Vec );
}
--------------------------------------------------------
※豆知識。 先頭と最後に謎の{ }があると思いますが、
 これ、変数の有効範囲を決めてます。

 上記の例でいうと、t_Vec、t_Strといった変数は{}の中でのみ存在する事になります。
 for文やif文以外の何でもない所に{}を使って変数の有効範囲を指定できるのです。
--------------------------------------------------------

これは非常に面倒くさいですね。
(画像名などを修正するだけでコンパイルし直さないといけないですし。)

なので、外部ファイルから読み込むクラスを新たに創設し、
外部ファイルを書き換えて、ゲーム内部の動作に反映させるようにします。


イメージとしては下記の様になります。
※下記画像の矢印は、処理の流れを示したものであり、
 classの継承、集約などを示すもの(UMLのクラス図)ではありません。

【参考画像】  ※今まで
RogueSample3_1.jpg



【参考画像】  ※今回
RogueSample3_2.jpg


見ても分かりますが、
下記の様な流れを作ってしまうと、無限ループになります。
IFactory→CLoaderFactory→CLoaderManager→IFactory→繰り返し

なので、Test.csvというファイルに、
「Test.csvを読み込んで下さい」という指示を書く、

などの循環を生み出す記載はしないように注意しましょう。


※正常な流れは下記の通り。

■Test.csvに"Test.jpg"という画像を読み込んでくれという内容を記載した場合。
main→IFactory→CLoaderFactory→CLoaderManager→
IFactory→CTextureFactory→CTextureManager

■Test2.csvに"Test.csv"というファイルを読み込んでくれという内容を記載、
 Test.csvには、"Test.jpg"と"Test.bmp"を読み込んでくれという内容を記載した場合。

main→IFactory→CLoaderFactory→CLoaderManager→ //Test2.csvを読み込むLoaderが登録
IFactory→CLoaderFactory→CLoaderManager→ //Test.csvを読み込むLoaderが登録
IFactory→CTextureFactory→CTextureManager→ //Test.jpgが登録
IFactory→CTextureFactory→CTextureManage //Test.bmpが登録


外部ファイルについて。
外部ファイルを読み込めば良い、と言いましたが、
肝心の外部ファイルについて説明してなかったので、説明をします。
全部で3つです。


■Init.csv
RogueSample3_5.jpg

まず、Init.csv。
どの外部ファイルを読み込むのか?を指定しています。
分かりにくいパラメータだと思うのが、2番目のClassTypeですね。

実は外部ファイルを読み込むLoaderクラスを、派生させる事を想定しています。
現状未実装ですが、
1 … ファイルを開いて読み込む  (CLoaderFile)
2 … アーカイブファイルからデータを引っ張り出して読み込む  (CLoaderArchive)
にしようと思ってます。

CLoaderBaseを継承したCLoaderArchiveクラスの方は未実装なので、
現状、ClassType = 1で固定、と考えて良いです。


■TextureData.csv
RogueSample3_4.jpg

こちらのDrawerTypeについてですが、
こちらも派生の余地を残しております。

2Dではなく、3Dのモデルを描画したい場合、
2Dとは与えるパラメータが全く異なる事が予想される為、
(ライトの設定、背面カリングの設定、Z座標などなど。)
派生で対応しようと思ってます。

こちらも現状未実装なので、
DrawerType = 0で固定と考えてもらってOKです。


あと、VecNumは描画配列の添え字です。
↓こんな感じで、添え字を指定してピンポイントで消去したりする為に必要な情報です。
DeleteDrawer( 0 ); //描画配列の0番に登録されたオブジェクトを削除


■DrawerData.csv
RogueSample3_3.jpg

最後。
テクスチャ情報です。

画像を分割読み込みしない場合は、とりあえず全部-1を指定
分割する場合は、X軸、Y軸それぞれの分割数と、
分割した際に画像の縦幅と横幅のサイズがいくつになるのか
?を指定します。

上記では元の画像が256×256なので、
それぞれ2つずつに分割して、分割後のサイズは128になるよ、と記載しています。


最後に。
今回の付録(?)は下記の様になっています。

■Base
■Factory
┃┣CDrawerFactory.h
┃┣CDrawerFactory.cpp
┃┣CTextureFactory.h
┃┣CTextureFactory.cpp
┃┣CLoaderFactory.h
┃┣CLoaderFactory.cpp
┃┣IFactory.h
┃┗IFactory.cpp
■Manager
┃┣CDrawerManager.h
┃┣CDrawerManager.cpp
┃┣CLoaderManager.h
┃┣CLoaderManager.cpp
┃┣CTextureManager.h
┃┗CTextureManager.cpp
■Resource
┃┣CDrawer2D.h
┃┣CDrawer2D.cpp
┃┣CDrawerBase.h
┃┣CDrawerBase.cpp
┃┣CLoaderBase.h
┃┣CLoaderBase.cpp
┃┣CLoaderFile.h
┃┗CLoaderFile.cpp
■Support
 ┗CSingleton.h
main.cpp

■Resource
┣Init.csv
┣DrawerData.csv
┣TextureData.csv
┗grade.jpg


実行する際は、下記の手順になります。
【1】上記ソースコードがあるフォルダをコピーペースト
【2】リソースがあるフォルダの中身だけを、
   "●●●.vcxproj"とかいうファイルが存在するフォルダにコピーペースト


画像が表示されなかったりしたら、99%リソースの置き場所が間違ってる
と思われるので、フォルダの確認をお願いします。

【ソースコード一式】http://rudora3.web.fc2.com/RogueSample3.zip


【ここから余談】-----------------------------------------------------------
しかし、面白いですね。 こんだけcppやらhやら書きましたが、
ゲーム内部の制作には、ひとつも着手できてない
のです。
※しかも、ゲームの基盤は今回で完成ではありません。まだやる事があります。


知り合いから、
「3か月経ってもゲーム完成しないの?本当は挫折して遊んでるんじゃないの?」
とか言われて憤慨しそうになったことがあるのですが、

是非、上記のような作業が意外と時間がかかる
という事を分かって頂きたい。

※多分、キーボードでどんどん不可逆的に作業を進める、
といったイメージがあるのだろう。

実際には、"そもそものプログラムの構造を考える"時間や、
構造を考えてみたけど破綻したor改良法を見つけたから
作り直しor修正をしたりする手間もあるものである。
--------------------------------------------------------------------------


次回は、
Archiveファイルの読み込み→ゲーム内に反映と、
Moverクラスの実装
を行います。

※Moverクラス … 現状、単純にファイルを読み込んで表示だけをしてます。つまり、
「z」キーを押したら右に動く、といった動作が全く無いのです。
次は、これを実装します。

ちなみに、今作っている描画周りのシステムなどは、
パズルゲームなどにも転用します。

次回もお楽しみに!(`・ω・´)+

テーマ : ゲーム製作 関連 - ジャンル : ゲーム



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。