スポンサーサイト

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

ゲーム制作状況 -2013/10/15版 -

今日の報告!

パズルゲームの方は、
---------------------------------------
・問題作成
・不具合修正
(単語Aと単語Bに隣接する空白ブロックの場合、
単語A確定で消える(オレンジ色になる)状態だったのに、
単語Bの連鎖キャンセルにより、青色に戻されてしまう問題を修正。)

・謎解きモード修正
(昇竜ぷよや、クイックターンやら出来る様にした処理を実行するように変更。)
・問題形式の追加

---------------------------------------
大体、上記の様な作業を行いました。

問題形式については「特定の単語を作れ」という形式を追加しました。

これで、問題形式は下記の5種類になります(・・)
---------------------------------
・●連鎖しなさい
・同時に「●●●」を●個作りなさい
・「●●●」を作りなさい
・フィールド上のブロックを全部消しなさい
・フィールド上のブロックを全部消しなさい(空白ブロックを除く)

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

余談
「●●●」を作りなさいって、
良く考えたら、同時に「●●●」を1個作りなさいという問題と同義だなぁと思った。

うーん…まぁ、いいか。
「同時に1個」というのも意味として変だし。


新作ゲームの方は、
---------------------------------------
・主人公の向きを表示する様に変更
・出口、入り口、レジなどのアイコン追加
・二次元配列の持ち方を変更

---------------------------------------
大体こんな感じ。

【参考画像】
Sample_20131015_1.jpg
(内部改修なので、表示上は、目立った変化は無いかも。)


で、二次元配列(データ保持の仕方)に関して、思った事を書いてみます。
"倉庫番"の様に、何かを動かすことが出来るゲームの場合、
マップ情報と、オブジェクトの情報は、
別の2次元配列で管理
した方が良いと思います。

-----------------------------------------
マップ … 床を表示する為の情報
オブジェクト … 主に衝突する物体の情報

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

また、オブジェクトに関しては複数重なる事も考えられるので、
情報を複数持てる様にした方が良いでしょう。
(罠の上に主人公が乗る。落ちているアイテムの上に主人公が乗るが、
 荷物が一杯で拾えない状態、など。)
----------------------------------------------
//表示する画像の位置と画像ハンドル
struct ObjectInfo {
int m_PosX;
int m_PosY;
int m_Handle;
};

//オブジェクト情報のvector
struct MapObjectInfo {
std:::vector< ObjectInfo > m_ObjectVec;
};

//オブジェクト情報のvectorの二次元配列
MapObjectInfo m_ObjectMap[ 10 ][ 10 ];
----------------------------------------------

移動するオブジェクトは、わざわざ二次元配列にしなくても良いんじゃ?
と思うかもしれませんが、
(ObjectInfoの一次元配列で管理する、など。)

それだと、移動の際に 座標 / マップチップのサイズで、
現在の位置(二次元配列の添え字)を算出するのが面倒なのと、

オブジェクトが増えると、
オブジェクト同士の衝突が相当面倒くさい事になるので、
二次元配列で管理するのが最適かな、と。

※ObjectInfoのPosX、PosYを調べないと衝突するか不明。
その為、自分以外のオブジェクトの座標を全部調べる必要あり。
(オブジェクトの大きさが1×1マス固定ではなく、2×1マス、2×2マスとか
 たくさんある場合は、大きさも考慮する必要あり。)

空間分割して衝突検知の負荷を軽くする事は可能ですが、
"倉庫番"や"ボンバーマン"などのある程度移動の仕方が固定されているゲームに置いては、
空間分割をする必要は無いと思います。




あと移動する際の処理手順としては、こんな感じになります。
------------------------------------------
【1】入力判定
【2】移動先のマスの、オブジェクト情報を調べる
【3】何もなければ、移動。
   何かあれば動かない、または、オブジェクトを押して動く。
【4】移動開始時、オブジェクトの二次元配列の情報を更新
【5】移動終了時、オブジェクトの二次元配列の情報を更新
【6】現在位置で、マップの二次元配列と判定を行う

(毒の床でダメージを受ける、どこかへワープする、等)
------------------------------------------
移動する際の判定は、オブジェクトは先。マップは後。といった感じです。

あと、二次元配列情報の更新が2回ありますが、
これは他の動くオブジェクトとの接触を避ける為です。

例:
右へ移動する場合下記の様な動作となります。
(0 … 移動可能、1 … 移動できない、 とする。)

~現在の状態~
0 1 0

~移動先決定~
0 1 1

~移動終了時~
0 0 1


移動開始時に、移動先に1を入れておく事により、
他のオブジェクト(敵とか)が自分の移動後の位置に来ないようにします。

で、移動完了した際、
移動開始前の位置にもう自分は居ないので、
自分が居た、という情報を削除
します。

この為、オブジェクト情報の更新が2回発生します。
===========================================
※2回の更新を1回にしても良いかもしれませんが、(移動開始時点で、0 0 1にする)
この場合、移動速度の速い敵が主人公の居た位置を通過すると、
画像が不自然に重なると予想されるので、2回に分けました。
===========================================


<今日のひとこと>
~追記予定~
スポンサーサイト

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

コメント
コメントの投稿
管理者にだけ表示を許可する



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