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 ) ; } }