import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class panex extends Applet implements Runnable{
int mtbd[][] = {{9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9},
{9,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,9},
{9,4,4,4,4,4,4,4,4,9,0,0,0,0,0,0,0,0,9,8,8,8,8,8,8,8,8,9},
{9,9,3,3,3,3,3,3,9,9,9,0,0,0,0,0,0,9,9,9,7,7,7,7,7,7,9,9},
{9,9,9,2,2,2,2,9,9,9,9,9,0,0,0,0,9,9,9,9,9,6,6,6,6,9,9,9},
{9,9,9,9,1,1,9,9,9,9,9,9,9,0,0,9,9,9,9,9,9,9,5,5,9,9,9,9},
{9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9}};
int mtd[][] = new int[7][28];
int pxb[] = {4,3,2,1,22,21,20,19};
int pyb[] = {5,4,3,2,5,4,3,2};
int pwb[] = {2,4,6,8,2,4,6,8};
int px[] = new int[8],py[] = new int[8],pw[] = new int[8];
int mx,my,sx,sy,tx,ty,pp,pl,ch = 0;
Color pc[] = new Color[8];
Color bg,oc;
Button rep;
Thread th = null;
Image os;
Graphics og;
public void init(){
setBackground(Color.white);
os = createImage(600,300);
og = os.getGraphics();
for(int idx = 0;idx < 28;idx ++){
for(int idy = 0;idy < 7;idy ++){
mtd[idy][idx] = mtbd[idy][idx];
}
}
for(int pd = 0;pd < 8;pd ++){
px[pd] = pxb[pd] ; py[pd] = pyb[pd] ; pw[pd] = pwb[pd];
}
for(int ic = 0;ic < 4;ic ++){
pc[ic] = new Color(255 - 20 * ic,0,0);
pc[ic + 4] = new Color(0,0,255 - 20 * ic);
}
bg = new Color(230,230,230);
oc = new Color(100,80,100);
setLayout(new BorderLayout());
Panel pan = new Panel();
pan.setLayout(new FlowLayout());
pan.add(rep = new Button(" replay "));
add("South",pan);
rep.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
for(int idx = 0;idx < 28;idx ++){
for(int idy = 0;idy < 7;idy ++){
mtd[idy][idx] = mtbd[idy][idx];
}
}
for(int pd = 0;pd < 8;pd ++){
px[pd] = pxb[pd];py[pd] = pyb[pd];py[pd] = pyb[pd];
}
repaint();
}
});
addMouseListener(
new MouseAdapter(){
public void mousePressed(MouseEvent e){
sx = (e.getX() - 20) / 20;
sy = e.getY() / 40;
pp = mtd[sy][sx];
tx = px[pp - 1] ; ty = py[pp - 1] ; pl = pw[pp - 1];
}
}
);
addMouseMotionListener(
new MouseMotionAdapter(){
public void mouseDragged(MouseEvent e){
mx = (e.getX() - 20) / 20;
my = e.getY() / 40;
if((mx != sx) || (my != sy)){
if((mx == sx) && (my == sy - 1)){
for(int ck = 0;ck < pl;ck ++){
if(mtd[ty - 1][tx + ck] != 0){ch = 1;}
}
if(ch == 0){
for(int ik = 0;ik < pl;ik ++){
mtd[ty - 1][tx + ik] = pp;
mtd[ty][tx + ik] = 0;
}
sx = mx ; sy = my;
py[pp - 1] = py[pp - 1] - 1;
ty = ty - 1;
repaint();
}else{
ch = 0;
}
}
if((mx == sx) && (my == sy + 1)){
for(int ck = 0;ck < pl;ck ++){
if(mtd[ty + 1][tx + ck] != 0){ch = 1;}
}
if(ch == 0){
for(int ik = 0;ik < pl;ik ++){
mtd[ty + 1][tx + ik] = pp;
mtd[ty][tx + ik] = 0;
}
sx = mx ; sy = my;
py[pp - 1] = py[pp - 1] + 1;
ty = ty + 1;
repaint();
}else{
ch = 0;
}
}
if((mx == sx - 1) && (my == sy)){
if(mtd[ty][tx - 1] != 0){ch = 1;}
if(ch == 0){
mtd[ty][tx - 1] = pp;
mtd[ty][tx + pl - 1] = 0;
sx = mx ; sy = my;
px[pp - 1] = px[pp - 1] - 1;
tx = tx - 1;
repaint();
}else{
ch = 0;
}
}
if((mx == sx + 1) && (my == sy)){
if(mtd[ty][tx + pl] != 0){ch = 1;}
if(ch == 0){
mtd[ty][tx + pl] = pp;
mtd[ty][tx] = 0;
sx = mx ; sy = my;
px[pp - 1] = px[pp - 1] + 1;
tx = tx + 1;
repaint();
}else{
ch = 0;
}
}
if((mx == sx - 2) && (my == sy)){
if((mtd[ty][tx - 1] != 0) || (mtd[ty][tx - 2] != 0)){ch = 1;}
if(ch == 0){
mtd[ty][tx - 1] = pp ; mtd[ty][tx - 2] = pp ;
mtd[ty][tx + pl - 1] = 0 ; mtd[ty][tx + pl - 2] = 0 ;
sx = mx ; sy = my;
px[pp - 1] = px[pp - 1] - 2;
tx = tx - 2;
repaint();
}else{
ch = 0;
}
}
if((mx == sx + 2) && (my == sy)){
if((mtd[ty][tx + pl] != 0) || (mtd[ty][tx + pl + 1] != 0)){ch = 1;}
if(ch == 0){
mtd[ty][tx + pl] = pp ; mtd[ty][tx + pl + 1] = pp ;
mtd[ty][tx] = 0 ; mtd[ty][tx + 1] = 0 ;
sx = mx ; sy = my;
px[pp - 1] = px[pp - 1] + 2;
tx = tx + 2;
repaint();
}else{
ch = 0;
}
}
}
}
}
);
}
public void paint(Graphics g){
og.setColor(Color.white);
og.fillRect(0,0,600,300);
og.setColor(oc);
og.fillRoundRect(20,20,560,240,20,20);
for(int ix = 1;ix < 27;ix ++){
for(int iy = 1;iy < 6;iy ++){
if(mtd[iy][ix] < 1){
og.setColor(bg);
}else if(mtd[iy][ix] < 9){
og.setColor(pc[mtd[iy][ix] - 1]);
}else{
og.setColor(oc);
}
og.fillRect(ix * 20 + 20,iy * 40,20,40);
}
}
og.setColor(Color.blue);
og.fillOval(40,200,40,40);
og.setColor(Color.red);
og.fillOval(520,200,40,40);
g.drawImage(os,0,0,this );
}
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(20);
}
catch (InterruptedException e){ }
}
}
public void update( Graphics g )
{
paint( g ) ;
}
}
