랜덤 주사위 1~6개 돌리기
package hello;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import javax.swing.*;
class Dice{
int x,y; // 위치
Color c; // 주사위 배경 색상
int curr; // 현재 주사위 면
public Dice(int x,int y,Color c,int curr) {
this.x=x;
this.y=y;
this.c=c;
this.curr=curr;
}
public void setcurr(int curr) {
this.curr=curr;
}
public void paint(Graphics g) {
// 주사위 배경
g.setColor(c);
g.fillRect(x,y,70,65);
// 주사위 테두리
g.setColor(Color.black);
g.drawRect(x,y,70,65);
// 주사위 점
if (curr>=1) g.fillRect(x+10,y+10,15,15);
if (curr>=2) g.fillRect(x+30,y+10,15,15);
if (curr>=3) g.fillRect(x+50,y+10,15,15);
if (curr>=4) g.fillRect(x+10,y+40,15,15);
if (curr>=5) g.fillRect(x+30,y+40,15,15);
if (curr>=6) g.fillRect(x+50,y+40,15,15);
}
}
class MyFrame extends JFrame{
ArrayList<Integer> nums;
ArrayList<Dice> ds;
JLabel lb,lb2;
int size,ran;
final int csize=7;
int[] compare=new int[csize];
class MyPanel extends JPanel {
public MyPanel(int r) {
size=r;
setLayout(new BorderLayout());
nums=new ArrayList<Integer>(size);
ds=new ArrayList<Dice>(size);
for(int i=0;i<size;i++) {
ran=(int)((Math.random()*6)+1);
if(compare[ran]==0) {
nums.add(i,ran);
compare[ran]=1;}
else
i--;
}
if(size>=1) ds.add( new Dice(115,50,Color.white,nums.get(0)) );
if(size>=2) ds.add( new Dice(285,50,Color.white,nums.get(1)) );
if(size>=3) ds.add( new Dice(115,150,Color.white,nums.get(2)) );
if(size>=4) ds.add( new Dice(285,150,Color.white,nums.get(3)) );
if(size>=5) ds.add( new Dice(115,250,Color.white,nums.get(4)) );
if(size>=6) ds.add( new Dice(285,250,Color.white,nums.get(5)) );
lb=new JLabel(" - 현재 주사위 상태: "+nums);
lb2=new JLabel(" < 절대 중복 안 나옴!! >");
lb2.setOpaque(true);
lb2.setForeground(Color.red);
add(lb,BorderLayout.NORTH);
add(lb2,BorderLayout.SOUTH);
requestFocus();
setFocusable(true);
addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_ENTER) {
// compare배열 초기화
for(int i=0; i<csize; i++)
compare[i]=0;
for(int i=0;i<size;i++) {
int ran=(int)((Math.random()*6)+1);
if(compare[ran]==0) {
nums.set(i,ran);
compare[ran]=1;}
else
i--;
}
for(int j=0;j<size;j++)
ds.get(j).setcurr(nums.get(j));
repaint();
lb.setText(" - 현재 주사위 상태: "+nums);
}
}
}
);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
for(int i=0;i<size;i++)
ds.get(i).paint(g);
}
}
public MyFrame(String r,semiFrame obj) {
setTitle("주사위 "+r+"개");
setLocation(700,150);
setSize(500,400);
int r2=Integer.parseInt(r);
add(new MyPanel(r2));
setVisible(true);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
obj.setVisible(true);
}
});
}
}
class semiFrame extends JFrame{
String receive;
public semiFrame(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(330,100);
setLocation(700,150);
setLayout(new FlowLayout());
setTitle("주사위 선택");
String[] st= {"1","2","3","4","5","6"};
JComboBox cb=new JComboBox(st);
cb.setSelectedIndex(5);
JButton bt=new JButton("선택 완료");
add(cb);
add(bt);
setVisible(true);
bt.addActionListener(e->{
receive=(String)cb.getSelectedItem();
setVisible(false);
MyFrame p=new MyFrame(receive,this);
});
}
}
public class Game{
public static void main(String[] args) {
semiFrame s=new semiFrame();
}
}


