如何比较 Java 中随机生成的图像?

How can you compare an image generated by random in Java?

所以我正在 java 使用 Swing 制作一个名为 Rock, Paper, and Scissors 的小游戏。

如何将我的用户(左)图像与计算机(右)生成的图像进行比较?这样我就可以在中间放置一个 JLabel,说明是 "You Win!" 还是 "You Lose!" 还是 "DRAW!"?

这是我的代码,我试图弄清楚如何启用图像比较:

btrock.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        user.setIcon(new ImageIcon("ROCK LEFT.PNG"));
        int index = (int) (Math.random() * (images.length - 0));
        computer.setIcon(new ImageIcon(images[index]));
        String blah = new Integer(index).toString();
        if(user.getIcon() == computer.getIcon(images[index])){
            lbl1.setText("DRAW!");
        }
    }
});

对于初学者,您可以使用相应的枚举映射图像。那么你可以轻松地比较手势的值而不是比较图像。

enum Gesture {ROCK, SCISSOR; PAPER}

Map<Gesture, ImageIcon> leftImages;
Map<Gesture, ImageIcon> rightImages;

Gesture rightGesture;
Gesture leftGesture;

void setLeftGesture(Gesture gesture) {
    leftGesture = gesture;
    setLeftImage(leftImages.get(gesture);
}

//TODO
void setRightGesture(...);

boolean isEqualGesture(){
    return rightGesture == leftGesture;
}

boolean leftWins(){
    return rightGesture == Gesture.ROCK && leftGesture == Gesture.PAPER;
}

//TODO
boolean rightWins(){...}

因此,无论何时向左或向右设置手势,您只需调用上面的这些代码片段即可。

public void actionPerformed(ActionEvent e) {
    //let's assume we are on rocks:
    setLeft(Gesture.ROCK);
    setRight(randomGesture());

    if(isEqualGesture()) {
        //write "draw" in your text box
    }else if(leftWins()){
        //player did win, write a notification
    }else if(rightWins()){
        //computer did win
    }
}

可能的实现

创建地图:

Map<Gesture, ImageIcon> rightImages = new HashMap<>();
ImageIcon rightRock = new ImageIcon...//i don't know that part of your implementations
ImageIcon rightScissor = ...
ImageIcon rightPaper = ...
rightImages.put(Gesture.ROCK, rightRock);
rightImages.put(Gesture.SCISSOR, rightScissor);
rightImages.put(Gesture.PAPER, rightPaper);

左图也是如此。地图的设置应该发生在你的应用程序的最开始。这样做的效果是,您 只加载一次图像 并且可以 一次又一次地重复使用它们 。最佳做法是创建一个 init() 方法,您可以在其中进行所有设置...