//★ CARD シャッフルする 前田 稔
import java.awt.*;
import javax.swing.*;
import java.io.*;
import javax.imageio.ImageIO;
import java.util.*;
class Card_02 extends JFrame
{ CARD card;
int T[] = new int[48]; //シャッフルの配列
// Main
public static void main(String args[])
{ new Card_02();
}
// Constructor
public Card_02()
{ super("Image View");
card = new CARD("c:\\data\\test\\hanafuda.gif",51,75);
card.Shuffle(T,48);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(720,400);
setVisible(true);
}
// Paint Method
public void paint(Graphics g)
{ super.paint(g);
for(int i=0; i<48; i++)
card.view(g,T[i],(i%12)*56+20,(i/12)*80+46);
}
}
class CARD extends JFrame
{ private Image Img;
private int Height,Width,Hnum,Wnum;
int frameNum;
Random rand;
// Constructor
CARD(String filename, int ws, int hs)
{ Width= ws;
Height= hs;
Wnum=Hnum= 1;
//画像ロード
File infile = new File(filename);
Img = loadImage(infile);
Wnum= Img.getWidth(null)/Width;
Hnum= Img.getHeight(null)/Height;
frameNum = Wnum*Hnum;
if (Wnum<1 || Hnum<1)
System.out.println("Image File Error" + filename);
rand = new Random(); //乱数の初期化
}
// Sprite View
public void view(Graphics g, int n, int dx, int dy)
{ int sx, sy;
if (n >= frameNum)
{ System.out.println("Sprite Number Error" + n);
return;
}
sx = (n % Wnum) * Width;
sy = (n / Wnum) * Height;
if (Img != null)
{ g.drawImage(Img,dx,dy,dx+Width,dy+Height,sx,sy,sx+Width,sy+Height,this);
}
}
// Load Image
public static Image loadImage(File f)
{ try
{ Image img = ImageIO.read(f);
return img;
}
catch (IOException e)
{ throw new RuntimeException(e);
}
}
// n 枚のカードをシャッフルする
public void Shuffle(int t[], int n)
{ int i,j;
for(i=0; i<n; i++) t[i]= -1;
for(i=0; i<n; i++)
{ for(j=rand.nextInt(n); t[j]!=-1; j=(j+1)%n);
t[j]= i;
}
}
}
|