所以我正在使用 Swing 用 java 制作一个名为“石头、剪刀、布”的迷你游戏。
如何将我的用户(左)图像与计算机(右)生成的图像进行比较?这样我就可以在中间放一个 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!");
}
}
});
最佳答案
对于初学者,您可以使用相应的枚举来映射您的图像。那么您可以轻松地比较手势的值,而不是比较图像。
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 :
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);
这同样适用于左侧图像。 map 的设置应该在应用程序的一开始就进行。这样做的效果是,您仅加载一次图像,并且可以一次又一次重新使用它们。最佳实践是创建一个 init()
方法,您可以在其中执行所有设置操作...
关于java - 如何比较 Java 中随机生成的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58854361/