2016-12-04 62 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