游戏说明:

设计一款拼图游戏,要求点击图片按钮,实现图片按钮的移动,直到每一个按钮都到达指定位置游戏终止退出。

游戏设计思路:

1.准备一张图像文件;

2.创建N个按钮图标,每个按钮图标里面存入一张分割后的图片信息;

3.创建一个空白按钮用于和图标按钮交换位置,达到移动的效果;

4.乱序,将按钮图标乱序,完成游戏效果;

5.创建一个面板添加游戏开始和游戏结束按钮;

6.设计游戏窗口;

代码实现:

Cell类----设计每个按钮对象应该具备的属性功能—针对按钮

package puzzle_game;
import java.awt.Rectangle;
import javax.swing.Icon;
import javax.swing.JButton;
@SuppressWarnings("serial")
public class Cell extends JButton{private static int IMAGEWIDTH;//设置按钮的宽度大小private static int IMAGEHEIGHT;private int ID = 0;//设置当前按钮的指向坐标public Cell(Icon icon, int id, int imagewidth, int height)//构造函数初始化,传入两个参数,一个是图像的图标,一个是该按钮的数组ID{this.setIcon(icon);this.ID = id;this.IMAGEWIDTH = imagewidth;this.IMAGEHEIGHT = height;this.setSize(IMAGEWIDTH, IMAGEHEIGHT);}public void move(Direction dir)//移动{Rectangle rec = this.getBounds();//获取当前对象的这个边框switch(dir){case UP://向上移动,改变坐标this.setLocation(rec.x, rec.y + IMAGEHEIGHT);break;case DOWN://向下移动this.setLocation(rec.x, rec.y - IMAGEHEIGHT);break;case LEFT://向左移动this.setLocation(rec.x - IMAGEWIDTH, rec.y);break;case RIGHT://向右移动this.setLocation(rec.x + IMAGEWIDTH, rec.y);break;}}public int getID() {return ID;}public int getX(){return this.getBounds().x;}public int getY(){return this.getBounds().y;}
}

Direction类------方向枚举类,存放移动的方向

package puzzle_game;
public enum Direction {UP,DOWN,LEFT,RIGHT
}

GamePanel类-----游戏面板设计类,真正的游戏思想从此开始

主要实现的功能有:

1.初始化面板按钮数组,将图像转化成图标然后存入按钮中;

2.打乱数组面板中的按钮排序,实现游戏娱乐功能;

3.每个按钮添加监听机制,实现点击按钮后的移动功能;

