2013-03-25 78 views
1

我正在編寫一個Java程序,它允許用戶發送消息給機器人,告訴它在5x5網格上的位置。例如,如果我發送它'FRFFLF',這意味着前進,右轉90度,前進兩次,左轉90度然後前進。程序然後返回機器人在網格上的新位置。如何引導機器人

我不是在尋求解決方案,只是我的方法的一些指導方針。是否已有可用於此類程序的設計模式(所以我沒有重新發明方向盤),還是可以從頭開始編寫?

網格的底部(0,0和頂部將是(4,4)。

我想的是,機器人的位置可以被定義爲一個Java Point類和電網會?二維數組

會像下面是一個開始

public Point forward(Point p) { 
    p.x +=1; 
    return p; 
} 

有沒有人每次試圖寫一個這樣的程序是否有可能

編輯:?我雖然過t關於以下內容: 首先,我需要機器人的方向和當前位置。從那裏我將封裝網格,圍繞邊界創建一些規則。基本上我會更新機器人的位置,解釋傳遞給它的命令並更新機器人的位置。很顯然,機器人只需要在網格的邊界內移動。

+0

如果您按照以上實施方式調用forward(),但機器人已經在(4,4)處,會發生什麼情況。 :) – selbie 2013-03-25 17:23:41

+0

@selbie我已經計劃在每次搬遷之前進行邊界檢查。 – TheCoder 2013-03-25 17:25:26

+0

@selbie:我認爲更重要的是「前進」將始終將機器人移動到正確的位置。 – 2013-03-25 17:25:39

回答

1

首先,我會決定x和y的含義。在這種情況下,我會說當你移動「東」時,x變大,而當你移動「南」時,y變大。這通常是它在計算機圖形中的工作原理 - 0,0點通常位於左上角,如下所示:http://graphics.comsci.us/notes/coord.html

所以,我要做的是有兩個類,Robot和Grid。

網格類應具有這些性能:

  • 其minX,這是一個int
  • maxX的,這是一個int
  • MINY,這是一個int
  • MAXY,這是一個int

而這些方法:

  • 的isValid(INT的x,int y)對

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; 
    ... 
} 

有趣的是要注意,就是網格類可以存儲任何形狀。只要你檢查你想要去的地方是否有效,機器人並不關心網格的外觀。你可以把你的機器人從這個網格中抽出來,放到另一個網格上,它仍然可以以同樣的方式工作。

接下來的一點是讀取您發送給它的命令,我想。那時候,也許你會一次只讀一個字符串,然後執行它指定的命令。