0

ダウンロードしたカードの ArrayList を作成するコードをいくつか書きましたが、今はそれらをシャッフルしてから paint メソッドを使用して表示しようとしています。g.drawImage を使用して 10 枚のカードを表示するにはどうすればよいですか?

    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

シャッフルに関してCollections.shuffle ( images );は、要素をimagesランダムに並べ替えます。しかし、次の行を追加することをお勧めします:

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

代わりに使用しCollections.shuffle ( images, random);ます。ここで、数値 4454776669L は疑似乱数ジェネレーターのシードです。同じシードを使用すると、同じ乱数のシーケンスが再現されます。これは、同じゲームを再現したい場合や、単にデバッグ目的で使用する場合に役立ちます。

于 2013-01-17T09:38:14.887 に答える
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);
}

画像がある場合にコンパイルするコードの更新バージョンについては、このペーストビンをチェックしてください: http://pastebin.com/43t7zhYL

別の画像読み取り方法を使用してペーストビンを更新しました: http://pastebin.com/15tigYFd

于 2013-01-17T09:14:56.647 に答える