無題

  • ano
  • 2024/11/20 (Wed) 19:51:15
>スクラッチでプログラミングされたパックマンでありそうな動きですね。

定義ブロックで“画面を再描画せずに実行する”を利用して、
行きすぎたら戻す補正処理を描画しないようにすれば、
スクラッチでもちゃんとスムーズに動くようにできるはずです

そのためには自分が何処にいるのか追わなければなりません
色で壁と判定するにしても、
今いるピクセル単位の座標からタイル区切りの座標に変換して
位置を補正してから向きを変えれば荒ぶることはありません

パックマンをものさし代わりに目見当で壁を構築するのは
お描きであって、プログラミングではありません
正確なグリッドになりませんから、クッキーの配置も揃いません
これではゲームのロジックが破綻するのでゲームになりません

>利用できるものは利用しろ って感じなんでしょうね。

角を斜めに進むパックマンも厄介ですが、
ゴーストたちは曲がる前にすでに曲がる方向を決めていて、
交差点のタイルに入る半タイル前、
つまり実際に曲がる1タイル前から目の方向が変わっています
これが難しくて、当たったら曲がるという対処では遅いわけです

たとえば添付画像では、左へ進んでいて次の角で下に曲がります
このとき目は下ですが、しばらく左へスライドするように進みます

これを再現するには、ひとつ先のタイルを先読みして、
そのタイルに隣接する上下左右のタイルを調べ、
その中から反対方向と壁でふさがっている方向を除外して
ターゲットに最も近い方向を選びます
複数が同じ距離なら上、左、下、右の順序で優先します

目の向きを変えてもゴーストはスライドし続けて、
交差点の中心点にたどり着いたら方向転換します
口で説明するのは簡単ですが、実装するのはややこしい

モードの切替え時には進行方向を反転しますが、
これがまたややこしくて、行先を失ってエラーになったり、
壁を貫通したり、場外へ吹っ飛んでいきやすいのです

----

実のところ、交差点タイルの中心から1タイル前ではなく、
交差点タイルに入ってから半タイル前で目の向きを変えてました
原作と同じようにしてみましたが、脱線事故の虞があります

それと、原作より一歩の歩幅が広く、浮動小数点のこともあり
パックマンが交差点タイルの入口ぴったしに入れるわけではなく
次の一歩を進んでからターンを始まるのが気に食いませんでした

なので、1歩を分割してターンが早く始まるように直しました
これもそのせいで、引っかかって動かなくなるかもしれません

>物理エンジンがどういうものかさっぱりわからないのですが

重力だったり、物と物が衝突したときの反発や摩擦だったり、
力学的な法則をシミュレーションして再現するためのものです
Unityには当然のように実装されているので、
プログラミングせずともGUIである程度のことは簡単にできます

レトロゲームの時代にそんなものを気軽に使えるわけがなく
物理エンジンを使ってみたい、というのであれば
当時では実現できなかったアイデアを取り入れたほうが良い
スイカゲームはシンプルでありながら、あれだけ流行りました

Q REMASTERED
https://www.youtube.com/watch?v=8OlBmY6I1oA

>"Heart-Shaped"(未実装)の場合はどのように

ペイントソフトにその形のブラシを入れたら良いんぢゃない
(投稿前に、内容をプレビューして確認できます)