悪いタイトルで申し訳ありませんが、私はそれを表現するより良い方法を持っていませんでした...
Wiiには任天堂による素晴らしいゲームがあります(そうです!)。9つのミニゲームがあり、私のお気に入りはタンクと呼ばれます!。自分自身を破壊することなく、COM敵の戦車を破壊することです。レベルのスクリーンショットは次のとおりです。
戦車を破壊する1つの方法は、弾丸を発射することです。このライムグリーンの敵の戦車は、2回跳ね返る(壁やブロックに対して)高速弾丸を発射します。プレイヤーの戦車が現在の場所に留まっていると、プレイヤーの戦車が即座に破壊される様子を見ることができます。中央の石灰戦車は、画像に描いた緑の道に沿って弾丸を発射できます。
私はアマチュアプログラマーとして、ライムタンクがプレイヤータンクを撃つためにどの方向に発火すべきかをどのように決定できるのかと思っていました。
私は自分でそれについて考えましたが、可能なアルゴリズムを思いつきませんでした。誰かに刺激を与えた場合の結論を説明します。説明を簡単にするために、壁は弾丸が跳ね返ることのできる表面であると想定しています。したがって、ブロックの孤立した長方形が4つの壁を形成します。
私は、弾丸のリコットが常に平行四辺形の片側にあるか、平行四辺形の反対の頂点になる2つの点を結論付けました。射撃する敵の戦車と、それが狙うプレイヤーの戦車は、必ずしも他の2つの頂点ではありませんが、平行四辺形の4つの側面のいずれかと同一線上にあることは間違いありません。以下は、平行四辺形を形成できる4つの可能な方法の説明です。
HOR-VERは、弾丸が最初に水平の壁に当たり、次に垂直の壁に当たります。
そして、私は立ち往生しています。敵の戦車とプレイヤーの戦車をマップ上で接続するラインを移動して、壁との2回のヒットで平行四辺形を形成するかどうかを考えましたが、敵の戦車とプレイヤーの戦車は平行四辺形の頂点と必然的に一致します。
また、アルゴリズムの一般的な流れがわかりません。アルゴリズムは次の2つの構造のいずれかを使用しますか、それとも両方とも間違っていますか?
- 考えられるパスを常に把握し、常に1つを最良としてマークし(最短、最も不明瞭、最も避けられない、または複数の基準に基づいた組み合わせおよび重み付けの評価)、残りは忘れます。すべての計算後に残ったものが最適です。
- 最初に弾丸で到達可能なすべての壁を決定し(これらの各壁に到達するために弾丸が他の壁に跳ね返る必要はありません)、次にこれらの各壁のすべての到達可能な範囲を決定します(遠くの点に到達できない場合があります)別の壁があなたの近くに立っている場合は跳ね返りのない壁)、再び跳ね返りで到達可能なすべての壁、およびこれらの壁に到達可能なすべての範囲を決定します。これらの4つのプロセスは、レイトレーシングと同様の方法で実行できます。各プロセス中に、プレイヤーの戦車が光線に当たった場合、その光線に従って弾丸の経路を見つけます。
私の意見では、このアルゴリズムは次の理由で把握するのが困難です。
- 弾丸はどの方向にも発射できます。そして
- 数学のように、線上に無限に多くの点がある壁には、無限に多くの点があります。
しかし、任天堂の人々はとにかくそれを作ったので、...アイデアを持っている人はいますか?