启动类
package com.yx.ui;public class App {
//启动入口public static void main(String[] args) {//如果想要开启一个界面,就创建谁的对象
// new DengJFrame();
// new ZCJFrame();new GameJFrame();}}
游戏类
package com.yx.ui;import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.border.BevelBorder;public class GameJFrame extends JFrame implements KeyListener{//创建二维数组int[][]date=new int[4][4];//记录空白方块的位置int x=0;int y=0;//游戏界面,所有跟游戏有关的代码public GameJFrame() {//初始化界面jmian();//初始化菜单caidan();//初始化数据daluan();//初始化图片tupian();//展示出来this.setVisible(true);}//初始化数据(打乱)private void daluan() {//需求://把一个一维数组中的数据: 0~15 打乱顺序//然后再按照4个一组的方式添加到二维数组当中//定义一个一维数组int[]temp= {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<temp.length;i++) {//获取随机索引int x=r.nextInt(temp.length);//交换数据int temp1=temp[i];temp[i]=temp[x];temp[x]=temp1;}//给二维数组添加数据//遍历一维数组temp得到每个元素,将每个元素添加到二维数组中//i=0 0 0//i=1 0 1//i=2 0 2.....for(int i=0;i<temp.length;i++) {if(temp[i]==0) {x=i/4;y=i%4;}else {date[i/4][i%4]=temp[i];}}}//初始化图片private void tupian() {//清空图片this.getContentPane().removeAll();//先加载的图片在上方//把内循环执行4次for(int i=0;i<4;i++) {//一行添加4张图片for(int j=0;j<4;j++) {//获取图片序号int num=date[i][j];//创建JLabel对象(管理容器)JLabel jLabel=new JLabel(new ImageIcon("image/animal/animal3/"+num+".jpg"));//指定图片位置jLabel.setBounds(105*j+83, 105*i+134, 105, 105);//给图片添加边框jLabel.setBorder(new BevelBorder(1));//0让图片凸起来,1让图片凹下去//将管理容器添加到容器内this.getContentPane().add(jLabel);}}//添加背景JLabel ba=new JLabel(new ImageIcon("image/background.png"));ba.setBounds(40, 40, 508, 560);this.getContentPane().add(ba);//刷新界面this.getContentPane().repaint();}private void caidan() {//创建菜单对象JMenuBar cdan=new JMenuBar();//创建菜单上面两个选项对象(功能 关于我们)JMenu gn=new JMenu("功能");JMenu gywm=new JMenu("关于我们");//创建选项下面的条目对象JMenuItem cxyx=new JMenuItem("重新游戏");JMenuItem cxdr=new JMenuItem("重新登入");JMenuItem gbyx=new JMenuItem("关闭游戏");JMenuItem gzh=new JMenuItem("公众号");//将每一个选项下面的条目添加到选项中gn.add(cxyx);gn.add(cxdr);gn.add(gbyx);gywm.add(gzh);//将菜单里面的两个选项添加到菜单当中cdan.add(gn);cdan.add(gywm);//给整个界面设置菜单this.setJMenuBar(cdan);}private void jmian() {//设置窗体的宽高this.setSize(603,680);//标题this.setTitle("拼图游戏");//置顶this.setAlwaysOnTop(true);//居中this.setLocationRelativeTo(null);//关闭模式setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//取消默认的居中放置this.setLayout(null);//添加键盘事件this.addKeyListener(this);}public static void main(String[] args) {}@Overridepublic void keyTyped(KeyEvent e) {// TODO Auto-generated method stub}@Overridepublic void keyPressed(KeyEvent e) {// TODO Auto-generated method stub}@Overridepublic void keyReleased(KeyEvent e) {//上下左右进行判断int code=e.getKeyCode();if(code==38) {System.out.println("向上移动");if(x==3) {//表示空白方块已经在最下方了,他的下面没有图片在能移动了return;}//把空白方块下方的数字往上移动//x,y 表示空白方块//x+1,y表示空白方块的数字date[x][y]=date[x+1][y];date[x+1][y]=0;x++;tupian();}else if(code==40) {System.out.println("向下移动");if(x==0) {return;}//把空白方块上方的数字往下移动date[x][y]=date[x-1][y];date[x-1][y]=0;x--;tupian();}else if(code==37) {//把空白方块右方的数字往下移动System.out.println("向左移动");if(y==3) {return;}date[x][y]=date[x][y+1];date[x][y+1]=0;y++;tupian();}else if(code==39) {//把空白方块左方的数字往下移动System.out.println("向右移动");if(y==0) {return;}date[x][y]=date[x][y-1];date[x][y-1]=0;y--;tupian();}}}
展示