一个拼图游戏请指教,急急急++++++++++要求12:00完工

放肆的青春-_- 发布于 2012/08/12 09:56
阅读 227
收藏 0
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JPanel;


public class MyCanvas extends JPanel implements MouseListener {
	boolean hasAddActionListener=false;//设置方格的动作监听器的标志位,TRUE为已经添加上动作事件,FALSE是尚未添加动作事件
	Cell cell[];//定义方格
	Rectangle cellNull;//定义空方格区域
	public static int pictureID=1;//当前选择的图片代号
	public MyCanvas() {
		this.setLayout(null);
		this.setSize(500,722);
		cellNull=new Rectangle(750,502,250,220);//空方格区域在第三行每二列
		cell=new Cell[6];
		Icon icon;
		for (int i = 0; i <3; i++) {//为9个方格加载图片,并初使化坐标,形成三行三列
			for(int j=0;j<2;j++){
				icon=new ImageIcon("pictrue/pic_"+pictureID+"_"+(i*2+j+1)+".jpg");
				cell[i*2+j]=new Cell(icon);
				cell[i*2+j].setLocation(j*250,i*220);
				this.add(cell[i*2+j]);
			}
		}
		this.remove(cell[5]);//移除最后一个多余的方格
	}
	
	public void reLoadPictrue(){//当选择其它图形进行拼图时,需重新加载新图片
		Icon icon;
		for (int i = 0; i < 3; i++) {
			for(int j=0;j<2;j++){
				icon=new ImageIcon("pictrue/pic_"+pictureID+"_"+(i*2+j+1)+".jpg");
				cell[i*2+j].setIcon(icon);
			}
		}
	}
	public boolean isFinish(){//判断是否拼合成功
		for(int i=0;i<5;i++){
			int x=cell[i].getBounds().x;
			int y=cell[i].getBounds().y;
			if(y/220*3+x/250!=i)
				return false;
		}
		return true;
	}
	
	public void Start(){//对方格进行重新排列,打乱顺序
		
		while(cell[0].getBounds().x<=250&&cell[0].getBounds().y<=220){//当第一个方格距左上角较近时
			int x=cellNull.getBounds().x;
			int y=cellNull.getBounds().y;
			int direction=(int)(Math.random()*4);//产生0-4,对应空方格的上下左右移动
			if(direction==0){//空方格左移动,与左侧方格互换位置,左侧方格右移动
				x-=250;
				if(test(x,y)){
					for(int j=0;j<5;j++){
						if((cell[j].getBounds().x==x)&&(cell[j].getBounds().y==y)){//依次寻找左侧的按钮
							cell[j].move("RIGHT",100);
							cellNull.setLocation(x,y);
							break;//找到后跳出for循环
						}
					}
				}
			}else if(direction==1){//RIGHT
				x+=250;
				if(test(x,y)){
					for(int j=0;j<5;j++){
						if((cell[j].getBounds().x==x)&&(cell[j].getBounds().y==y)){
							cell[j].move("LEFT",100);
							cellNull.setLocation(x,y);
							break;
						}
					}
				}
			}else if(direction==2){//UP
				y-=220;
				if(test(x,y)){
					for(int j=0;j<5;j++){
						if((cell[j].getBounds().x==x)&&(cell[j].getBounds().y==y)){
							cell[j].move("DOWN",100);
							cellNull.setLocation(x,y);
							break;
						}
					}
				}
			}else{//DOWN
				y+=220;
				if(test(x,y)){
					for(int j=0;j<5;j++){
						if((cell[j].getBounds().x==x)&&(cell[j].getBounds().y==y)){
							cell[j].move("UP",100);
							cellNull.setLocation(x,y);
							break;
						}
					}
				}
			}
				
		}
		
			if(!hasAddActionListener)//如果尚未添加动作事件,则添加
				for(int i=0;i<5;i++)//为第个方格添加动作事件,这样单击按钮就能移动了
					cell[i].addMouseListener(this);
		hasAddActionListener=true;
	}
	private boolean test(int x,int y){
		if((x>=0&&x<=250)||(y>=0&&y<=220))
			return true;
		else
			return false;
	}
	public void mouseClicked(MouseEvent arg0) {	}
	public void mouseEntered(MouseEvent arg0) {	}
	public void mouseExited(MouseEvent arg0) 	{	}
	public void mouseReleased(MouseEvent arg0) {	}
	public void mousePressed(MouseEvent arg0) {//方格的鼠标事件,因为用到了MyCanvas中的一些方法,因此没有在Cell类中处理鼠标事件
		Cell button=(Cell)arg0.getSource();
		int x1=button.getBounds().x;//得到所单击方格的坐标
		int y1=button.getBounds().y;
		
		int x2=cellNull.getBounds().x;//得到空方格的坐标
		int y2=cellNull.getBounds().y;
		
		if(x1==x2&&y1-y2==250)//进行比较,如果满足条件则进行交换
			button.move("UP",220);
		else if(x1==x2&&y1-y2==-250)
			button.move("DOWN",220);
		else if(x1-x2==100&y1==y2)
			button.move("LEFT",250);
		else if(x1-x2==-100&&y1==y2)
			button.move("RIGHT",250);
		else
			return;//不满足就不进行任何处理
		
		cellNull.setLocation(x1,y1);
		this.repaint();
		if(this.isFinish()){//进行是否完成的判断
			JOptionPane.showMessageDialog(this,"恭喜你完成拼图,加油!");
			for(int i=0;i<5;i++)
				cell[i].removeMouseListener(this);//如果已完成,撤消鼠标事件,鼠标单击方格不在起作用
			hasAddActionListener=false;
		}
	}

	
}



