首先,我會決定x和y的含義。在這種情況下,我會說當你移動「東」時,x變大,而當你移動「南」時,y變大。這通常是它在計算機圖形中的工作原理 - 0,0點通常位於左上角,如下所示:http://graphics.comsci.us/notes/coord.html
所以,我要做的是有兩個類,Robot和Grid。
的網格類應具有這些性能:
- 其minX,這是一個int
- maxX的,這是一個int
- MINY,這是一個int
- MAXY,這是一個int
而這些方法:
的Robot類應具有這些性能:
- 位置,這是一個點
- 取向,這是一個方向
- 網格,其中包含網格對象
它也應該有這些方法:
不要緊,你如何存儲的方向 - 0.1 ,2,3或「北」,「東」,「南」,「西」或「上」,「右」,「下」,「左」或甚至0,90,180,270,360 (度)或弧度。重要的是你在使用方向時一致。
現在,在left()
和right()
之內,您可以更改機器人的方向。所以,你可以做這樣的事情:
public void left() {
switch (orientation) {
case "north": orientation = "west"; break;
case "east": orientation = "north"; break;
...
}
}
你會改變方向的順序,你會做他們以相反的順序在right()
功能。
裏面forward()
是你與grid
對象交互:
public void forward() {
switch (orientation) {
case "north":
if (grid.isValid(position.x, position.y+1)) {
position.y += 1;
} else {
System.out.println("Can't go there!");
}
break;
...
}
有趣的是要注意,就是網格類可以存儲任何形狀。只要你檢查你想要去的地方是否有效,機器人並不關心網格的外觀。你可以把你的機器人從這個網格中抽出來,放到另一個網格上,它仍然可以以同樣的方式工作。
接下來的一點是讀取您發送給它的命令,我想。那時候,也許你會一次只讀一個字符串,然後執行它指定的命令。
如果您按照以上實施方式調用forward(),但機器人已經在(4,4)處,會發生什麼情況。 :) – selbie 2013-03-25 17:23:41
@selbie我已經計劃在每次搬遷之前進行邊界檢查。 – TheCoder 2013-03-25 17:25:26
@selbie:我認爲更重要的是「前進」將始終將機器人移動到正確的位置。 – 2013-03-25 17:25:39