JAVA 拼图游戏 可选图,可选难度,游戏计时

  • i7_388268
    了解作者
  • 603.2KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-06-05 09:50
    上传日期
JAVA 拼图游戏 可选图,可选难度(初级,中级,高级),游戏计时(拼图完成时间),注释详细,正在学习GUI编程的童鞋们可以参考一下
pintuGame.zip
  • pintuGame
  • pic
  • 8.jpg
    50.5KB
  • 2.jpg
    58.9KB
  • 1.jpg
    64.7KB
  • 6.jpg
    83.5KB
  • 3.jpg
    71KB
  • 5.jpg
    68.1KB
  • 4.jpg
    65.8KB
  • 7.jpg
    81.1KB
  • 0.jpg
    57.2KB
  • PintuGame.java
    7.7KB
内容介绍
package pintuGame; import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.io.*; import javax.imageio.ImageIO; import javax.swing.*; import java.util.Random; public class PintuGame { public static void main(String args[]) { new PintuFrame().StartFrame(); } } class PintuFrame extends JFrame { private static final long serialVersionUID = 1L; public static int level = 3;//等级设置 public static int index=0;//图片索引 public static int picCount = 9;//图片数量 long start,end; JButton[] jb;////初始化小方块 JPanel nullPanel = new JPanel();//初始化空方块 PintuListener ptl = new PintuListener();//初始化监听类 JPanel jp = new JPanel(null);//初始化Panel JLabel piclab;//图片预览 String[] imgpath = new String[picCount]; String path; /** * 图片组初始化 */ PintuFrame(){ for(int i=0;i<picCount;i++){ imgpath[i] = "src/pintuGame/pic/"+i+".jpg"; } path = imgpath[index]; } /** * 开始窗体加载 */ public void StartFrame(){ jp.removeAll(); JButton start = new JButton("开始");//开始按钮 JButton left= new JButton("<"); JButton right = new JButton(">"); JLabel selLevel = new JLabel("LV:"); piclab = new JLabel(getIcon());//根据图标设置标签 final Choice choice = new Choice();//创建选择器 choice.add("--初级--");//添加列表项 choice.add("--中级--"); choice.add("--高级--"); selLevel.setBounds(5, 0,20,20);//设置坐标 choice.setBounds(28, 0,65,20); start.setBounds(93, 0,85,20); left.setBounds(178,0,61,20); right.setBounds(239, 0, 61, 20); piclab.setBounds(0, 22, 300, 300);//设置标签的方位 jp.add(selLevel); jp.add(choice); jp.add(start); jp.add(left); jp.add(right); jp.add(piclab); jp.repaint(); add(jp); setTitle("拼图 by:www.7x-space.com"); setBounds(450,130,300,322); setResizable(false); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//添加关闭按钮 setVisible(true); //监听等级选择 start.addMouseListener(new MouseAdapter(){ public void mousePressed(MouseEvent e) { level = choice.getSelectedIndex() +3; launchFrame(); } }); //监听选图按钮 <- left.addMouseListener(new MouseAdapter(){ public void mousePressed(MouseEvent e) { if(index==0){ index=picCount-1; path = imgpath[index]; }else{ path = imgpath[--index]; } jp.remove(piclab); piclab = new JLabel(getIcon()); piclab.setBounds(0, 22, 300, 300); jp.add(piclab); jp.repaint(); } }); //监听选图按钮 -> right.addMouseListener(new MouseAdapter(){ public void mousePressed(MouseEvent e) { if(index==picCount-1){ index = 0; path = imgpath[index]; }else{ path = imgpath[++index]; } jp.remove(piclab); piclab = new JLabel(getIcon()); piclab.setBounds(0, 22, 300, 300); jp.add(piclab); jp.repaint(); } }); } /** * 拼图窗体加载 */ public void launchFrame() { start = System.currentTimeMillis(); jp.removeAll(); jb = new JButton[level*level]; //设置图标组 Icon[] icon = new PintuFrame().creatIcon(path); int index = 0;//小方块索引 int x = 0, y = 0;//小方块坐标 //设置小方块位置,图标,监听 for (int i = 0; i < level; i++) { for (int j = 0; j < level; j++) { jb[index] = new JButton(icon[index]);//添加图标 jb[index].addMouseListener(ptl);//添加监听 jb[index].setBounds(x, y, 100, 100);//设置位置 jp.add(jb[index++]);//添加到panel x += 100; } y += 100; x = 0; } jp.remove(jb[(level*level)-1]);//移除最后一个小方块 //设置空方块位置 nullPanel.setBounds((level-1)*100, (level-1)*100, 100, 100); jp.add(nullPanel);//添加空方块 jp.repaint(); add(jp); setResizable(false); setTitle("拼图 by:www.7x-space.com"); setBounds(450, 130, level*100, level*100+30);//设置大小 breakRank();//大乱方格顺序 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//添加关闭按钮 } /** * 选图界面图像 * @return */ public Icon getIcon(){ Icon icon; try { Image bi = ImageIO.read(new File(path));//读取图片 Image image = bi.getScaledInstance(300, 300,Image.SCALE_REPLICATE);//缩放大小并显示到窗体 icon = new ImageIcon(image);//获得图片图标 return icon; } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); System.out.println("图片路径错误!"); return null; } } /** * 打乱方格 */ public void breakRank(){ Random r = new Random(); int rid; int x=0,y=0,nullDir_X=0,nullDir_Y=0; for(int i =0;i<1000;i++){//模拟随即点击1000次,打乱方格 rid=r.nextInt(level*level-1); x = jb[rid].getBounds().x; // 获得该方格按钮的横坐标 y = jb[rid].getBounds().y;// 获得该方格按钮的纵坐标 nullDir_X = nullPanel.getBounds().x;// 得到空方格的横坐标 nullDir_Y = nullPanel.getBounds().y;// 得到空方格的纵坐标 move(x,y,nullDir_X,nullDir_Y,jb[rid]); } } /** * 移动方格 * @param direction * @param jb */ public void move(int x,int y,int nullDir_X,int nullDir_Y, JButton button) { if (x == nullDir_X && y - nullDir_Y == 100)// 进行比较果满足条件则交换 button.setLocation(button.getBounds().x, button.getBounds().y - 100); else if (x == nullDir_X && y - nullDir_Y == -100) button.setLocation(button.getBounds().x, button.getBounds().y + 100); else if (x - nullDir_X == 100 & y == nullDir_Y) button.setLocation(button.getBounds().x - 100, button.getBounds().y); else if (x - nullDir_X == -100 && y == nullDir_Y) button.setLocation(button.getBounds().x + 100, button.getBounds().y); else return; nullPanel.setLocation(x, y);// 重新设置空方格的位置 } /** * 判断是否拼凑成功 */ public boolean isFinish() { for (int i = 0; i < (level*level)-1; i++) { int x = jb[i].getBounds().x; int y = jb[i].getBounds().y; if (y / 100 * level + x / 100 != i)//根据坐标位置判断是否拼凑成功 0+0 0+1 .. return false; } return true; } /** * 事件监听类 * @author X */ public class PintuListener extends MouseAdapter { public void mousePressed(MouseEvent e) { JButton button = (JButton) e.getSource();// 获得鼠标按的方格按钮 int x = button.getBounds().x;// 获得该方格按钮的横坐标 int y = button.getBounds().y;// 获得该方格按钮的纵坐标 int nullDir_X = nullPanel.getBounds().x;// 得到空方格的横坐标 int nullDir_Y = nullPanel.getBounds().y;// 得到空方格的纵坐标 move(x,y,nullDir_X,nullDir_Y,button); if (isFinish()) {// 进行是否完成的判断 end = System.currentTimeMillis(); jp.remove(nullPanel);//移除最后一个小方块 jp.add(jb[(level*level)-1]);//移除最后一个小方块 JOptionPane.showMessageDialog(null, "恭喜你,完成拼图\r\n用时为:"+(end-start)/1000+"S"); for (int i = 0; i < picCount; i++) {// 循环撤消鼠标事件 jb[i].removeMouseListener(ptl); } StartFrame(); } repaint(); } } /** * 创建方格图标组 * @param srcImageFile */ public Icon[] creatIcon(String srcImageFile) { try { // 读取源图像 Image bi = ImageIO.read(new File(srcImageFile)); int index = 0; int x = 0, y = 0; Icon[] icon = new Icon[level*level];//根据窗体大小创建图标数量 for (int i = 0; i < level; i++) { for (int j = 0; j < level; j++) { // 从原图像上获取一个方形位置 ImageFilter cropFilter = new CropImageFilter(x, y, 100, 100); // 截取方形图像 Image img = Toolkit.getDefaultToolkit().createImage( new FilteredImageSource(bi.getSource(),cropFilter)); icon[index++] = new ImageIcon(img); x += 100; } y += 100; x = 0; } return icon; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("图片路径错误,请检查位置!"); } return null; } }
评论
    相关推荐
    • Java
      Java
    • java
      Java
    • Java
      Java
    • Java
      Java项目
    • Java
      Java 对于Java练习
    • java
      Java 此回购包括我学习Java的旅程。
    • java
      Java Java基础
    • Java
      Java
    • Java
      Java 我创建的Java项目
    • Java
      Java 2021/02/19 .java Main.java 学生.java Bmi.java 。班级 Bmi类 主类 MyBmi.class 学生班 学生样本类 2021/02/20 .java DeleteFile.java WriteFile.java MyDataPrint.java 。班级 DeleteFile.class ...