2017-01-06 6 views
0

私は現在、火星探査機のカタで作業中です。私は、ローバーが前後に移動して方向['N'、 'E'、 'S'、 'W']を変更できる10x10グリッドを作成しました。グリッドは実際には球形の惑星を表しているため、ローバーは完全に消えるのではなく、10x10のグリッドにラップする必要があります。私はラッピングをコーディングしようとしています。より多くの文脈に含まれるオブジェクト。私は現在、ローバーが折り返すべきケースを判断するためにif/elseステートメントを使用していますが、私はそれをオーバーコンプリートしていることを知っています。 switch文はより効率的でしょうか?または、何とかループを使用できますか?私はJavascriptを初めて使う人です。本当にありがとう。Javascriptでオブジェクトをグリッドにラップするにはどうすればよいですか?

var myRover = { 
    position: [[0],[0]], 
    direction: 'N', 
    roverDirections = ['N', 'E', 'S', 'W'], 
    marsGrid: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], 
    obstacles: []; 
}; 

if (command === 'f') { 

if ((myRover.position[[0],[0]]) && (myRover.direction === 'S')) { 
    myRover.position[[10],[0]]; 
} 

else if ((myRover.position[[0],[0]]) && (myRover.direction === 'W')) { 
    myRover.position[[0],[10]]; 
} 

if ((myRover.position[[0],[10]]) && (myRover.direction === 'E')) { 
    myRover.position[[0],[0]]; 
} 

else if ((myRover.position[[0],[10]]) && (myRover.direction === 'S')) { 
    myRover.position[[10],[10]]; 
} 

if ((myRover.position[[10],[0]]) && (myRover.direction === 'N')) { 
    myRover.position[[0],[0]]; 
} 

else if ((myRover.position[[10],[0]]) && (myRover.direction === 'W')) { 
    myRover.position[[10],[10]]; 
} 

if ((myRover.position[[10],[10]]) && (myRover.direction === 'N')) { 
    myRover.position[[0],[10]]; 
} 

else if ((myRover.position[[0],[0]]) && (myRover.direction === 'E')) { 
    myRover.position[[10],[0]]; 
} 


} 
+0

で新しい位置をdeterminだろうか?そうであれば、番号が '<0 'の場合には'> 10 'または' 'counter = 10'なら' counter = 0'を作ることができます – Loaf

+0

構文エラーがあります: 'roverDirections ='は'roverDirections:'、 '障害物の後に'; 'を削除する、' myRover.position [[0]、[0]] 'も意味をなさない。 – Xufox

+0

周囲のgridPointsに "ポインタ"を付けてgridPointオブジェクトを定義すると、簡単にエッジを接続できます。移動すると、x、y座標の代わりにローバーのcurrentGridPointを変更します – d3vi4nt

答えて

1

オブジェクトを使用して、特定の方向のローバーの新しい位置を計算することができます。

directions = { 
    N: [0, 9], // 9 because length of x - 1 and the positive remainder operator 
    W: [9, 0], // 9 because length of y - 1 
    O: [1, 0], 
    S: [0, 1] 
}; 

次に、あなたはより多くのコードが正しい行っているところでカウンタをインクリメントし、デクリメントはおそらくあり

direction = 'S'; 
newPos = [ 
    (oldPos[0] + directions[direction][0]) % 10, 
    (oldPos[1] + directions[direction][1]) % 10 
]; 
+0

forループやwhileループでもこれを行う方法はありますか? – universesurfer

+0

複数のポジションを変更したい場合は、選択したループで上記を囲みます。 –

関連する問題