利用javaGUI编程实现华容道小游戏

华容道是古老的中国民间益智游戏,以其变化多端、百玩不厌的特点与魔方、独立钻石棋一起被国外智力专家并称为“智力游戏界的三个不可思议”。它与七巧板、九连环等中国传统益智玩具还有个代名词叫作“中国的难题”。来自百度百科描述

华容道游戏解法很复杂,但是利用javaGUI编程,做出这个游戏并不是很难。下面是实现代码:

1.人物定义类 Person .java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
	public class Person extends JButton implements FocusListener
	{
	   int number;
	   Color c=new Color(255,245,170);
	   Font font=new Font("宋体",Font.BOLD,8);
	   Person(int number,String s)
	   {
	     super(s);
		 setBackground(c);
		 setFont(font);
		 this.number=number;
		 c=getBackground();
		 addFocusListener(this);
	   }
	   public void focusGained(FocusEvent e)
		{
		   setBackground(Color.red);
	    }
	   public void focusLost(FocusEvent e)
		{
	       setBackground(c);
	    }
	}

2.实现类 Huarongdao.java

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Huarongdao extends JFrame implements MouseListener,
KeyListener,ActionListener 
{
	Person person[]=new Person[10];
	JButton left,right,above,below;
	JButton restart=new JButton("重新开始");
	public Huarongdao()
	   {
	   init();
	   setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	   setBounds(100,100,320,500);
	   setVisible(true);
	   validate();
	   }
   public void init()
	{
	   setLayout(null);
	   add(restart);
	   restart.setBounds(100,320,120,35);
	   restart.addActionListener(this);
	   String name []={"曹操","关羽","张飞","刘备","周瑜","黄忠","兵","兵","兵","兵"};
	   for(int k=0;k<name.length;k++)
	    {
        person[k]=new Person(k,name[k]);
		 person[k].addMouseListener(this);
		 person[k].addKeyListener(this);
		 add(person[k]);
	    }
      person[0].setBounds(104,54,100,100);
      person[1].setBounds(104,154,100,50);
	   person[2].setBounds(54,154,50,100);
	   person[3].setBounds(204,154,50,100);
	   person[4].setBounds(54,54,50,100);
	   person[5].setBounds(204,54,50,100);
	   person[6].setBounds(54,254,50,50);
	   person[7].setBounds(204,254,50,50);
	   person[8].setBounds(104,254,50,50);
      person[9].setBounds(154,204,50,50);
	   person[9].requestFocus();
	   left=new JButton();
	   right=new JButton();
	   above=new JButton();
	   below=new JButton();
	   add(left);
	   add(right);
	   add(above);
	   add(below);
	   left.setBounds(49,49,5,206);
	   right.setBounds(254,49,5,260);
	   above.setBounds(49,49,210,5);
	   below.setBounds(49,304,210,5);
	   validate();
	}
	public void keyTyped(KeyEvent e){}
   public void keyReleased(KeyEvent e){}
	public void keyPressed(KeyEvent e)
		{
		  Person man=(Person)e.getSource();
		  if(e.getKeyCode()==KeyEvent.VK_DOWN)
			  go(man,below);
		  if(e.getKeyCode()==KeyEvent.VK_UP)
			  go(man,left);
		  if(e.getKeyCode()==KeyEvent.VK_LEFT)
			  go(man,left);
		  if(e.getKeyCode()==KeyEvent.VK_RIGHT)
			  go(man,right);
	    }
   public void mousePressed(MouseEvent e)
	    {
		  Person man=(Person)e.getSource();
		  int x=-1,y=-1;
		  x=e.getX();
		  y=e.getY();
		  int w=man.getBounds().width;
		  int h=man.getBounds().height;
		  if(y>h/2)
			  go(man,below);
		  if(y<h/2)
			  go(man,above);
		  if(x<w/2)
			  go(man,left);
		  if(x>w/2)
			  go(man,right);
	    }
		public void mouseReleased(MouseEvent e){}
		public void mouseEntered(MouseEvent e){}
		public void mouseExited(MouseEvent e){}
		public void mouseClicked(MouseEvent e){}
		public void go(Person man,JButton direction)
		 {
			boolean move=true;
			Rectangle manRect=man.getBounds();
			int x=man.getBounds().x;
			int y=man.getBounds().y;
			if(direction==below)
				y=y+50;
			else if(direction==above)
				y=y-50;
			else if(direction==left)
				x=x-50;
			else if(direction==right)
				x=x+50;
			manRect.setLocation(x,y);
			Rectangle directionRect=direction.getBounds();
			for(int k=0;k<10;k++)
				{
                Rectangle personRect=person[k].getBounds();
				 if((manRect.intersects(personRect))&&(man.number!=k))
					 move=false;
			    }
				if(manRect.intersects(directionRect))
					move=false;
				if(move==true)
					man.setLocation(x,y);
		 }
		 public void actionPerformed(ActionEvent e){
		     dispose();
			 new Huarongdao();
		 }
}

3. 测试类 Test.java

public class Test{

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Huarongdao();
	}
}

运行截图:

华容道小游戏

发布了34 篇原创文章 · 获赞 65 · 访问量 3729

猜你喜欢

转载自blog.csdn.net/baidu_41860619/article/details/103582177