package puzzle_game;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class GamePanel extends JPanel implements MouseListener{private Cell BlankCell = null;private int row = 4;private int col = 4;//设置这个拼图的行列private Cell cells[] = new Cell[row*col];//创建一个按钮对象数组int ImageWidth;int ImageHeight;public GamePanel()//构造函数{this.setLayout(null);init();}public void init()//初始化完成以下功能--完成图像的切割,完成图像到图标的转换,完成按钮图标的添加,将按钮添加到面板上,并且给每一个按钮添加监听机制{int num = 0;BufferedImage buf = null;BufferedImage bufnew = null;ImageIcon icon = null;int width = 0;int height = 0;try{buf = ImageIO.read(new File("F:/Image/Puzzle_game/puze.jpg"));//读取文件图像ImageWidth = buf.getWidth();ImageHeight = buf.getHeight();System.out.println("ImageWidth->"+ImageWidth+"ImageHeight->"+ImageHeight);width = ImageWidth/col;height = ImageHeight/row;}catch(Exception e){System.out.println(e);}for(int i = 0; i < row; i++){for(int j = 0; j < col; j++){num = i*col+j;//表示当前这个图像的坐标id,在数组中的下标if(num < row*col-1){bufnew = buf.getSubimage(width*j, height*i, width, height);icon = new ImageIcon(bufnew);//将图像转化成图标}else//使最后一张图像为空白图像{icon = new ImageIcon("F:/Image/Puzzle_game/background2.jpg");//一张空白图像}cells[num] = new Cell(icon, num, width, height);//添加图标到每一个BUTTON按钮上面cells[num].setLocation(width*j, height*i);}}BlankCell = cells[cells.length-1];//初始化空白格for(int i = 0; i < cells.length; i++){this.add(cells[i]);//将每一个按钮添加到当前这个面板上面if(i < cells.length-1)cells[i].addMouseListener(this);//空白格不添加监听机制}}public void OutOfOrder()//乱序----打乱图片的排布顺序{Random random = new Random();for(int i = 0 ; i < cells.length ; i++){int index1 = random.nextInt(cells.length);//cells的长度是9,但是他的上限是9,取不到9,所取值范围是0-8int index2 = random.nextInt(cells.length);int x = cells[index1].getX();int y = cells[index1].getY();//获取下标是index1的数组元素按钮的坐标cells[index1].setLocation(cells[index2].getX(), cells[index2].getY());cells[index2].setLocation(x, y);}}public boolean IsWin()//判断游戏玩家是否赢{for(int i = 0; i < cells.length; i++){int x = cells[i].getX();int y = cells[i].getY();if(x/(ImageWidth/col) + y/(ImageHeight/row) != i){return false;}}return true;}public void mouseClicked(MouseEvent e){Cell t = (Cell) e.getSource();int x = BlankCell.getX();int y = BlankCell.getY();if(t.getY() == y && t.getX() + ImageWidth/col == x)//图像向右走{t.move(Direction.RIGHT);BlankCell.move(Direction.LEFT);}else if(t.getY() == y && t.getX() - ImageWidth/col == x)//图像向左走{t.move(Direction.LEFT);BlankCell.move(Direction.RIGHT);}else if(t.getX() == x && t.getY() + ImageHeight/row == y)//图像向上走{t.move(Direction.UP);BlankCell.move(Direction.DOWN);}else if(t.getX() == x && t.getY() - ImageHeight/row == y)//图像向下走{t.move(Direction.DOWN);BlankCell.move(Direction.UP);}if(IsWin()){int choice = JOptionPane.showConfirmDialog(null, "恭喜您过关了是否还来一局?", "提示", JOptionPane.YES_NO_OPTION);if(choice == 0)//表示再来一局{this.OutOfOrder();}else//表示退出游戏System.exit(1);}}@Overridepublic void mousePressed(MouseEvent e) {}@Overridepublic void mouseReleased(MouseEvent e) {}@Overridepublic void mouseEntered(MouseEvent e) {}@Overridepublic void mouseExited(MouseEvent e) {}
}

GameFrame类------设置游戏的打开窗口类,创建了一个菜单面板存放游戏开始和游戏结束两个按钮,并且对游戏的窗口进行了基本设置,这是整个游戏的入口。

package puzzle_game;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GameFrame extends JFrame {public JPanel pane1 = new JPanel();public JButton button1 = new JButton("游戏开始");public JButton button2 = new JButton("游戏结束");public GameFrame(){super("拼图游戏");pane1.setLayout(new FlowLayout());pane1.add(button1);pane1.add(button2);Container con = this.getContentPane();con.add(pane1,BorderLayout.NORTH);GamePanel gamepane = new GamePanel();con.add(gamepane,BorderLayout.CENTER);this.setBounds(300, 300, 600, 600);this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);button1.addActionListener(new ActionListener(){public void actionPerformed(final ActionEvent e){gamepane.OutOfOrder();}});button2.addActionListener(new ActionListener(){public void actionPerformed(final ActionEvent e){System.exit(1);}});}public static void main(String[] args) {new GameFrame();  }
}

