Java 拼图小游戏

图片文件:

整体代码:
建一个 “L” 游戏拼图类 

package P;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
 
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.WindowConstants;
import javax.swing.border.BevelBorder;
 
public class L extends JFrame implements KeyListener,ActionListener{
	int[][] data=new int[4][4];
	int x,y;//表示空白图片的位置
	JMenuItem j1=new JMenuItem("重新游戏");
	JMenuItem j2=new JMenuItem("结束游戏");
	
	public L() {
		chuangti();
		caidan();
		daluan();
		image();
	    this.addKeyListener(this);
		this.setVisible(true);//可视化
	}
	
	
	//窗体搭建
	public void chuangti() {
		this.setTitle("拼图 游戏");//创建标题
		this.setSize(700,650);//设置窗体大小
		this.setAlwaysOnTop(true);//页面锁定置前
		this.setLocationRelativeTo(null);//将页面居中
		this.setDefaultCloseOperation(3);//设置关闭模式
		this.setLayout(null);//取消默认的排列方式
		
	}
	//菜单搭建
	public void caidan() {
		JMenuBar jmbar=new JMenuBar();
		
		JMenu jm=new JMenu("功能");
		
	/*	JFrame jFrame = new JFrame();
		//设置界面宽高
		jFrame.setSize(683,680);
		//设置界面的标题
		jFrame.setTitle("事件演示");
		//设置界面置顶
		jFrame.setAlwaysOnTop(true);
		//设置界面居中
		jFrame.setLocationRelativeTo(null);
		//设置关闭模式
		jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		//取消默认的居中放置,只有取消了才会按照xy轴的形式添加组件
		jFrame.setLayout(null);
		
		
		//创建一个按钮对象
		JButton jtb = new JButton("点我");
		//设置位置和宽高
		jtb.setBounds(0, 0, 100, 50);
		//给按钮添加动作监听
		//jtb:组件对象,便是你要给那个组件添加事件
		//addActionListener:表示我要给组件添加哪个事件监听(动作监听包含鼠标左键点击,空格)
		//参数:表示事件被触发之后要执行的代码
		//jtb.addActionListener(new MyActionListener());
		
		jtb.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("哒咩~不要点我");
			}
		});
		
		//把按钮添加到界面当中
		jFrame.getContentPane().add(jtb);
		
		jFrame.setVisible(true);
		*/
		
		
		
		j1.addActionListener(this);
		j2.addActionListener(this);
		
		jm.add(j1);
		jm.add(j2);
		
		jmbar.add(jm);
		
		this.setJMenuBar(jmbar);
	}
	//加载图片
	public void image() {
		this.getContentPane().removeAll();;//删除原来的图片
		//开始插入图片
		for(int i=0;i<4;i++) {
			for(int j=0;j<4;j++) {
				ImageIcon imag=new ImageIcon("C:\\Users\\czl21\\Desktop\\java\\image\\animal\\animal6\\"+data[i][j]+".jpg");
				JLabel jl=new JLabel(imag);
				jl.setBounds(j*80+110,i*80+100,80,80);
				jl.setBorder(new BevelBorder(1));
				this.getContentPane().add(jl);
				
				}
		}
		//插入背景图篇
		ImageIcon im=new ImageIcon("src\\image\\background.png");
		JLabel jl=new JLabel(im);
		jl.setBounds(50,15,520,540);
		this.getContentPane().add(jl);
		
		this.repaint();//刷新
	}
	//打乱图片
	public void daluan() {
		int[] t={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
		Random r=new Random();
		for(int i=0;i<16;i++) {
			int index=r.nextInt(16);
			int c=t[index];
			t[index]=t[i];
			t[i]=c;
		}
		for(int i=0;i<16;i++) {
			if(t[i]==0) {
				x=i/4;
				y=i%4;
			}
			data[i/4][i%4]=t[i];
		}
	}
 
 
	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}
 
 
	@Override
	public void keyPressed(KeyEvent e) {
		// TODO Auto-generated method stub
	}
	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		int code=e.getKeyCode();//获得键盘
		System.out.println(code);
		if(code==40) {
			//下
			if(x==3) {
				return ;
			}
			int c;
			c=data[x][y];
			data[x][y]=data[x+1][y];
			data[x+1][y]=c;
			x++;
			image();
		}
		else if(code==39) {
			//右
			if(y==3) {
				return ;
			}
			int c=data[x][y];
			data[x][y]=data[x][y+1];
			data[x][y+1]=c;
			y++;
			image();
		}
		else if(code==38) {
			//上
			if(x==0) {
				return ;
			}
			int c=data[x][y];
			data[x][y]=data[x-1][y];
			data[x-1][y]=c;
			x--;
			image();//加载图片
		}
		else if(code==37) {
			//左
			if(y==0) {
				return ;
			}
			int c=data[x][y];
			data[x][y]=data[x][y-1];
			data[x][y-1]=c;
			y--;
			image();
		}
		
	}
 
 
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		Object s=e.getSource();//获取点击事件
		if(s==j1) {
			//重新游戏
			System.out.println("点击了重新游戏");
			daluan();
			image();
		}
		else if(s==j2) {
			//结束游戏
			System.out.println("点击了结束游戏");
			System.exit(0);
		}
	}
}

 建立一个测试类:

package P;

import 拼图.GameJFrame;

public class M{
		public static void main(String[] args) {
			new L();
		}
	

}

运行:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值