首页 > 解决方案 > 如何比较 Java 中随机生成的图像?

问题描述

所以我正在使用 Swing 在 Java 中制作一个名为 Rock、Paper 和 Scissors 的迷你游戏。在此处输入图像描述

如何将我的用户(左)图像与计算机(右)生成的图像进行比较?这样我就可以在中间放一个 JLabel 说明是否“你赢了!” 或“你输了!” 还是“画!”?

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

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!");
        }
    }
});

标签: javaswingx

解决方案


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

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()方法,您可以在其中完成所有设置工作......


推荐阅读