2015-05-27 30 views
-1

我正在做一个Connect Four游戏,我需要为游戏设置我的作品,它们将是BlackRed,为我的算法提供一个int值,用于检测利用2D Array。该ConnectFourPieces构造函数接受的颜色,然后将其保存,像这样:getRGB的输出()

public ConnectFourPieces(Color color) 
{ 
    pieceColor = color; 
} 

的目标是有Red片可有1值,并Black件有2值。为了做到这一点,我玩pieceColor.toString(),但意识到输出不是我想要的。所以我发现getRGB()方法返回RGB code的颜色。当我与这个测试,如下所示:

Color col = Color.RED;//also was Color.BLACK System.out.println(col.getRGB());

我有一个RGB valueBlack-16777216Red-65536。我的问题是这样的:1)这个输出是否正确? 2)这个输出在所有系统上都会保持不变,我期望它是,但我不确定? 3)有没有更好的方法来检查一个片段的Color为其赋值int值?

+0

为什么downvote? – Ungeheuer

回答

2

你做了错误的方式。不要从其颜色中推断出该作品的类型,而应从其类型中推断出其颜色。

定义为片式的枚举:

public enum PieceType { 
    BLACK, RED 
} 

然后定义你的作品类,它应该根据其类型,颜色:

public class Piece { 
    private PieceType type; 

    public Piece(PieceType type) { 
     if (type == null) { 
      throw new NullPointerException("the piece type is mandatory"); 
     } 
     this.type = type; 
    } 

    public PieceType getType() { 
     return type; 
    } 

    public Color getColor() { 
     if (type == PieceType.BLACK) { 
      return Color.BLACK; 
     } 
     else { 
      return Color.RED; 
     } 
    } 
} 

注意,这使得它无法创建绿色或蓝色的碎片,这是件好事,因为它们没有意义。

0

颜色实现等于,所以为什么不是int myColor=Color.RED.equals(color)?1:2。 (或者如果要通过第三种颜色时发生错误,则需要使用两个三元运算符?

+0

它呢?我想我读的时候一定没有见过。 – Ungeheuer

0

Color.RED (or) Color.BLACK实际上会在内部传递sRGB值,当您传递范围(0,255)中的R,G和B值时。

sRGB值与R,G,B值不同如果你想定义一个不同于预定义的颜色常量的颜色,那么使用Color(int, int, int)构造函数,每个int分别代表R,G,B的范围0到255之间。

I got an RGB value for Black as -16777216 and Red as -65536 

那些是sRGB值,而不是RGB 。如果要打印出给定Color对象的实际R,G,B值,则调用toString()方法。

0

这听起来像你想要做的是使用Enum。怎么样是这样的:

public enum ConnectFourColor { 
    RED (1), BLACK(2); 

    private final int colorCode; 

    public ConnectFourColor(int colorCode) { 
     this.colorCode = colorCode; 
    } 

    public int getColorCode() { 
     return this.colorCode; 
    } 
} 

你会使用它,像这样:

ConnectFourColor redColor = ConnectFourColor.RED; 
System.out.println(redColor.getColorCode()); //prints 1 
+0

您在第二个代码示例中使用了完整的Scala – Clashsoft

+0

@Clashsoft如何将第二个示例转换为Java – Ungeheuer

+0

用变量的类型替换'var':ConnectFourColors redColor = ...'。 –

-1

我同意JP:

Color color = Color.black;   // Black RGB (0,0,0) 
    System.out.println(color.getRed()); // 0 
    color = Color.red;     // Red RGB (255,0,0) 
    System.out.println(color.getRed()); // 255 

具有取决于颜色的不同的结果相同的方法。