java - 如何比较 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!");
}
}
});
解决方案
对于初学者,您可以使用相应的枚举映射您的图像。那么您可以轻松地比较手势的值,而不是比较图像。
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()
方法,您可以在其中完成所有设置工作......
推荐阅读
- python - Python/PYQT5-隐藏菜单时崩溃,如果从主窗口运行
- javascript - Facebook Messenger 插件不会关闭
- ignite - 使用 Apache ignite 的 Web 会话集群。访问第二台服务器时会话无效
- android - 如何打开 MIUI 通知设置?
- css - 你可以使用视频作为背景css吗?
- fiware - 配置文件 BROKER_DATABASE_HOST Docker
- python - 更新字典列表中的值
- javascript - REACT NATIVE [TypeError: undefined is not an object (evalating 'item.type.displayName')]
- android - 如何迭代地图
- android - 是否可以将视图移动到 LinearLayout 的最左下角?