import javax.swing.Icon;
import javax.swing.JButton;
	
public class Cell extends JButton {
	Cell(Icon icon){//实际为ICON
		super(icon);
		this.setSize(250,220);
	}

	public void move(String direction,int sleep){//方格的移动
		if(direction=="UP"){
			this.setLocation(this.getBounds().x,this.getBounds().y-220);
		}else if(direction=="DOWN"){
			this.setLocation(this.getBounds().x,this.getBounds().y+220);
		}else if(direction=="LEFT"){
			this.setLocation(this.getBounds().x-250,this.getBounds().y);
		}else{
			this.setLocation(this.getBounds().x+250,this.getBounds().y);
		}
	}
	
}


 /*
 * JAVA小游戏-拼图 我做的第一个小游戏
 * Cell类是继承的按钮类,并加上相应图形,形成方格
 *MyCanvas是一个面板,加载Cell类的对象(方格),是这三个类中的核心
 *
 */

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Choice;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;


public class MyMainFrame extends JFrame implements ActionListener {
	MyCanvas myCanvas;
	JPanel panelNorth,panelPreview;//定义上方的面板,及预览所需的面板
	Button start,preview;//定义开始,预览,设定按钮
	Container container;//容器,得到内容面板
	
	public MyMainFrame() {//初使化
		container=this.getContentPane();
		start=new Button("开始");
		start.addActionListener(this);
		preview=new Button("预览");
		preview.addActionListener(this);
		panelPreview=new JPanel();
		panelPreview.setLayout(null);
		Icon icon=new ImageIcon("pictrue/pic_"+MyCanvas.pictureID+".jpg");
		JLabel label=new JLabel(icon);
		label.setBounds(0,0,500,662);//设置完整的图片位置
		panelPreview.add(label);
		
		
		panelNorth=new JPanel();
		panelNorth.setBackground(Color.red);
		panelNorth.add(start);
		panelNorth.add(preview);
		myCanvas=new MyCanvas();
		container.add(myCanvas,BorderLayout.CENTER);
		container.add(panelNorth,BorderLayout.NORTH);
		this.setTitle("拼图小游戏");
		this.setLocation(300,30);
		this.setSize(500,722);
		this.setResizable(false);
		this.setVisible(true);
		
		this.setDefaultCloseOperation(3);
	}
	public static void main(String[] args) {
		// TODO 自动生成方法存根
		new MyMainFrame();
		
	}
	public void actionPerformed(ActionEvent arg0) {//对三个按钮事件的处理
		// TODO 自动生成方法存根
		Button button=(Button)arg0.getSource();
		if(button==start){
			myCanvas.Start();
			
		}else if(button==preview){
			if(button.getLabel()=="预览"){
				container.remove(myCanvas);
				container.add(panelPreview);
				panelPreview.updateUI();
				container.repaint();
				
				button.setLabel("返回");
			}else{
				container.remove(panelPreview);
				container.add(myCanvas);
				container.repaint();
				button.setLabel("预览");
			}
		}
	}
}


加载中
0
mallon
mallon
楼主我帮你倒计时啊
Arrowing
Arrowing
一起
0
leo108
leo108
凭什么让别人帮忙完成你的作业(工作)
返回顶部
顶部