【问题标题】:How can you compare an image generated by random in Java?如何比较 Java 中随机生成的图像?
【发布时间】:2020-03-10 06:27:29
【问题描述】:

所以我正在使用 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!");
        }
    }
});

【问题讨论】:

  • 您不必比较图像,您必须比较您选择的内容和 random() 生成的内容的索引。那是简单的整数。

标签: java swingx


【解决方案1】:

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

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(){...}

因此,无论何时您将手势设置为向左或向右,您只需调用上面的这些代码 sn-ps。

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

【讨论】:

  • Gesture 正确的英文术语???我不会说英语很好...
  • 我对这一行有点困惑: Map leftImages;我应该把我的图片放在这里吗?
  • 是的 - 您需要创建该地图的一个实例并用图像填充它,我可以建议HashMap吗?
  • 很抱歉,我刚刚意识到您使用 ImageIcon 而不是 Image - 我的错,我刚刚在我的回答中纠正了这一点。
猜你喜欢
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多