⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jeg.java

📁 peg jump 游戏
💻 JAVA
字号:
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++;
				}
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -