我正在尝试编写一个applet来显示其他一些卡片。
我有一个包含52张卡片图片的文件夹。
我如何为Card对象的每个实例分配图像?
我是否需要在对象中创建一个52图像数组,然后为每张卡分配正确的索引?
由于
答案 0 :(得分:2)
我建议卡片应该是一个不可变的对象。 因此,我会在建造卡片时定义卡片的图像:
例如:
public class Card {
final int value;
final Suit suit;
final BufferedImage image;
public Card(int value, Suit suit) throws IOException {
this.value = value;
this.suit = suit;
File imageFile = new File("image-dir", suit + "-" + value + ".jpg");
this.image = ImageIO.read(imageFile);
}
public enum Suit {
Spades, Clubs, Diamonds, Hearts;
}
}
然后您可以填充这样的套牌:
Set<Card> deck = new HashSet<Card>();
for (int value = 1 ; value <= 13 ; value++) {
for (Suit suit : Suit.values()) {
deck.add(new Card(value, suit));
}
}
答案 1 :(得分:0)
是什么阻止您创建包含图像(image
的实例或您用于UI的任何内容)本身的字段java.awt.Image
?
答案 2 :(得分:0)
你看过enums了吗?您可以向getImage()
类添加Card
方法,该方法会根据卡片Rank
和Suite
返回正确的图片。这当然意味着图像文件的一致命名约定,例如
private static final String IMAGE_DIR = // image directory
public BufferedImage getImage() {
String fileName = suite + "_" + rank + ".jpg";
File file = new File(IMAGE_DIR, fileName);
return ImageIO.read(file);
}
您还应考虑缓存图像,以便每次需要时都不会从文件中读取图像。