0

我已经编写了一些代码来创建我下载的卡片的 ArrayList,现在我正在尝试将它们洗牌,然后使用 paint 方法显示它们。如何使用 g.drawImage 显示十张卡片?

    import java.awt.Image;
import java.applet.Applet;
import java.util.*;

public class DeckofCards1 extends Applet {

public void init ( ) {
    String[] suits = {"c", "s", "h", "d"};
    String[] values = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "j", "q", "k"};

    ArrayList<Image> images = new ArrayList<Image>( );
    for(String suit : suits){
            for(String value : values){
                 Image img = getImage ( getDocumentBase ( ), "images/" + suit +              value + ".gif" );
      images.add(img);
                     }
    }
    Collections.shuffle ( images ); //get ten cards randomly?
    }

    public void paint ( Graphics g ) { //display ten cards here?

        g.drawImage ( img, 10, 10, this );
        g.drawImage ( img, 10, 10, this );
        g.drawImage ( img, 10, 10, this );      
        g.drawImage ( img, 10, 10, this );
        g.drawImage ( img, 10, 10, this );
        g.drawImage ( img, 10, 30, this ); //what goes in place of img (which I know isn't right, simply a placeholder for now
        g.drawImage ( img, 10, 30, this );
        g.drawImage ( img, 10, 30, this );
        g.drawImage ( img, 10, 30, this );
        g.drawImage ( img, 10, 30, this );

    }
}          
4

2 回答 2

1

我快速浏览了一下,您似乎可以使用这段代码来获取 img:

BufferedImage img = ImageIO.read(imageSrc);

来源:http ://docs.oracle.com/javase/tutorial/2d/images/drawimage.html

此外,根据您要绘制这些图像的位置,您可以将其放入循环并使用循环变量控制坐标。

在你的类中使图像成为一个变量(这样你就可以在绘制函数中使用它)。

public class DeckofCards1 extends Applet {

    private ArrayList<Image> images;
    ....

在您的 init 函数中,将图像创建行从

Image img = getImage ( getDocumentBase ( ), "images/" + suit + value + ".gif");

BufferedImage img = ImageIO.read(new File("images/" + suit + value + ".gif"));

在您的绘画功能中,对其进行更改,使其循环遍历图像数组,并为每个数组使用此方法绘制它

for(int i = 0; i < images.size(); i++) {

    g.drawImage(images.get(i), i*10, i*10, null);
}

如果您有图像,请查看此 pastebin 以获取应编译的代码的更新版本:http: //pastebin.com/43t7zhYL

使用不同的图像读取方法更新了 pastebin:http: //pastebin.com/15tigYFd

于 2013-01-17T09:14:56.647 回答
1

关于洗牌,Collections.shuffle ( images );images随机排列 的元素。但我建议添加这一行:

private final Random random = new Random(4454776669L);

Collections.shuffle ( images, random);改为使用。这里的数字 4454776669L 是伪随机数生成器的种子,当您使用相同的种子时,您会重现相同的随机数序列,如果您想重现相同的游戏或仅出于调试目的,这可能很有用。

于 2013-01-17T09:38:14.887 回答