2016-12-04 113 views
-1

我正在嘗試創建一個遊戲。有兩個球員由兩個矩形表示。兩個矩形不斷移動,並可使用WASD和上,下,左,右鍵重定向。無論走到哪裏,每個矩形都會留下自己的顏色。遊戲的目標是在一定的時間內爲你的顏色的大部分面板着色。我有一個想法,除了我製作遊戲的部分告訴我哪一部分是最常出現的顏色之外,應該怎麼做。它似乎並不存在這樣做,所以有辦法解決這個問題?如何在JPanel上找到主色?

+0

我不認爲你應該通過查看GUI來確定哪個玩家獲勝。 GUI應該只負責繪製結果。你應該有不同的方式跟蹤每個玩家繪製的區域,並用它來確定要繪製的內容。 – byxor

回答

0

當比賽結束,您可以創建代碼類似面板的BufferedImage

Dimension size = panel.getSize() 
BufferedImage image = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_RGB); 
Graphics2D g2d = image.createGraphics(); 
panel.paint(g2d); 

然後你可以使用getRGB(...)方法通過在BufferedImage所有像素進行迭代。然後你跟蹤每個玩家的像素。

編輯:

前面板畫上一個BufferedImage,你可以硬編碼了一些畫,看看你的算法是否正常工作。

例如:

//panel.paint(g2d); 
g2d.setColor(Color.RED); 
g2d.fillRect(0, 0, 5, 5); 
g2d.setColor(Color.GREEN); 
g2d.fillRect(20, 20, 10, 10); 
// now test your algorithm. 

既然你知道你剛塗上你應該知道你的算法的預期輸出的矩形的大小。一旦它與硬編碼數據協同工作,您就可以隨意使用隨機圖紙對其進行測試,確信它可以正常工作。

+0

我是這樣試過的。結果混淆了我,因爲它缺乏definiteness.'for的(INT I = 0; I <1000;我++){ \t \t \t \t對(INT J = 0;Ĵ<700; J ++){ \t \t \t \t \t int pixel = image.getRGB(i,j); \t \t \t \t \t如果(像素==新的色彩(255,0,0).getRGB()) \t \t \t \t \t \t P1 ++; \t \t \t \t \t如果(像素==新的色彩(0,255,0).getRGB()) \t \t \t \t \t \t P2 ++; \t \t \t \t \t} \t \t \t}'對不起,這是新的給我,所以我不知道這是否是正確的。 – ArcIX

+0

@ArcIX 1)不要繼續創建新的Color對象。在循環外部創建紅色和綠色的Color對象,並在循環外部獲取其int值。然後在循環內部進行比較。 2)「我不確定是否正確。」 - 這就是你測試的原因。從一個小區域開始,可能是一個顏色的5x5矩形,看看結果是什麼。然後添加兩個區域。請參閱編輯。 – camickr