?? jeg.java
字號(hào):
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
public class Jeg{
public static void main(String[] args){
MyFrame frame=new MyFrame();
}
}
class MyToggleButton extends JToggleButton{
public MyToggleButton(ImageIcon ico,ImageIcon ico2){
setSize(ico.getImage().getWidth(null),ico.getImage().getWidth(null));
setSelectedIcon(ico2);
setIcon(ico);
setMargin(new Insets(0,0,0,0));
setIconTextGap(0);
setBorderPainted(false);
setBorder(null);
setText(null);
}
}
class MyPanel extends JPanel{
private Image img;
public MyPanel(Image img){
this.img=img;
Dimension size=new Dimension(img.getWidth(null),img.getHeight(null));
setSize(size);
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
setLayout(null);
}
public void paintComponent(Graphics g){
g.drawImage(img,0,0,null);
}
}
class MyFrame extends JFrame implements ActionListener{
MyPanel panel;
JPanel setpanel;
JButton setbutton1;
JButton setbutton2;
JButton setbutton3;
JButton setbutton4;
JButton setbutton5;
JButton run;
JButton autoplay;
JToggleButton play;
MyToggleButton button[]=new MyToggleButton[33];
Interpeg one;
boolean runsuccess;
boolean cleared;
int selected;
int buttonnum;
MyFrame(){
super("PegJumpGame");
panel=new MyPanel(new ImageIcon("back.jpg").getImage());
ImageIcon ico1=new ImageIcon("1.jpg"); //50*50
ImageIcon ico2=new ImageIcon("2.jpg");
for(int i=0,n=0;i<7;i++){
for(int j=0;j<7;j++){
if(i<2 || i>4){
if(j<2 || j>4) continue;
}
button[n]=new MyToggleButton(ico1,ico2);
panel.add(button[n]);
button[n].setLocation(j*50+50,i*50+50);
button[n].addActionListener(this);
n++;
}
}
button[16].setSelected(true);
setpanel=new JPanel();
setpanel.setSize(100,200);
setpanel.setLayout(new GridLayout(8,1));
panel.add(setpanel);
setpanel.setLocation(450,50);
setbutton1=new JButton("Set 1");
setpanel.add(setbutton1);
setbutton1.addActionListener(this);
setbutton2=new JButton("Set 2");
setpanel.add(setbutton2);
setbutton2.addActionListener(this);
setbutton3=new JButton("Set 3");
setpanel.add(setbutton3);
setbutton3.addActionListener(this);
setbutton4=new JButton("Set 4");
setpanel.add(setbutton4);
setbutton4.addActionListener(this);
setbutton5=new JButton("Set 5");
setpanel.add(setbutton5);
setbutton5.addActionListener(this);
run=new JButton("Run");
setpanel.add(run);
run.addActionListener(this);
autoplay=new JButton("Autoplay");
setpanel.add(autoplay);
autoplay.addActionListener(this);
autoplay.setEnabled(false);
play=new JToggleButton("Play");
setpanel.add(play);
play.addActionListener(this);
getContentPane().add(panel);
pack();
setVisible(true);
one=new Interpeg();
runsuccess=false;
cleared=true;
selected=-1;
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==setbutton1){
set1();
}
if(e.getSource()==setbutton2){
set2();
}
if(e.getSource()==setbutton3){
set3();
}
if(e.getSource()==setbutton4){
set4();
}
if(e.getSource()==setbutton5){
set5();
}
if(e.getSource()==run && cleared){
runsuccess=run();
autoplay.setEnabled(runsuccess);
cleared=false;
}
if(e.getSource()==autoplay && runsuccess){
autoplay();
}
if(e.getSource()!=autoplay && e.getSource()!=run && !cleared){
one.reset();
runsuccess=false;
autoplay.setEnabled(runsuccess);
cleared=true;
}
if(play.isSelected()==true){
for(buttonnum=0;buttonnum<33;buttonnum++){
if(e.getSource()==button[buttonnum]) break;
}
if(buttonnum<33){
if(button[buttonnum].isSelected()==false && selected<0)
button[buttonnum].setSelected(true);
else if(button[buttonnum].isSelected()==true && selected<0)
selected=buttonnum;
else if(button[buttonnum].isSelected()==false && selected>=0){
int nowx=numtox(buttonnum);
int nowy=numtoy(buttonnum);
int oldx=numtox(selected);
int oldy=numtoy(selected);
if(canjump(nowx,nowy,oldx,oldy) && button[xytonum((nowx+oldx)/2,(nowy+oldy)/2)].isSelected()==false)
button[xytonum((nowx+oldx)/2,(nowy+oldy)/2)].setSelected(true);
else{
button[buttonnum].setSelected(!button[buttonnum].isSelected());
button[selected].setSelected(!button[selected].isSelected());
}
selected=-1;
}
else {
button[buttonnum].setSelected(!button[buttonnum].isSelected());
button[selected].setSelected(!button[selected].isSelected());
selected=-1;
}
}
else if(e.getSource()!=play){
play.setSelected(false);
}
}
if(play.isSelected()==false) selected=-1;
}
private void set1(){
for(int i=0;i<33;i++){
button[i].setSelected(true);
}
button[4].setSelected(false);
button[8].setSelected(false);
button[10].setSelected(false);
button[9].setSelected(false);
button[16].setSelected(false);
button[23].setSelected(false);
}
private void set2(){
for(int i=0;i<33;i++){
button[i].setSelected(true);
}
button[0].setSelected(false);
button[1].setSelected(false);
button[2].setSelected(false);
button[3].setSelected(false);
button[4].setSelected(false);
button[5].setSelected(false);
button[8].setSelected(false);
button[9].setSelected(false);
button[10].setSelected(false);
button[15].setSelected(false);
button[17].setSelected(false);
}
private void set3(){
for(int i=0;i<33;i++){
button[i].setSelected(false);
}
button[0].setSelected(true);
button[2].setSelected(true);
button[6].setSelected(true);
button[12].setSelected(true);
button[16].setSelected(true);
button[20].setSelected(true);
button[26].setSelected(true);
button[30].setSelected(true);
button[32].setSelected(true);
}
private void set4(){
for(int i=0;i<33;i++){
button[i].setSelected(false);
}
button[0].setSelected(true);
button[2].setSelected(true);
button[6].setSelected(true);
button[12].setSelected(true);
button[13].setSelected(true);
button[14].setSelected(true);
button[15].setSelected(true);
button[17].setSelected(true);
button[18].setSelected(true);
button[19].setSelected(true);
button[20].setSelected(true);
button[21].setSelected(true);
button[22].setSelected(true);
button[24].setSelected(true);
button[25].setSelected(true);
button[26].setSelected(true);
}
private void set5(){
for(int i=0;i<33;i++){
button[i].setSelected(false);
}
button[0].setSelected(true);
button[1].setSelected(true);
button[2].setSelected(true);
button[3].setSelected(true);
button[5].setSelected(true);
button[6].setSelected(true);
button[7].setSelected(true);
button[11].setSelected(true);
button[12].setSelected(true);
button[13].setSelected(true);
button[19].setSelected(true);
button[27].setSelected(true);
button[28].setSelected(true);
button[29].setSelected(true);
button[30].setSelected(true);
button[31].setSelected(true);
button[32].setSelected(true);
}
private boolean run(){
one.scan();
boolean r=one.judge();
// one.printway();
return r;
}
private void autoplay(){
one.move();
}
private int numtox(int num){
int x[]={0,0,0,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,6,6,6};
return x[num];
}
private int numtoy(int num){
int y[]={2,3,4,2,3,4,0,1,2,3,4,5,6,0,1,2,3,4,5,6,0,1,2,3,4,5,6,2,3,4,2,3,4};
return y[num];
}
private boolean canjump(int nowx,int nowy,int oldx,int oldy){
if( (nowy==oldy) && (nowx-oldx==2 || nowx-oldx==-2) ) return true;
if( (nowx==oldx) && (nowy-oldy==2 || nowy-oldy==-2) ) return true;
return false;
}
private int xytonum(int x,int y){
if(x==0){
switch (y){
case 2:return 0;
case 3:return 1;
case 4:return 2;
}
}
if(x==1){
switch (y){
case 2:return 3;
case 3:return 4;
case 4:return 5;
}
}
if(x==2){
switch (y){
case 0:return 6;
case 1:return 7;
case 2:return 8;
case 3:return 9;
case 4:return 10;
case 5:return 11;
case 6:return 12;
}
}
if(x==3){
switch (y){
case 0:return 13;
case 1:return 14;
case 2:return 15;
case 3:return 16;
case 4:return 17;
case 5:return 18;
case 6:return 19;
}
}
if(x==4){
switch (y){
case 0:return 20;
case 1:return 21;
case 2:return 22;
case 3:return 23;
case 4:return 24;
case 5:return 25;
case 6:return 26;
}
}
if(x==5){
switch (y){
case 2:return 27;
case 3:return 28;
case 4:return 29;
}
}
if(x==6){
switch (y){
case 2:return 30;
case 3:return 31;
case 4:return 32;
}
}
return -1;
}
private class Interpeg
{
boolean map[][];
int num;
long myset;
HashSet<Long> set;
int hs[];
int ls[];
int hc[];
int lc[];
int hd[];
int ld[];
int ip;
int p;
public Interpeg(){
int i;
set=new HashSet<Long>();
this.map=new boolean[7][];
for(i=0;i<7;i++){
map[i]=new boolean[7];
}
num=0;
ip=-1;
hs=new int [7*7];
ls=new int [7*7];
hc=new int [7*7];
lc=new int [7*7];
hd=new int [7*7];
ld=new int [7*7];
p=0;
}
private long changeinto()
{
long r=0;
for(int i=0;i<7;i++)
{
for(int j=0;j<7;j++)
{
if(i<2 || i>5)
{
if(j<2 || j>5) continue;
}
r*=2;
if(map[i][j]) r++;
}
}
return r;
}
public void printway(){
for(int i=0;i<ip;i++){
System.out.print("("+hs[i]+","+ls[i]+") MOVE TO ("+hd[i]+","+ld[i]+")\n");
}
}
public void move(){
if(p>=ip) return;
int s,c,d;
button[xytonum(hs[p],ls[p])].setSelected(true);
button[xytonum(hc[p],lc[p])].setSelected(true);
button[xytonum(hd[p],ld[p])].setSelected(false);
p++;
}
public void reset(){
num=0;
ip=-1;
hs=new int [7*7];
ls=new int [7*7];
hc=new int [7*7];
lc=new int [7*7];
hd=new int [7*7];
ld=new int [7*7];
p=0;
set.clear();
}
private void jump(int fromh,int froml,int crossh,int crossl,int toh,int tol)
{
map[fromh][froml]=false;
map[crossh][crossl]=false;
map[toh][tol]=true;
hs[ip]=fromh;
ls[ip]=froml;
hc[ip]=crossh;
lc[ip]=crossl;
hd[ip]=toh;
ld[ip]=tol;
}
private void jumpback(int fromh,int froml,int crossh,int crossl,int toh,int tol)
{
map[fromh][froml]=true;
map[crossh][crossl]=true;
map[toh][tol]=false;
}
private boolean inmap(int h,int l)
{
if( (h>=0 && h<7 && l>=0 && l<7) && ((h>1 && h<5) || (l>1 && l<5)) ) return true;
return false;
}
public boolean judge()
{
num--;
ip++;
if(num==0) return true;
long temp;
for(int h=0;h<7;h++)
{
for(int l=0;l<7;l++)
{
if(map[h][l]==true)
{
if(inmap(h+2,l) && map[h+1][l]==true && map[h+2][l]==false)
{
jump(h,l,h+1,l,h+2,l);
temp=changeinto();
if(!set.contains(temp))
{
if(judge()) return true;
}
jumpback(h,l,h+1,l,h+2,l);
}
if(inmap(h-2,l) && map[h-1][l]==true && map[h-2][l]==false)
{
jump(h,l,h-1,l,h-2,l);
temp=changeinto();
if(!set.contains(temp))
{
if(judge()) return true;
}
jumpback(h,l,h-1,l,h-2,l);
}
if(inmap(h,l+2) && map[h][l+1]==true && map[h][l+2]==false)
{
jump(h,l,h,l+1,h,l+2);
temp=changeinto();
if(!set.contains(temp))
{
if(judge()) return true;
}
jumpback(h,l,h,l+1,h,l+2);
}
if(inmap(h,l-2) && map[h][l-1]==true && map[h][l-2]==false)
{
jump(h,l,h,l-1,h,l-2);
temp=changeinto();
if(!set.contains(temp))
{
if(judge()) return true;
}
jumpback(h,l,h,l-1,h,l-2);
}
}
}
}
num++;
ip--;
set.add(changeinto());
return false;
}
public void scan(){
for(int i=0,n=0;i<7;i++){
for(int j=0;j<7;j++){
if(i<2 || i>4){
if(j<2 || j>4) {
map[i][j]=false;
continue;
}
}
map[i][j]=!button[n++].isSelected();
if(map[i][j]==true) num++;
}
}
}
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -