ボンバーマンの移動システムについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
bomb

ボンバーマンの移動システムについて

#1

投稿記事 by bomb » 16年前

はじめまして、今DXライブラリを使用してボンバーマンもどきを作っています。
一通りのシステムは完成したのですが、今のシステムは一度「→」を押すと1マス分移動してしまいます。
実際のものはドット単位で管理しているようにみえたので、そのように改良しようかと思ったのですが、
移動のアルゴリズムが予想以上に難しかったのでアドバイスをいただければと思い投稿しました。

単純に「→」を押せば数ドット移動、などは簡単なのですが
ブロック幅と、プレイヤーの当たり判定幅が同じなので少しでもブロックに接触していると移動できなくなったりするのです。
実物をプレイすると
ボンバーマン→○
ハードブロック→□
ソフトブロック→■

..○
□ □
といった状況の場合に↓を押すと

 ○
□ □
の状態になるまで↓を押しているのに右に移動してくれるようになっています。

..○
□■□
この状態だと↓を押しても移動しません。

この様な移動システムではどのように判定をしているのか、手順だけでもアドバイスをいただければと思います。
マップのデータは
mapdata[11][17]という配列に
0は何もなし、1はハードブロック、2はソフトブロックというように入っています。

SooA

Re:ボンバーマンの移動システムについて

#2

投稿記事 by SooA » 16年前

例えばマップで4x4の位置に居るとして

↓キーが押された場合に 4 のチップよりも
右に居るのか左に居るのか割り出します。
     ○→
□□□□□■
0 1 2 3 4 5
進行方向が判れば mapdata[x+1][y+1] を
チェックして通路であれば進行させる。

やりかたは色々とあると思いますが、
基本的な考え方としてはこんな感じです。

追記
4 と 5 が通路である場合
4 と 5 がブロックである場合
4 が 通路 5 がブロックである場合
4 が ブロック 5 が通路である場合
それぞれを考えてみてください。

bomb

Re:ボンバーマンの移動システムについて

#3

投稿記事 by bomb » 16年前

ありがとうございます。
無事に移動システムを完成させることができました。

SooA

Re:ボンバーマンの移動システムについて

#4

投稿記事 by SooA » 16年前

> 無事に移動システムを完成させることができました。
変な文章になってしまい、ダメかなと心配していましたが
完成してなによりです。

ご希望のものとは少し違うかもしれませんが、
それっぽいサンプルを作ったので
一応載せておきます。

閉鎖

“C言語何でも質問掲示板” へ戻る