import java.applet.*;
import java.awt.*;
public class Solitaire extends Applet implements Runnable{
Image pic,mpic;
int by = 20;
int mdx,mdy;
int mux,muy;
int mx,my;
int cx,cy,cd;
int mmd[][]={{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,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,0,0},
{0,0,0,0,0,0,0,0,0,0,0}};
int mmc[][]={{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,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,0,0},
{0,0,0,0,0,0,0,0,0,0,0}};
int md1[][]={{2,2,2,2,2,2,2,2,2,2,2},
{2,2,2,2,2,2,2,2,2,2,2},
{2,2,2,2,1,1,1,2,2,2,2},
{2,2,2,2,1,1,1,2,2,2,2},
{2,2,1,1,1,1,1,1,1,2,2},
{2,2,1,1,1,0,1,1,1,2,2},
{2,2,1,1,1,1,1,1,1,2,2},
{2,2,2,2,1,1,1,2,2,2,2},
{2,2,2,2,1,1,1,2,2,2,2},
{2,2,2,2,2,2,2,2,2,2,2},
{2,2,2,2,2,2,2,2,2,2,2}};
int md2[][]={{2,2,2,2,2,2,2,2,2,2,2},
{2,2,2,2,2,2,2,2,2,2,2},
{2,2,2,2,1,1,1,2,2,2,2},
{2,2,2,1,1,1,1,1,2,2,2},
{2,2,1,1,1,1,1,1,1,2,2},
{2,2,1,1,1,0,1,1,1,2,2},
{2,2,1,1,1,1,1,1,1,2,2},
{2,2,2,1,1,1,1,1,2,2,2},
{2,2,2,2,1,1,1,2,2,2,2},
{2,2,2,2,2,2,2,2,2,2,2},
{2,2,2,2,2,2,2,2,2,2,2}};
int md3[][]={{2,2,2,2,2,2,2,2,2,2,2},
{2,2,2,2,2,2,2,2,2,2,2},
{2,2,2,2,0,0,0,2,2,2,2},
{2,2,2,2,0,1,0,2,2,2,2},
{2,2,0,0,0,1,0,0,0,2,2},
{2,2,0,1,1,1,1,1,0,2,2},
{2,2,0,0,0,1,0,0,0,2,2},
{2,2,2,2,0,1,0,2,2,2,2},
{2,2,2,2,0,0,0,2,2,2,2},
{2,2,2,2,2,2,2,2,2,2,2},
{2,2,2,2,2,2,2,2,2,2,2}};
int md4[][]={{2,2,2,2,2,2,2,2,2,2,2},
{2,2,2,2,2,2,2,2,2,2,2},
{2,2,2,2,0,0,1,2,2,2,2},
{2,2,2,2,0,1,1,2,2,2,2},
{2,2,0,0,1,1,1,0,0,2,2},
{2,2,0,1,1,1,1,0,0,2,2},
{2,2,0,0,1,1,1,0,0,2,2},
{2,2,2,2,0,1,1,2,2,2,2},
{2,2,2,2,0,0,1,2,2,2,2},
{2,2,2,2,2,2,2,2,2,2,2},
{2,2,2,2,2,2,2,2,2,2,2}};
int md5[][]={{2,2,2,2,2,2,2,2,2,2,2},
{2,2,2,2,2,2,2,2,2,2,2},
{2,2,2,2,0,1,0,2,2,2,2},
{2,2,2,2,1,1,1,2,2,2,2},
{2,2,0,1,1,1,1,1,0,2,2},
{2,2,1,1,1,0,1,1,1,2,2},
{2,2,0,1,1,1,1,1,0,2,2},
{2,2,2,2,1,1,1,2,2,2,2},
{2,2,2,2,0,1,0,2,2,2,2},
{2,2,2,2,2,2,2,2,2,2,2},
{2,2,2,2,2,2,2,2,2,2,2}};
Choice sel = new Choice();
Button rep = new Button(" replay ");
Thread th = null;
Image os;
Graphics og;
public void init(){
setBackground(Color.white);
os = createImage(320,335);
og = os.getGraphics();
setLayout(new BorderLayout());
Panel pan = new Panel();
pan.setLayout(new FlowLayout());
sel.addItem("Plus");
sel.addItem("Pyramid");
sel.addItem("Diamond");
sel.addItem("Solitaire1");
sel.addItem("Solitaire2");
pan.add(sel);
pan.add(rep);
add("South",pan);
for(int i = 2;i < 9;i ++){
for(int j = 2;j < 9;j ++){
mmc[i][j] = md3[i][j];
mmd[i][j] = mmc[i][j];
}
}
}
public void paint(Graphics g){
og.setColor(Color.white);
og.fillRect(0,0,320,335);
og.setColor(Color.black);
for(int k = 0;k < 8;k ++){
og.drawLine(20,by+40*k,20+40*7,by+40*k);
og.drawLine(20+40*k,by,20+40*k,by+40*7);
}
for(int i = 2;i < 9;i ++){
for(int j = 2;j < 9;j ++){
if(mmd[i][j] == 1){
pic = getImage(getDocumentBase(),"Picture/peg.gif");
}else if(mmd[i][j] == 2){
pic = getImage(getDocumentBase(),"Picture/wall.gif");
}else{
pic = getImage(getDocumentBase(),"");
}
og.drawImage(pic,20+40*(i-2),by+40*(j-2),this);
og.drawImage(mpic,mx,my,this);
}
}
g.drawImage(os,0,0,this);
}
public boolean mouseDown(Event e,int x,int y){
mdx = (x - 20) / 40 + 2;
mdy = (y - by) / 40 + 2;
if(mmd[mdx][mdy] == 1){
mpic = getImage(getDocumentBase(),"Picture/peg.gif");
cx = mdx;
cy = mdy;
cd = 1;
mmd[mdx][mdy] = 0;
}else if(mmd[mdx][mdy] == 2){
cd = 2;
mpic = getImage(getDocumentBase(),"");
}else{
cd = 0;
mpic = getImage(getDocumentBase(),"");
}
mx = x - 20;
my = y - 20;
repaint();
return true;
}
public boolean mouseDrag(Event e,int x,int y){
mx = x - 20;
my = y - 20;
repaint();
return true;
}
public boolean mouseUp(Event e,int x,int y){
mux = (x - 20) / 40 + 2;
muy = (y - by) / 40 + 2;
if((mdx == mux)&&(mdy-2 == muy)&&(mmd[mdx][mdy-1]==1)&&(mmd[mdx][mdy-2]==0)){
mmd[mdx][mdy-1]=0;
mmd[mdx][mdy-2]=1;
mx = (mux - 2) * 40 + 20;
my = (muy - 2) * 40 + by;
}else if((mdx == mux)&&(mdy+2 == muy)&&(mmd[mdx][mdy+1]==1)&&(mmd[mdx][mdy+2]==0)){
mmd[mdx][mdy+1]=0;
mmd[mdx][mdy+2]=1;
mx = (mux - 2) * 40 + 20;
my = (muy - 2) * 40 + by;
}else if((mdx-2 == mux)&&(mdy == muy)&&(mmd[mdx-1][mdy]==1)&&(mmd[mdx-2][mdy]==0)){
mmd[mdx-1][mdy]=0;
mmd[mdx-2][mdy]=1;
mx = (mux - 2) * 40 + 20;
my = (muy - 2) * 40 + by;
}else if((mdx+2 == mux)&&(mdy == muy)&&(mmd[mdx+1][mdy]==1)&&(mmd[mdx+2][mdy]==0)){
mmd[mdx+1][mdy]=0;
mmd[mdx+2][mdy]=1;
mx = (mux - 2) * 40 + 20;
my = (muy - 2) * 40 + by;
}else{
mmd[mdx][mdy] = cd;
}
mpic = getImage(getDocumentBase(),"");
repaint();
return true;
}
public boolean action(Event e,Object o){
if(e.target == sel){
if(o == "Plus"){
for(int i = 2;i < 9;i ++){
for(int j = 2;j < 9;j ++){
mmc[i][j] = md3[i][j];
mmd[i][j] = mmc[i][j];
}
}
}else if(o == "Pyramid"){
for(int i = 2;i < 9;i ++){
for(int j = 2;j < 9;j ++){
mmc[i][j] = md4[i][j];
mmd[i][j] = mmc[i][j];
}
}
}else if(o == "Diamond"){
for(int i = 2;i < 9;i ++){
for(int j = 2;j < 9;j ++){
mmc[i][j] = md5[i][j];
mmd[i][j] = mmc[i][j];
}
}
}else if(o == "Solitaire1"){
for(int i = 2;i < 9;i ++){
for(int j = 2;j < 9;j ++){
mmc[i][j] = md1[i][j];
mmd[i][j] = mmc[i][j];
}
}
}else if(o == "Solitaire2"){
for(int i = 2;i < 9;i ++){
for(int j = 2;j < 9;j ++){
mmc[i][j] = md2[i][j];
mmd[i][j] = mmc[i][j];
}
}
}
repaint();
return true;
}
if(e.target == rep){
for(int i = 2;i < 9;i ++){
for(int j = 2;j < 9;j ++){
mmd[i][j] = mmc[i][j];
}
}
repaint();
return true;
}
return false;
}
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 ) ;
}
}
