2013-03-20 67 views
2

因此,我正在做一個Java課程介紹的項目,看起來我選擇的東西超出了我所能做的。 :P
任何幫助將不勝感激。這是我遇到的問題是什麼:簡單的java遊戲:填充由移動光標繪製的圖形

你必須留下一個顏色的線,因爲它去的是由玩家控制(前進或 轉90°)的光標。如果你設法通過你自己的線去 並關閉任何形狀的多邊形(只有直角 雖然),但它的表面將顏色變成線條的顏色。

我可以檢測到這種情況何時出現,但我有點迷路,因爲如何實際填充剛剛關閉的正確多邊形。我似乎無法想象一種可能涵蓋任何情況的算法。

我看了一下掃描線填充算法,但我認爲在地圖上已經有一些多邊形已經填滿時會出現問題。 該填充算法將是完美的,如果我有一種方法在多邊形內找到一個點,但是,因爲有很多不同的可能性,我想不出一個通用的規則。

我正在使用數組2x2的整數,其中每種顏色都由一個數字表示。

有沒有人有如何解決這個問題的想法?

+0

你能發表一些你的代碼嗎?到目前爲止嘗試過的東西? – Aboutblank 2013-03-20 13:49:54

回答

1

如果您可以檢測到這種情況,那麼可以通過非常簡單的方式解決這個問題。問題是選擇哪個點作爲填充的起點。簡單的答案是:嘗試所有這些。當然,只有在與光標所在位置相鄰的點開始時纔有意義。在這種情況下,您最多可以檢查8個點。更好 - 如果當前點形成多邊形,至少其中2個已經被繪製。

所以你有8點檢查。從每個點開始進行8次填充。

兩件事你應該記住:

  1. 你應該嘗試,以填補該地區在你的領域的克隆版本,能夠得到回來,如果floodfill不會找到一個多邊形。

  2. 第二次啓動floodfill,稍後您應該重新使用此字段的克隆版本以查看它是否已填充到那裏。這將允許您至多檢查一次每個點,這將使您的8次填充幾乎與1次填充一樣快。

+0

哇,感謝您的快速響應! – 2013-03-20 14:10:45