Java实训项目一一拼图游戏(附源码) | 您所在的位置:网站首页 › 雷电4接口可以干什么 › Java实训项目一一拼图游戏(附源码) |
1 实训基本信息 1.1 实训项目名称 (1)拼图游戏 1.2 实训环境 本次实训内容主要针对专业学生,实训形式以实战讲解为主导。实训课程由实训老师主讲,实训老师教学严谨又平易近人,讲解的内容非常细致和认真,对于重要的知识点内容老师还特意的标注下来,方便同学们回顾学习。 2 实训内容简介 2.1 拼图游戏 拼图游戏内容由若干小图像块组成的,其中有一个空白的小图像块,该图像块是来与别的图像块交换的,以此来实现大图像的拼凑。在Java标准环境下运行,通过鼠标点击图像块上下左右移动,完成大图像的拼凑。 通过所创建的窗体类、菜单、中间面板和左右面板完成设计拼图的交互界面 ,实现游戏登录、开始游戏、退出游戏、选择图片、图片缩放、图片分割、调整难易度、计数计时、打乱图片、判断拼图成功等功能。 游戏可以通过对图片文件的读取和加载,从多张图片中选择来进行拼图游戏,通过设置图像块的个数来实现对游戏难易度的调整,最后将游戏完成后所用时间和步数记录到游戏记录中,方便用户查看游戏记录。 3 项目开发过程 3.1 拼图游戏 3.1.1开发步骤 1、了解拼图游戏基本功能: 拼图游戏内容由若干小图像块组成的,通过鼠标点击图像块上下左右移动,完成图像的拼凑。 2、拼图游戏交互界面设计与开发: 通过创建窗体类、菜单、中间面板和左右面板完成设计拼图的交互界面 ,实现拼图游戏的基本功能。 3、图片的加载与分割: 使用Image类实现图片的缩放,ImageIO类实现图片的读写加载,通过接口类Icon,BufferedImage类获取BufferedImage类的对象实现图片分割。 4、图片随机打乱和交换: 产生随机数 Random rand=new Random(); rand.nextInt(hs*ls)------[0,8] 具体操作:生成两个随机数表示数组下标,互换两个数组元素的位置,按钮的方法getX和getY可以获取按钮的坐标,利用按钮的单击事件的处理ActionListener可以使其图片交换。 5、判赢: 当用户移动按钮后进行判断,代码写在监听器的actionPerformed方法中,判断拼图是否成功,主要取决于每一个按钮通过索引下标获取的位置值,与当前按钮的位置值是否相同。 6、计时和计数功能的实现: 计时功能的实现主要是线程的设计,线程的定义方法:第一:继承Thread类,第二:实现Runnable接口,创建带实现接口的子类对象的Thread对象,MainJFrame实现Runnable接口,重写run方法;而计数则在主窗体中通过rp.times实现对变量的使用来计数。 7、游戏记录的保存: 当用户拼图成功后,记录当前信息到文件中,FileWriter追加写信息,FileReader完成读取数据。 4 游戏截图 5 程序源代码 登录界面部分(用户名:admin 密码:123) 左面板部分 import java.awt.Image; import java.net.MalformedURLException; import java.net.URL; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel; //左面板类 public class LeftJPanel extends JPanel { JLabel jl; int width=700; int height=700; //构造方法 //标签创建,指定图片,放置到面板中 public LeftJPanel(){ //左面板大小 setSize(width,height); jl=new JLabel(); jl.setSize(width,height); //把标签添加到面板中 this.add(jl); } public void init(URL url){ //绝对路径:访问文件是从盘符开始 // ImageIcon icon=new ImageIcon("D:\\1picture\\s4.jpg"); //相对路径:访问路径不是从盘符开始,可以是\,也可以是一个文件夹 // ImageIcon icon=new ImageIcon("s4.jpg");//参数是字符串的相对路径,相对于当前项目根目录 //相对路径下url的获取 // //绝对路径的url的获取 // URL url=null; // try { // url = new URL("file:\\D:\\1picture\\5.jpg"); // } catch (MalformedURLException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } ImageIcon icon=new ImageIcon(url); //方法一:图片缩放 // Image image = icon.getImage(); // Image image2 = image.getScaledInstance(700, 700, 1); // ImageIcon icon2 = new ImageIcon(image2); // jl.setIcon(icon2); //链式编程方式实现图片缩放 jl.setIcon(new ImageIcon(icon.getImage().getScaledInstance(width, height, 1))); //刷新界面 validate(); } }右面板部分 import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.net.URL; import java.util.Random; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.JPanel; import jdk.jfr.events.FileWriteEvent; //右面板实现ActionListener接口,右面板也就成为了监听器 public class RightJPanel extends JPanel implements ActionListener{ //面板的大小 int width=700; int height=700; //定义按钮数组 JButton[] jbs; //设置分割的行列数 int hs=2,ls=2; //按钮的宽度和高度,指定是小图图片缩放的尺寸 int widthbut,heightbut; //图片原始高度宽度 int widthtp,heighttp; //小图的原始宽度高度 int widthxt,heightxt; //实现步数计算的变量 int times; //空白按钮 JButton kb; public RightJPanel(){ //面板布局是空布局 setLayout(null); setSize(width,height); //init(); } //创建按钮,并放置到右面板 public void init(URL url) { //面板组件初始化前,先清除所有已有的组件 this.removeAll(); //创建按钮数组 jbs=new JButton[hs*ls]; //为每一个按钮实现初始化 //计算按钮的宽度和高度 //面板是700*700,拆分成3*3的9个区域 //每一块区域的宽度 700/3 //每一块区域的高度 700/3 widthbut=width/ls; heightbut=height/hs; BufferedImage buf=null; try { buf = ImageIO.read(url); //获取原图的宽度、高度 widthtp=buf.getWidth(); heighttp=buf.getHeight(); //获取小图的宽度和高度 widthxt=widthtp/ls; heightxt=heighttp/hs; //每一块按钮的坐标位置确定 for(int i=0;i |
CopyRight 2018-2019 实验室设备网 版权所有 |