import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class b_box extends Applet implements Runnable{
Thread th = null;
Image os;
Graphics og;
int td[][] = new int[10][10];
int at[][] = new int[10][10];
int ds,co;
int px,py;
int lg = 0,ln = 1;
int lx,ly,ld,lf=0,cf,hf=1;
Color c1,c2,c3;
Button ng,op;
Label sp;
public void init(){
os = createImage(420,420);
og = os.getGraphics();
setBackground(Color.white);
setLayout(new BorderLayout());
Panel pan = new Panel();
pan.setLayout(new FlowLayout());
pan.add(ng = new Button(" new game "));
pan.add(sp = new Label(" "));
pan.add(op = new Button(" open/close "));
add("South",pan);
addMouseListener(
new MouseAdapter(){
public void mousePressed(MouseEvent e){
px = (e.getX()-60)/30;
py = (e.getY()-60)/30;
if((e.getX() > 90)&&(e.getX() < 330)&&(e.getY() > 30)&&(e.getY() < 60)){
lg = 0 ; ln = px ; lf = 0 ; cf = 0 ;
}
if((e.getX() > 30)&&(e.getX() < 60)&&(e.getY() > 90)&&(e.getY() < 330)){
lg = 1 ; ln = py ; lf = 0 ; cf = 0 ;
}
if((e.getX() > 360)&&(e.getX() < 390)&&(e.getY() > 90)&&(e.getY() < 330)){
lg = 2 ; ln = py ; lf = 0 ; cf = 0 ;
}
if((e.getX() > 90)&&(e.getX() < 330)&&(e.getY() > 360)&&(e.getY() < 390)){
lg = 3 ; ln = px ; lf = 0 ; cf = 0 ;
}
if((hf == 1)&&(e.getX() > 90)&&(e.getX() < 330)&&(e.getY() > 90)&&(e.getY() < 330)){
at[py][px] = (at[py][px] + 1) % 2;
lf = 0;
}else{
lf = 0;
}
repaint();
}
}
);
ng.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
b_set();
repaint();
}
});
op.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
hf = -1 * hf;
lf = 0;
repaint();
}
});
c1 = new Color(255,102,102);
c2 = new Color(255,0,0);
c3 = new Color(255,255,153);
b_set();
}
public void paint(Graphics g){
og.setColor(Color.white);
og.fillRect(0,0,420,420);
for(int k1 = 1;k1 < 9;k1 ++){
for(int k2 = 1;k2 < 9;k2 ++){
og.setColor(c3);
og.fillRect(k1*30+60,k2*30+60,30,30);
if(td[k2][k1] == 1)b_draw(k1*30+60,k2*30+60,2);
}
}
og.setColor(Color.gray);
for(int k1 = 0;k1 < 8;k1 ++){
og.drawRect(k1*30+90,30,30,30);
og.drawRect(k1*30+90,360,30,30);
og.drawRect(30,k1*30+90,30,30);
og.drawRect(360,k1*30+90,30,30);
}
switch(lg){
case 0 : og.setColor(Color.black) ; og.fillRect(ln*30+60,30,30,30);
og.setColor(Color.white) ; og.drawLine(ln*30+60,35,ln*30+90,35) ; og.drawLine(ln*30+60,40,ln*30+90,40);
lx = ln ; ly = 0 ; ld = 3 ;
og.setColor(c1) ; og.fillRect(lx*30+72,ly*30+60,6,30);
break;
case 1 : og.setColor(Color.black) ; og.fillRect(30,ln*30+60,30,30);
og.setColor(Color.white) ; og.drawLine(35,ln*30+60,35,ln*30+90) ; og.drawLine(40,ln*30+60,40,ln*30+90);
lx = 0 ; ly = ln ; ld = 0 ;
og.setColor(c1) ; og.fillRect(lx*30+60,ly*30+72,30,6);
break;
case 2 : og.setColor(Color.black) ; og.fillRect(360,ln*30+60,30,30);
og.setColor(Color.white) ; og.drawLine(385,ln*30+60,385,ln*30+90) ; og.drawLine(380,ln*30+60,380,ln*30+90);
lx = 9 ; ly = ln ; ld = 2 ;
og.setColor(c1) ; og.fillRect(lx*30+60,ly*30+72,30,6);
break;
case 3 : og.setColor(Color.black) ; og.fillRect(ln*30+60,360,30,30);
og.setColor(Color.white) ; og.drawLine(ln*30+60,385,ln*30+90,385) ; og.drawLine(ln*30+60,380,ln*30+90,380);
lx = ln ; ly = 9 ; ld = 1 ;
og.setColor(c1) ; og.fillRect(lx*30+72,ly*30+60,6,30);
break;
}
while(lf == 0){
switch(ld){
case 0 : lx ++;
if(lx == 9){
og.fillRect(lx*30+60,ly*30+72,30,6);lf = 1;
}else if(td[ly][lx]==1){
lf = 1;
}else if((lx==1)&&((td[ly-1][lx]==1)||(td[ly+1][lx]==1))){
og.setColor(c2) ; cf = 1 ; og.fillRect(lx*30+60,ly*30+72,30,6);
og.fillOval(lx*30+78,ly*30+69,13,13);
ld = 2 ;
}else if(td[ly][lx+1]==1){
og.fillRect(lx*30+60,ly*30+72,30,6);
lf = 1;
}else if((td[ly-1][lx+1]==1)&&(td[ly+1][lx+1]==1)){
og.setColor(c2) ; cf = 1 ; og.fillRect(lx*30+60,ly*30+72,30,6);
og.fillOval(lx*30+78,ly*30+69,13,13);
ld = 2 ;
}else if(td[ly-1][lx+1]==1){
og.fillArc(lx*30+60-18,ly*30+60+12,36,36,0,90);
og.setColor(c3) ; og.fillArc(lx*30+60-12,ly*30+60+18,24,24,0,90);
ld = 3;
if(cf == 0){
og.setColor(c1);
}else{
og.setColor(c2);
}
}else if(td[ly+1][lx+1]==1){
og.fillArc(lx*30+60-18,ly*30+60-18,36,36,270,90);
og.setColor(c3) ; og.fillArc(lx*30+60-12,ly*30+60-12,24,24,270,90);
ld = 1;
if(cf == 0){
og.setColor(c1);
}else{
og.setColor(c2);
}
}else{
og.fillRect(lx*30+60,ly*30+72,30,6);
}
break;
case 1 : ly --;
if(ly == 0){
og.fillRect(lx*30+72,ly*30+60,6,30);lf = 1;
}else if(td[ly][lx]==1){
lf = 1;
}else if((ly==8)&&((td[ly][lx-1]==1)||(td[ly][lx+1]==1))){
og.setColor(c2) ; cf = 1 ; og.fillRect(lx*30+72,ly*30+60,6,30);
og.fillOval(lx*30+69,ly*30+60,13,13);
ld = 3 ;
}else if(td[ly-1][lx]==1){
og.fillRect(lx*30+72,ly*30+60,6,30);
lf = 1;
}else if((td[ly-1][lx-1]==1)&&(td[ly-1][lx+1]==1)){
og.setColor(c2) ; cf = 1 ; og.fillRect(lx*30+72,ly*30+60,6,30);
og.fillOval(lx*30+69,ly*30+60,13,13);
ld = 3 ;
}else if(td[ly-1][lx-1]==1){
og.fillArc(lx*30+60+12,ly*30+60+12,36,36,90,90);
og.setColor(c3) ; og.fillArc(lx*30+60+18,ly*30+60+18,24,24,90,90);
ld = 0;
if(cf == 0){
og.setColor(c1);
}else{
og.setColor(c2);
}
}else if(td[ly-1][lx+1]==1){
og.fillArc(lx*30+60-18,ly*30+60+12,36,36,0,90);
og.setColor(c3) ; og.fillArc(lx*30+60-12,ly*30+60+18,24,24,0,90);
ld = 2;
if(cf == 0){
og.setColor(c1);
}else{
og.setColor(c2);
}
}else{
og.fillRect(lx*30+72,ly*30+60,6,30);
}
break;
case 2 : lx --;
if(lx == 0){
og.fillRect(lx*30+60,ly*30+72,30,6);lf = 1;
}else if(td[ly][lx]==1){
lf = 1;
}else if((lx==8)&&((td[ly-1][lx]==1)||(td[ly+1][lx]==1))){
og.setColor(c2) ; cf = 1 ; og.fillRect(lx*30+60,ly*30+72,30,6);
og.fillOval(lx*30+60,ly*30+69,13,13);
ld = 0 ;
}else if(td[ly][lx-1]==1){
og.fillRect(lx*30+60,ly*30+72,30,6);
lf = 1;
}else if((td[ly-1][lx-1]==1)&&(td[ly+1][lx-1]==1)){
og.setColor(c2) ; cf = 1 ; og.fillRect(lx*30+60,ly*30+72,30,6);
og.fillOval(lx*30+60,ly*30+69,13,13);
ld = 0 ;
}else if(td[ly-1][lx-1]==1){
og.fillArc(lx*30+60+12,ly*30+60+12,36,36,90,90);
og.setColor(c3) ; og.fillArc(lx*30+60+18,ly*30+60+18,24,24,90,90);
ld = 3;
if(cf == 0){
og.setColor(c1);
}else{
og.setColor(c2);
}
}else if(td[ly+1][lx-1]==1){
og.fillArc(lx*30+60+12,ly*30+60-18,36,36,180,90);
og.setColor(c3) ; og.fillArc(lx*30+60+18,ly*30+60-12,24,24,180,90);
ld = 1;
if(cf == 0){
og.setColor(c1);
}else{
og.setColor(c2);
}
}else{
og.fillRect(lx*30+60,ly*30+72,30,6);
}
break;
case 3 : ly ++;
if(ly == 9){
og.fillRect(lx*30+72,ly*30+60,6,30);lf = 1;
}else if(td[ly][lx]==1){
lf = 1;
}else if((ly==1)&&((td[ly][lx-1]==1)||(td[ly][lx+1]==1))){
og.setColor(c2) ; cf = 1 ; og.fillRect(lx*30+72,ly*30+60,6,30);
og.fillOval(lx*30+69,ly*30+78,13,13);
ld = 1 ;
}else if(td[ly+1][lx]==1){
og.fillRect(lx*30+72,ly*30+60,6,30);
lf = 1;
}else if((td[ly+1][lx-1]==1)&&(td[ly+1][lx+1]==1)){
og.setColor(c2) ; cf = 1 ; og.fillRect(lx*30+72,ly*30+60,6,30);
og.fillOval(lx*30+69,ly*30+78,13,13);
ld = 1 ;
}else if(td[ly+1][lx-1]==1){
og.fillArc(lx*30+60+12,ly*30+60-18,36,36,180,90);
og.setColor(c3) ; og.fillArc(lx*30+60+18,ly*30+60-12,24,24,180,90);
ld = 0;
if(cf == 0){
og.setColor(c1);
}else{
og.setColor(c2);
}
}else if(td[ly+1][lx+1]==1){
og.fillArc(lx*30+60-18,ly*30+60-18,36,36,270,90);
og.setColor(c3) ; og.fillArc(lx*30+60-12,ly*30+60-12,24,24,270,90);
ld = 2;
if(cf == 0){
og.setColor(c1);
}else{
og.setColor(c2);
}
}else{
og.fillRect(lx*30+72,ly*30+60,6,30);
}
break;
}
}
for(int k1 = 1;k1 < 9;k1 ++){
for(int k2 = 1;k2 < 9;k2 ++){
og.setColor(Color.gray);
og.drawRect(k1*30+60,k2*30+60,30,30);
}
}
if(hf == 1){
for(int k1 = 1;k1 < 9;k1 ++){
for(int k2 = 1;k2 < 9;k2 ++){
og.setColor(Color.black);
og.fillRect(k1*30+60,k2*30+60,30,30);
og.setColor(Color.lightGray);
og.drawRect(k1*30+60,k2*30+60,30,30);
if(at[k2][k1] == 1)b_draw(k1*30+60,k2*30+60,0);
}
}
}else{
for(int k1 = 1;k1 < 9;k1 ++){
for(int k2 = 1;k2 < 9;k2 ++){
if((td[k2][k1] == 1)&&(at[k2][k1] == 1)){
b_draw(k1*30+60,k2*30+60,1);
}else if(at[k2][k1] == 1){
b_draw(k1*30+60,k2*30+60,0);
}
}
}
}
g.drawImage(os,0,0,this);
}
public void b_draw(int x,int y,int c){
for(int k1 = 0;k1 < 15;k1 ++){
switch(c){
case 0 : og.setColor(new Color(150+k1*5,0,0));break;
case 1 : og.setColor(new Color(0,0,150+k1*5));;break;
case 2 : og.setColor(new Color(0,150+k1*5,0));break;
}
og.drawOval(x+k1,y+k1,30-2*k1,30-2*k1);
}
}
public void b_set(){
for(int k1 = 0;k1 < 10;k1 ++){
for(int k2 = 0;k2 < 10;k2 ++){
td[k2][k1] = -1;
at[k2][k1] = -1;
}
}
for(int k1 = 1;k1 < 9;k1 ++){
for(int k2 = 1;k2 < 9;k2 ++){
td[k2][k1] = 0;
at[k2][k1] = 0;
}
}
co = 0;
while(co < 5){
ds = (int)(64*Math.random());
if(td[ds/8+1][ds%8+1] == 0){
td[ds/8+1][ds%8+1] = 1;
co ++;
}
}
}
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 ) ;
}
}
