0

さて、私はグリッドと呼ぶ文字の2次元ベクトルを持っています。70 x 30としましょう。グリッドが作成されると、各位置が自動的に「x」で埋められます。

グリッドを表示する機能があります。したがって、この関数を呼び出すと、xの70x30グリッドがコンソールに表示されます。

グリッドの特定のx、y座標にある文字を別の文字に本質的に置き換えるために呼び出す別の関数があります。ポイントは正確にランダム/分散しているわけではありません。私は基本的にグリッドの端の点から始めて、ジグザグの線を別の端に描きます。すべてのポイントは事前に決定されています。プロットするポイントがたくさんあるので、手動で行うのは非効率的です。

これが私がそれをすることを考えていた方法です:

  • ダブルforループ、幅、高さを作成し、それらをiとjと呼びます
  • i =(a || b || c || d ...)&& j =(e || f || g ..)の場合

そして、基本的に、考えられるシナリオごとにその退屈なプロセスを実行します。確かに、はるかに簡単で単純な方法があります笑。任意の提案をいただければ幸いです。ありがとう!

4

1 に答える 1

0

マップを使用してポイントを事前に決定できる場合 (レベル エディターまたはその他の固定パターンの場合のように)、タイルがどうなるかの x/y 座標の辞書を作成します。辞書を反復処理し、それぞれの置換を行います。

ポイントが事前に決定されていないが、線やブロブなどのパターンに従っている場合は、線/ブロブ/その他を描画するメソッドを作成し、それを何度も呼び出します。メソッドは、どのタイルを置き換えるかを決定し、それらを置き換えます。

ところで、このような 2D チェックと処理を行う際には、「デルタ」を持つと呼ばれるトリックがあります。たとえば、xdelta=-1、ydelta=0 は西、xdelta=1、ydelta=1 は北東です。デルタを使用すると、関数を異なるデルタで 2 回、4 回、または 8 回実行できます。8 つの方向すべてを単独で試す必要はなく、デルタの方向を使用するだけで異なる方向に移動します。デルタも使用できます。たとえば、進んでいない方向に境界外に出ることはできないため、必要に応じて境界チェックを駆動します。次に、さらに進んで、すべての方向、方向を反転する関数、方向を 90/45 度回転させる関数の列挙を行うことができます (列挙されている場合は非常に単純です。列挙に 2 または 1 を追加して、新しい方向を返すだけです)。など、

だから私は次のようなものを持っているかもしれません

function drawLine(int xstart, int ystart, int xdelta, intydelta)

xstart、ystart で開始し、タイルを O に置き換え、xdelta を x に追加し、ydelta を y に追加し、タイルを O に置き換えて、エッジから落ちるまで繰り返します。

于 2013-03-12T22:31:02.230 に答える