java实现简单的拼图游戏

用Java来实现简单的拼图游戏,供大家参考,具体内容如下

首先我们看一下这个拼图小游戏的效果图:

创建一个名称为MedleyGame的类,该类继承了JFrame类;然后在该类中分别声明一个面板对象和一个按钮对象,面板对象用来添加拼图按钮,按钮对象为当前显示空白图片的按钮;最后为该类编写一个main()方法和一个构造方法MedleyGame(),并在构造方法中设置窗体的相关属性,如窗体的标题、显示位置、大小等。
java项目结构如下:

具体java代码如下:

package pac;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
public class MedleyGame extends JFrame{

 private JPanel centerPanel;// 拼图按钮面板
 private JButton emptyButton;// 空白按钮对象
 public static void main(String[] args) {
  try {
   MedleyGame frame = new MedleyGame();//创建本类的对象
   frame.setVisible(true);//设置窗体为可见
  }catch(Exception e) {
   e.printStackTrace();
  }
 }
 public MedleyGame() {
  super();// 继承JFrame类的构造方法
  setResizable(false);// 设置窗体大小不可改变
  setTitle("拼图游戏");// 设置窗体的标题
  setBounds(100, 100, 354, 435);// 设置窗体的显示位置及大小
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置关闭窗体时退出程序
  final JPanel topPanel = new JPanel();// 创建面板对象
  topPanel.setBorder(new TitledBorder(null, "", TitledBorder.DEFAULT_JUSTIFICATION,
    TitledBorder.DEFAULT_POSITION, null, null));// 为面板添加边框
  topPanel.setLayout(new BorderLayout());// 设置面板采用边界布局
  getContentPane().add(topPanel,BorderLayout.NORTH);// 将面板添加到窗体顶部
  final JLabel modelLabel = new JLabel();// 创建显示参考图片的标签对象
  modelLabel.setIcon(new ImageIcon("img/model.jpg"));// 设置标签显示的参考图片
  topPanel.add(modelLabel, BorderLayout.WEST);// 将标签添加到面板的左侧
  final JButton startButton = new JButton();// 创建“下一局”按钮对象
  startButton.setText("下一局");// 设置按钮的标签文本
  startButton.addActionListener(new StartButtonAction());// 为按钮添加监听器
  topPanel.add(startButton, BorderLayout.CENTER);// 将按钮添加到面板的中间

  centerPanel = new JPanel();// 创建拼图按钮面板对象
  centerPanel.setBorder(new TitledBorder(null, "",
    TitledBorder.DEFAULT_JUSTIFICATION,
    TitledBorder.DEFAULT_POSITION, null, null));// 为面板添加边框
  centerPanel.setLayout(new GridLayout(0, 3));// 设置拼图按钮面板采用3列的网格布局
  getContentPane().add(centerPanel, BorderLayout.CENTER);// 将面板添加到窗体的中间

  String[][] stochasticOrder = reorder();// 获得网格图片的随机摆放顺序
  for (int row = 0; row < 3; row++) {// 遍例行
   for (int col = 0; col < 3; col++) {// 遍例列
    final JButton button = new JButton();// 创建拼图按钮对象
    button.setName(row + "" + col);// 设置按钮的名称
    button.setIcon(new ImageIcon(stochasticOrder[row][col])); // 为拼图按钮设置图片
    if (stochasticOrder[row][col].equals("img/22.jpg")) // 判断是否为空白按钮
     emptyButton = button;
    button.addActionListener(new ImgButtonAction()); // 为拼图按钮添加监听器
    centerPanel.add(button);// 将按钮添加到拼图按钮面板中
   }
  }
  //
 }
 private String[][] reorder(){// 用来获取网格图片的随机摆放顺序
  String[][] exactnessOrder = new String[3][3];// 网格图片的正确摆放顺序
  for (int row = 0; row < 3; row++) {// 遍例行
   for (int col = 0; col < 3; col++) {// 遍例列
    exactnessOrder[row][col] = "img/" + row + col + ".jpg";
   }
 }
  String[][] stochasticOrder = new String[3][3];// 网格图片的随机摆放顺序
  for (int row = 0; row < 3; row++) {// 遍例行
   for (int col = 0; col < 3; col++) {// 遍例列
    while (stochasticOrder[row][col] == null) { // 随机摆放顺序的指定网格为空
     int r = (int) (Math.random() * 3);// 取随机行
     int c = (int) (Math.random() * 3);// 取随机列
     if (exactnessOrder[r][c] != null) { // 正确摆放顺序的指定网格不为空
      // 将位于正确摆放顺序的指定网格的图片摆放到位于随机摆放顺序的指定网格中
      stochasticOrder[row][col] = exactnessOrder[r][c];
      // 将位于正确顺序的指定网格设置为空
      exactnessOrder[r][c] = null;
     }
    }
   }
  }
  return stochasticOrder;
 }