千锋重庆Java基础之Java拼图游戏的代码相关推荐

  1. 【Java】Java基础飞机大战小游戏完整代码

    Java基础飞机大战小游戏完整代码 先来展示一下代码实现结果图 主函数ShootGame 初始化游戏原始背景图片,游戏人物图片,游戏开始结束图片:构建产生敌人算法:产生英雄机算法:发射子弹算法:判断是 ...

  2. 千锋重庆Java学习之五大Java自动化部署工具

    在Java开发工具中,有一种是自动化部署工具,下面千锋重庆小编就给大家介绍五大Java自动化部署工具: 五大Java自动化部署工具 Jenkins Jenkins 是一种开源持续集成(CI) 工具,能 ...

  3. Java综合项目:拼图游戏

    Java综合项目:拼图游戏 零.项目描述 1. 用户登录界面 2. 注册界面 3. 游戏界面 4. 素材 一.创建主界面 二.界面设置 三.制作菜单栏 四.添加图片 五.打乱图片 六.美化界面 七.移 ...

  4. java基础之java中的基本数据类型

    java基础之java中的基本数据类型 学习java一段时间了,使用java也差不多一年多了,可是对于后续的java的学习真的是后劲不足,或者是说懒惰吧,回想一下这一年多,用java最多的就是Andr ...

  5. java基础之----java常见异常及代码示例

    java基础之----java常见异常及代码示例 参考文章: (1)java基础之----java常见异常及代码示例 (2)https://www.cnblogs.com/gunduzi/p/1203 ...

  6. 基于Java实现的Android拼图游戏设计

    资源下载地址:https://download.csdn.net/download/sheziqiong/85638665 基于Java实现的Android拼图游戏设计 游戏效果 一.Android ...

  7. java基础总结-java技术栈快速复习

    java基础 java基础概念 java概述和语言背景 java语言是没有sun公司(Stanford University Network:斯坦福大学网络)在1995年推出的计算机语言 java之父 ...

  8. 【Java基础】· Java基本语法:程序流程控制习题总结

    写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...

  9. 黑马程序员:Java基础总结----Java语言编程规范

       黑马程序员:Java基础总结        Java语言编程规范:参考自SUN公司文档  ASP.Net+Android+IO开发..Net培训.期待与您交流!  I.   排版规范 A.  规 ...

  10. java基础:Java七大外企经典面试精讲视频

    java基础:Java七大外企经典面试精讲视频 对于很多应聘java程序员的求职者来说,全面掌握java面试技巧,确实是自己找到一个好工作的敲门砖.今天小编在这里给大家分享一个关于java基础的Jav ...

最新文章

  1. centos7.4 ngixn1.13.10 mysql5.7.21 php7.2.3 源码编译安装之后php无法连接mysql
  2. C/S和B/S的异同
  3. centos php 开启socket,CentOS 配置PHP支持socket扩展
  4. DOM编程艺术12章
  5. 入门干货:Python操作Word文件经验分享
  6. subsonic 3.0 mysql_SubSonic 3.0新特性
  7. Facebook开源新NLP框架:简化部署流程,大规模应用也OK
  8. 语义分割和实例分割_2019 语义分割指南
  9. 新型智能搜索引擎,挑战google
  10. MFC:应用程序无法正常启动(0xc0150002)
  11. 【常用0x000000类型颜色代码表】
  12. Android 百度地图定位显示当前位置
  13. crx插件转换火狐插件_我的Firefox插件
  14. async、await其实是generator和promise的语法糖
  15. 计算机编程那个好学点,计算机编程好学吗?
  16. 麻油是什么,怎么用?
  17. 【MIUI刷机】旧机降级记录
  18. 以一例教你找到【无水印】【高清】【百度图片】的url
  19. 腾讯会议APP——新手PRD文档
  20. dnf剑魂buff等级上限_DNF95全新版本,剑魂之玩法攻略

热门文章

  1. log4j中配置LOG_HOME无效
  2. 获取iOS设备唯一标识
  3. 在excel中如何筛选重复数据_EXCEL如何快速筛选重复数据,并将结果快速复制到其他单元格...
  4. IntelliJ IDEA “Finds duplicated code”提示如何关闭
  5. 软考高级 真题 2014年下半年 信息系统项目管理师 综合知识
  6. Odoo(Openerp v8)官方模块一览表
  7. mapreduce面试问题_MapReduce问题与解答第2部分
  8. ios android与wp,在iOS与Android间选择WP
  9. 计算机中没有汉字输入,电脑没有了输入法无法输入汉字,是为什么??
  10. AS01 创建固定资产卡片 BAPI_FIXEDASSET_CREATE1