スポンサーサイト

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

DXライブラリでゲームを作ることにした!(`・ω・´)

何かゲームを作りたいなーとか言いながら、
今はゲームで使われてる技術の習得を進めるばかりで、

ゲームの中身の部分は作れない状態となっております。
(そもそも、使われてる技術とか定石とかが多すぎるのですよ)

しかし、
何でもいいから完成度の高い作品を作ってみようかなと思いました。
そもそも何か作ったものが無いとヤバイですし。


で、とりあえずローグライクゲームをつくろうかな、と思います。
(風来のシレン、ポケモンダンジョン系)


ローグライクゲームは、実は以前作ったことがあるんですけど、
C++を知らない状態で書いたので、
本当にソースコードが無残なものとなってました。


まぁ、なので 提出作品を作ると共に、
中規模ゲーム開発出来るのかな?という挑戦でもあります。



で、今日は
敵が主人公へ向かってくるようにするにはどうすればよいか?
という部分を考えてみました。

A*アルゴリズムという定石もあるのですが、
今回は至極単純な方法をとりました。

どうやるかというと、まず2次元配列のフィールドマップを定義します。
struct MY_MAP{
int distance; //主人公からの距離
int m_flag; //マップの種類 (床、壁など)
};
MY_MAP g_map[10][10];


で、とりあえずdistanceを全部99にします。

【参考画像】
ローグ
$は主人公とします。)

次に、再帰関数で主人公の位置から距離を計算します。


void Test(int x, int y, int dist){
g_map[y][x + 1] = dist;
if(x + 1 < 10 && g_map[y][x + 1].flag != MAP_WALL){ //右が壁ではなく、2次元配列の添え字内なら
if(g_map[y][x + 1].distnce > dist){ //右のdistanceの値より、小さければ
Test(x + 1, y, dist + 1);
}
}
//以下略(左、上、下)
}

//呼び出す側
Test(player.x, player.y, 0);


これを呼ぶと、最初は0なのでどんどんdistanceが最短の値で書き変えられていきます。
---------------------
99 > 0    distance = 0
99 > 1    distance = 1
99 > 2    distance = 2

---------------------
↓更新後の様子

【参考画像】
ローグ2

で、敵は4方向のdistanceの値を見て、一番少ない方へ移動します。

終わり。

実に単純な方法です!
広大なマップだと、書き換えが何度も起こって処理に時間がかかるかもしれませんが、
その時は、主人公から30歩分の範囲まで、みたいに制限してやればよいでしょう。

そもそも、全然 見えないところから敵が近付いてくるのは理不尽です。


ついでに、障害物が沢山あっても的確な距離を出してくれます。

【参考画像】
ローグ3
Xが壁です。 (移動できない部分)

このアルゴリズムは、シミュレーションRPGの主人公の移動範囲の表示とかでも
使われているんじゃないかな、と。
(シミュレーションRPG・・・バハムートラグーンとかのジャンル。)

まぁ、ともかく中規模のローグライクゲームに挑戦します。
スポンサーサイト

テーマ : ゲーム - ジャンル : ゲーム

コメント

No title

これはDXライブラリを使用する必要性はあるのですか?

No title

予め、初期化・後処理、リソース管理機構などがあるので、
一番 作業が進めやすい&開発期間が短くなるかな 、と思いました。

まず開発の簡単なもので練習して、
で、後々 描画順の管理や、リソース管理など、
全部自分で実装していこうかな、と。

・・・んー。
時間はかかりますが、最初から全部自分で実装して行った方が
企業に対して提出する作品としては良いかも・・・?
(時間的に)

No title

ゲーム会社を目指すならDXライブラリは使用しない方がいいと思いますよ!
このブログは勉強の為になるので応援してます、頑張ってください!

No title

そうでしたか!
分かりました アドバイス有り難うございます!v-290

DirectXの方で、全て自分で実装して行こうと思いますv-411
(あと、これからも更新頑張ります!)
コメントの投稿
管理者にだけ表示を許可する



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