import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class hiroimono extends Applet implements Runnable{
int td[][] = new int[10][10];
int pnd[] = {20,18,20,20,21,18,23};
int pd[][][] = {{{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,1,0,0,1,0,0,0},
{0,0,1,1,1,1,1,1,0,0},
{0,0,0,1,0,0,1,0,0,0},
{0,0,0,1,0,0,1,0,0,0},
{0,0,1,1,1,1,1,1,0,0},
{0,0,0,1,0,0,1,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}},
{{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,1,0,0,0},
{0,0,0,1,1,1,1,0,0,0},
{0,0,0,1,1,1,1,0,0,0},
{0,0,0,1,1,1,1,0,0,0},
{0,0,1,1,1,1,1,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}},
{{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,1,1,1,1,0,0,0,0,0},
{0,0,1,1,1,1,0,0,0,0},
{0,0,0,1,1,1,1,0,0,0},
{0,0,0,0,1,1,1,1,0,0},
{0,0,0,0,0,1,1,1,1,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}},
{{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,1,1,0,0,0,0},
{0,0,0,0,0,1,0,0,0,0},
{0,0,0,1,1,1,1,1,0,0},
{0,0,0,1,0,1,0,1,0,0},
{0,0,0,1,1,1,1,1,0,0},
{0,0,0,0,0,1,0,0,0,0},
{0,0,0,0,0,1,0,0,0,0},
{0,0,0,0,0,1,0,0,0,0},
{0,0,0,0,0,1,0,0,0,0}},
{{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,1,1,1,0,0,0,0},
{0,0,0,0,0,1,0,0,1,0},
{0,0,0,0,0,1,0,0,1,0},
{0,0,1,1,1,1,1,1,1,0},
{0,0,1,0,0,1,0,0,0,0},
{0,0,1,0,0,1,0,0,0,0},
{0,0,0,0,0,1,1,1,0,0},
{0,0,0,0,0,0,0,0,0,0}},
{{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,1,1,0,0,0,0},
{0,0,0,0,1,1,0,0,0,0},
{0,0,1,1,1,1,1,1,0,0},
{0,0,0,0,1,1,0,0,0,0},
{0,0,0,0,1,1,0,0,0,0},
{0,0,0,0,1,1,0,0,0,0},
{0,0,0,0,1,1,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}},
{{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0},
{0,0,1,1,1,1,1,1,1,0},
{0,0,0,0,0,1,0,0,0,0},
{0,0,0,1,0,1,1,1,0,0},
{0,0,0,1,0,1,0,0,0,0},
{0,1,1,1,1,1,1,1,1,1},
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}}};
int pn = 0;
Choice cho = new Choice();
int mx,my;
int sw,co;
int dd,md;
int px,py,vx,vy;
Button rep;
Label spa;
Thread th = null;
Image os;
Graphics og;
public void init(){
os = createImage(330,350);
og = os.getGraphics();
setBackground(Color.white);
setLayout(new BorderLayout());
Panel pan = new Panel();
pan.setLayout(new FlowLayout());
pan.add(rep = new Button(" replay "));
pan.add(spa = new Label(" "));
pan.add(cho);
cho.addItem(" No.1 ");
cho.addItem(" No.2 ");
cho.addItem(" No.3 ");
cho.addItem(" No.4 ");
cho.addItem(" No.5 ");
cho.addItem(" No.6 ");
cho.addItem(" No.7 ");
cho.addItemListener(new MyListener());
add("South",pan);
R_set();
addMouseListener(
new MouseAdapter(){
public void mousePressed(MouseEvent e){
px = (e.getX() - 15) / 30;
py = (e.getY() - 15) / 30;
if(sw == 0){
if(td[py][px] == 1){
mx = px;
my = py;
sw = 1;
}
}else if(sw == 1){
switch(md){
case 1 : if(td[my][mx] == 1){
co --;
td[my][mx] = 0;
}
my = my - 1;
if(my < 0)my = 0;
dd = 1;
break;
case 2 : if(td[my][mx] == 1){
co --;
td[my][mx] = 0;
}
mx = mx + 1;
if(mx > 9)mx = 9;
dd = 2;
break;
case 3 : if(td[my][mx] == 1){
co --;
td[my][mx] = 0;
}
my = my + 1;
if(my > 9)my = 9;
dd = 3;
break;
case 4 : if(td[my][mx] == 1){
co --;
td[my][mx] = 0;
}
mx = mx - 1;
if(mx < 0)mx = 0;
dd = 4;
break;
}
}
repaint();
}
}
);
addMouseMotionListener(
new MouseMotionAdapter(){
public void mouseMoved(MouseEvent e){
vx = e.getX()-30*mx-30;
vy = e.getY()-30*my-30;
if(td[my][mx] == 0){
if((vy - vx < 0) && (vy + vx < 0) && (dd == 1))md = 1;
if((vy - vx < 0) && (vy + vx > 0) && (dd == 2))md = 2;
if((vy - vx > 0) && (vy + vx > 0) && (dd == 3))md = 3;
if((vy - vx > 0) && (vy + vx < 0) && (dd == 4))md = 4;
}else if(td[my][mx] == 1){
if((vy - vx < 0) && (vy + vx < 0) && (dd != 3))md = 1;
if((vy - vx < 0) && (vy + vx > 0) && (dd != 4))md = 2;
if((vy - vx > 0) && (vy + vx > 0) && (dd != 1))md = 3;
if((vy - vx > 0) && (vy + vx < 0) && (dd != 2))md = 4;
}
repaint();
}
}
);
rep.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
R_set();
repaint();
}
});
}
class MyListener implements ItemListener{
public void itemStateChanged(ItemEvent e){
Choice cho = (Choice)e.getSource();
switch(cho.getSelectedIndex()){
case 0 : pn = 0 ; R_set() ; break;
case 1 : pn = 1 ; R_set() ; break;
case 2 : pn = 2 ; R_set() ; break;
case 3 : pn = 3 ; R_set() ; break;
case 4 : pn = 4 ; R_set() ; break;
case 5 : pn = 5 ; R_set() ; break;
case 6 : pn = 6 ; R_set() ; break;
}
repaint();
}
}
public void paint(Graphics g){
og.setColor(Color.white);
og.fillRect(0,0,330,350);
og.setColor(Color.gray);
for(int k1 = 0;k1 < 10;k1 ++){
og.drawLine(30*k1+30,15,30*k1+30,315);
og.drawLine(15,30*k1+30,315,30*k1+30);
}
for(int k1 = 0;k1 < 10;k1 ++){
for(int k2 = 0;k2 < 10;k2 ++){
if(td[k2][k1] == 1){
for(int cc = 0;cc < 15;cc ++){
og.setColor(new Color(cc*12,cc*12,cc*12));
og.fillOval(k1*30+15+cc,k2*30+15+cc,30-2*cc,30-2*cc);
}
}
}
}
if((sw == 1) && (co != 0)){
for(int cc = 0;cc < 15;cc ++){
og.setColor(new Color(255,cc*12,cc*12));
og.fillOval(mx*30+15+cc,my*30+15+cc,30-2*cc,30-2*cc);
}
}
og.setColor(Color.green);
if(sw == 1){
switch(md){
case 1 : og.drawLine(mx*30+20,my*30+15,mx*30+30,my*30+5);
og.drawLine(mx*30+22,my*30+15,mx*30+30,my*30+7);
og.drawLine(mx*30+30,my*30+5,mx*30+40,my*30+15);
og.drawLine(mx*30+30,my*30+7,mx*30+38,my*30+15);
break;
case 2 : og.drawLine(mx*30+45,my*30+20,mx*30+55,my*30+30);
og.drawLine(mx*30+45,my*30+22,mx*30+53,my*30+30);
og.drawLine(mx*30+55,my*30+30,mx*30+45,my*30+40);
og.drawLine(mx*30+53,my*30+30,mx*30+45,my*30+38);
break;
case 3 : og.drawLine(mx*30+20,my*30+45,mx*30+30,my*30+55);
og.drawLine(mx*30+22,my*30+45,mx*30+30,my*30+53);
og.drawLine(mx*30+30,my*30+55,mx*30+40,my*30+45);
og.drawLine(mx*30+30,my*30+53,mx*30+38,my*30+45);
break;
case 4 : og.drawLine(mx*30+15,my*30+20,mx*30+5,my*30+30);
og.drawLine(mx*30+15,my*30+22,mx*30+7,my*30+30);
og.drawLine(mx*30+5,my*30+30,mx*30+15,my*30+40);
og.drawLine(mx*30+7,my*30+30,mx*30+15,my*30+38);
break;
}
}
if(co == 0){
og.setColor(Color.white);
og.fillRect(0,0,330,350);
og.setFont(new Font("",Font.PLAIN,32));
og.setColor(Color.red);
og.drawString("clear !!!",120,180);
og.drawRect(80,150,170,40);
og.drawRect(83,153,164,34);
}
g.drawImage(os,0,0,this);
}
public void R_set(){
for(int k1 = 0;k1 < 10;k1 ++){
for(int k2 = 0;k2 < 10;k2 ++){
td[k2][k1] = pd[pn][k2][k1];
}
}
sw = 0;
dd = 0;
co = pnd[pn];
}
public void start(){
if(th == null){
th = new Thread(this);
th.start();
}
}
public void stop(){
th = null;
}
public void run(){
while(th != null){
try{
Thread.sleep(100);
}
catch (InterruptedException e){
}
}
}
public void update( Graphics g ){
paint( g ) ;
}
}