 class ImgButtonAction implements ActionListener {// 拼图按钮监听器
  public void actionPerformed(ActionEvent e) {
   String emptyName = emptyButton.getName();// 获得空白按钮的名称
   char emptyRow = emptyName.charAt(0);// 获得空白按钮所在的行
   char emptyCol = emptyName.charAt(1);// 获得空白按钮所在的列
   JButton clickButton = (JButton) e.getSource();// 获得被点击按钮对象
   String clickName = clickButton.getName();// 获得被点击按钮的名称
   char clickRow = clickName.charAt(0);// 获得被点击按钮所在的行
   char clickCol = clickName.charAt(1);// 获得被点击按钮所在的列
   // 判断被点击按钮与空白按钮是否相临
   if (Math.abs(clickRow - emptyRow) + Math.abs(clickCol - emptyCol) == 1) {
    // 将被点击按钮的图片移动到空白按钮上
    emptyButton.setIcon(clickButton.getIcon());
    // 设置被点击的按钮显示空白图片
    clickButton.setIcon(new ImageIcon("img/22.jpg"));
    emptyButton = clickButton;// 将被点击的按钮设置为空白按钮
   }
  }
 }
 class StartButtonAction implements ActionListener {// 下一局按钮监听器
  public void actionPerformed(ActionEvent e) {
   String[][] stochasticOrder = reorder();// 获得网格图片的随机摆放顺序
   int i = 0;// 拼图按钮在拼图按钮面板中的索引
   for (int row = 0; row < 3; row++) {// 遍例行
    for (int col = 0; col < 3; col++) {// 遍例列
     JButton button = (JButton) centerPanel.getComponent(i++); // 获得位于指定索引的拼图按钮
     button.setIcon(new ImageIcon(stochasticOrder[row][col])); // 为拼图按钮设置图片
     if (stochasticOrder[row][col].equals("img/22.jpg")) // 判断是否为空白按钮
      emptyButton = button;
    }
   }
  }
 }
}

到这里代码程序就写完了,我们来运行一下:

按步骤保存然后运行一下:

结果没问题,单击“下一局”会重新刷新游戏,图片会进行随机排布:

到此,一个简简单单的拼图小游戏就实现了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • JavaFx实现拼图游戏

    最近学习JavaFx,发现网上大概只有官方文档可以查阅,学习资料较少,写个拼图游戏供记录.. 大概说一下思路: 1.面板的构建:面板采用GridPane,方便3*3的图片布局. 2.每个小格子中的图片当然不是一张张手工切好的,利用imageview.setViewPort(Rectangle2D 2d)的方法进行切割. 3.再来说鼠标点击时图片的移动,这时候以里面的空格子为中心,不以鼠标点击的那个事件源为中心,这样可以避免走弯路(当时我是有一种柳暗花明的感觉.). 4.鼠标点击后空格子和其周围带

  • Java游戏开发拼图游戏经典版

    游戏介绍: 拼图游戏是一款经典的益智游戏,游戏难度分为 简单.正常.困难 三种难度,分别对应3*3,4*4,5*5布局,游戏开始前图片被随机打乱,空块位于最右下角,玩家通过点击空块周围图片或者按键方式对图片和空块进行相互交换,直到所有图片都回到原位即为游戏胜利. 本次制作的拼图游戏运行界面如下: 使用素材文件夹: 链接: https://pan.baidu.com/s/10qE7yq6IwU-vWprvc5Axgw   提取码: p16e 游戏设计的思路 对拼图界面的图像信息可以采用二维数组ma

  • java实现拼图小游戏

    一个简单的拼图小游戏,供大家参考,具体内容如下 1.首先设计视图面板. 2.添加所需要的图片按钮. 3.最主要的是设计监听事件,添加图片的监听按钮,设定移动空白图片周围的按钮. 4.判断是否成功 . package sxy; import java.awt.Choice; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.MouseAdapter; import java.awt.event.MouseEv

  • java实现九宫格拼图游戏

    本文实例为大家分享了java实现九宫格拼图游戏的具体代码,供大家参考,具体内容如下 设计步骤: 先将框架构思出来,首先将拼图游戏的雏形实现,即一个界面,九个按钮,按钮上的图片显示出自己想要的图片. (1)其次构思移动版块的问题,想到按钮直接互换是极为麻烦的一件事,所以采用更换按钮上的图片.按钮类上有两个属性,a[9]表示按钮的位置,b[9]表示按钮上图片的编号, 空白快图片编号为8标记,点击按钮之后,点击事件得到点击的块数在哪(1-9),if -else判断相邻是否为标记的空白快.方法简单但是代

  • java控制台实现拼图游戏

    本文实例为大家分享了java控制台实现拼图游戏的具体代码,供大家参考,具体内容如下 1.首先对原始的拼图进行多次无规律的移动,将拼图打乱 2.然后进行游戏,在游戏移动同时对拼图顺序进行判断 ①如果拼图成功,则跳出循环,结束游戏: ②如果拼图失败,陷入死循环,继续移动拼图,直至拼图成功为止. import java.util.Random; import java.util.Scanner; public class GrameOfPingTuTest{ private static Scanne

  • java实现拼图游戏

    本文实例为大家分享了java实现拼图游戏的具体代码,供大家参考,具体内容如下 游戏说明: 设计一款拼图游戏,要求点击图片按钮,实现图片按钮的移动,直到每一个按钮都到达指定位置游戏终止退出. 游戏设计思路: 1.准备一张图像文件: 2.创建N个按钮图标,每个按钮图标里面存入一张分割后的图片信息: 3.创建一个空白按钮用于和图标按钮交换位置,达到移动的效果: 4.乱序,将按钮图标乱序,完成游戏效果: 5.创建一个面板添加游戏开始和游戏结束按钮: 6.设计游戏窗口: 游戏界面设计基本结构: 代码实现:

  • Java制作智能拼图游戏原理及代码

    今天突发奇想,想做一个智能拼图游戏来给哄女友. 需要实现这些功能 第一图片自定义 第二宫格自定义,当然我一开始就想的是3*3 4*4 5*5,没有使用3*5这样的宫格. 第三要实现自动拼图的功能,相信大家知道女人耍游戏都不是很厉害,所以这个自动拼图功能得有. 其他什么暂停.排行就不写了! 现在重点问题出来了 要实现自动拼图功能似乎要求有点高哦!计算机有可不能像人一样只能: 先追究下本质 拼图游戏其实就是排列问题: 排列有这么一个定义:在一个1,2,...,n的排列中,如果一对数的前后位置与大小顺

  • java实现简单美女拼图游戏

    拼图小游戏,学习阶段.很多不足,改进了一下 演示图片: J_Puzzle.java import java.awt.BorderLayout; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.GridBagConstraints; import java.a

  • java实现简单的拼图游戏

    用Java来实现简单的拼图游戏,供大家参考,具体内容如下 首先我们看一下这个拼图小游戏的效果图: 创建一个名称为MedleyGame的类,该类继承了JFrame类:然后在该类中分别声明一个面板对象和一个按钮对象,面板对象用来添加拼图按钮,按钮对象为当前显示空白图片的按钮:最后为该类编写一个main()方法和一个构造方法MedleyGame(),并在构造方法中设置窗体的相关属性,如窗体的标题.显示位置.大小等. java项目结构如下: 具体java代码如下: package pac; import

  • java基础教程之拼图游戏的实现

    目录 前言 废话不多说,直接上效果图: 1.所需技术 2.具体实现 2.1 图片制作 2.2 创建项目 2.3 编码实现 总结 前言 大家在初学java的时候,大部分的代码都是在控制台上运行的.可能大家辛辛苦苦写了几十行代码,最终就只是在控制台输出一个字符,这个时候,心里肯定是拔凉拔凉的,心中那一朵编程的火花,就马上给扑灭了.我们都知道兴趣是最好的老师.为了拯救大家快要熄灭的小火花,小编在这里给大家带来使用java做个小游戏,并且通过做这个游戏,好好收悉一下面向对象的实际使用. 废话不多说,直接

  • 基于JS实现简单滑块拼图游戏

    成品效果 <body> <div id="game" style="position:relative"></div> </body> /** * js配置 */ var config = { width: 300, height: 300, img: "./img/fj.jpg", gameDom: document.getElementById("game"), row: 3

  • Java实现简单推箱子游戏

    本文实例为大家分享了Java实现简单推箱子游戏的具体代码,供大家参考,具体内容如下 *编写一个简易的推箱子游戏,使用10*8的二维字符数据表示游戏画面,H表示墙壁; &表示玩家角色: o表示箱子,表示目的地.玩家可以通过输入a.d.w. s字符控制角色 移动,当箱子推到目的地时显示游戏结束,运行结果如图所示. package test; import java.util.Random; import java.util.Scanner; public class test3 { public s

  • 基于Java实现简单贪吃蛇游戏

    本文实例为大家分享了Java实现简单贪吃蛇游戏的具体代码,供大家参考,具体内容如下 贪吃蛇小游戏制作方法 首先需要的准备有: 1.掌握Java基础知识,即Java SE 2.了解一定的GUI知识 3.自定义的贪吃蛇图片(可以在网上找到) 如果以上三点都没有,也不要紧,完全可以看我之前的博文来进行学习!!!! 学习贪吃蛇的目的 一:了解GUI 对前端的知识进行了解 二:了解监听器的作用 熟练掌握监听器(重点) 三:为枯燥乏味的学习提高兴趣(大重点!!) 贪吃蛇小游戏运行效果 设计思路: 由Game

  • java实现简单五子棋小游戏(2)

    本文实例为大家分享了java实现简单五子棋小游戏游戏的具体代码,供大家参考,具体内容如下 讲解 在第一步实现的基础上,添加游戏结束条件.五子棋游戏中的相同棋子如果同时有五个连接成一条线就说明游戏结束. 代码实现如下: if(count!=0){                 //判断每一行                 for(int j=0;j<11;j++){                     for(int i=0;i<7;i++){                      

  • java实现简单五子棋小游戏(1)

    本文实例为大家分享了java实现简单五子棋小游戏的具体代码,供大家参考,具体内容如下 讲解 五子棋,实际上就是用一个数组来实现的.没有其他很复杂的结构.首先我们制作五子棋,先要有一个棋盘. public void setGraphics(Graphics g){         this.g=g;         for(int i=0;i<11;i++){             g.drawLine(100+Size*i, 100, 100+Size*i, 500);           

  • Java实现简单的迷宫游戏详解

    目录 前言 主要设计 功能截图 代码实现 窗口布局 核心算法 总结 前言 人类建造迷宫已有5000年的历史.在世界的不同文化发展时期,这些奇特的建筑物始终吸引人们沿着弯弯曲曲.困难重重的小路吃力地行走,寻找真相.迷宫类小游戏应运而生.在游戏中,迷宫被表现为冒险舞台里,藏有各式各样奇妙与谜题或宝藏的危险区域.型态有洞窟.人工建筑物.怪物巢穴.密林或山路等.迷宫内有恶徒或凶猛的生物(真实存在或想像物体都有)徘徊,其中可能会有陷阱.不明设施.遗迹等. <简单迷宫>游戏是用java语言实现,采用了sw

  • java实现简单三子棋游戏

    本文实例为大家分享了java实现简单三子棋游戏的具体代码,供大家参考,具体内容如下 JOptionPane类的使用 编写程序,实现简单的三子棋游戏.在三子棋中,双方在3×3的棋盘中轮流下棋,一方用*示,另一方用O表示.如果一方的3个棋子占据了同一行,同一列或者对角线,则该方获胜.如果棋盘已被棋子占满,但没有一方获胜则出现平局.在程序中,一方为用户,用户在界面上输入每次下棋的位置:另一方下棋的位置为随机自动生成.示例界面如图所示. 提示:(1) 采用Scanner类或者JOptionPane类中提

随机推荐