弹球游戏分步解析(四)——保存读取游戏
接下来我们要说的是保存读取游戏,弹球游戏作为一个小游戏,加入保存和读取操作似乎有些画蛇添足,不过作为学习,如果我们实现了在弹球游戏中保存,读取,那么以后的很多项目我们都可以使用该操作方法对文件进行保存读取,所以,我们就着这个项目,对这个弹球游戏进行保存吧:
首先我们要明白要保存什么:
每个小球都有部分属性是独一无二的那些属性必须被存起来:
privateintXdirection = West;//记录小球在X轴上的方向
privateintYdirection = North;//记录小球在y轴上的方向
privateintradios;//半径
private Color color;//颜色
privateintXspeed;//x方向速度
privateintYspeed;//y方向速度
privateintX;//当前位置x
privateintY;//当前位置y
privateintLastX;//最后位置x
privateintLastY;//最后位置y
privateintxband;
privateintyband;
privatebooleanpauseFlag = false;//暂停标志(默认值否)
privatebooleanstopFlag = false;//停止标志(false——表示存在)
privatebooleanberead = false;//是否被储存在文件里过(默认值否)
一、我们先进行另存为操作:
建一个类将另存为封装起来:
文件名:savefile
package jumpingBall;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.filechooser.FileNameExtensionFilter;
publicclass savefile {
static String getExtName(String s,char split) {
int i = s.indexOf(split);
int leg = s.length();
return (i>0?(i+1)==leg?" ":s.substring(i,s.length()):" ");
}
publicvoid save() {
try {//try{}catch(Exception e){}的作用:检测并抛出异常(catch)
savefile test = new savefile();//建立一个savefile类
String abc = test.getExtName("abc.txt", '.');//获得文件的格式
FileOutputStream file_Writer;//输出流
DataOutputStream out;//
FileNameExtensionFilter filter = new FileNameExtensionFilter(abc,abc);//过滤器
JFileChooser jFileChooser = new JFileChooser("F:\\覃翔宇\\软件工程\\Java\\workplace\\Ballmoving\\save");
jFileChooser.setFileFilter(filter);//添加txt文件的过滤器
jFileChooser.setDialogTitle("保存文件");//更改对话框按钮的文字
jFileChooser.setSelectedFile(new File("player"));//默认文件名
int result = jFileChooser.showSaveDialog(jFileChooser);//
if(result==jFileChooser.showSaveDialog(jFileChooser)){
File file = jFileChooser.getSelectedFile();//如果将文件选择器设置为允许选择多个文件,则返回选中文件的列表。
file_Writer = new FileOutputStream(file); //给flie_writer申请空间
file = new File(file.getPath()+abc);//给file申请内存空间
out = new DataOutputStream(file_Writer );
out.writeInt(Date.allBall.size());//记录要存贮多少个小球的信息
for(int i = 0;i<Date.allBall.size();i++){
JPanel jp = new JPanel();//
BallThread ball = new BallThread(jp);
ball = Date.allBall.get(i);//从列表中获取小球
out.writeInt(ball.getRadios());//将信息依次存入
out.writeInt(ball.getLastX());//
out.writeInt(ball.getLastY());
out.writeInt(ball.getX());
out.writeInt(ball.getXband());
out.writeInt(ball.getXdirection());
out.writeInt(ball.getXspeed());
out.writeInt(ball.getY());
out.writeInt(ball.getYband());
out.writeInt(ball.getYdirection());
out.writeInt(ball.getYspeed());
out.writeInt(ball.getColor().getRGB());
out.writeBoolean(ball.savePauseFlag());
out.writeBoolean(ball.isStopFlag());
out.writeBoolean(ball.saveBeread());
//
}
out.close();//关闭文件
file_Writer.close();//关闭文件
}
} catch (Exception e) {
// TODO: handle exception
}
}
}
二、读取和另存为差不多,不同在于吧输出流改为输入流,将文件中的小球一一读出:
package jumpingBall;
import java.awt.Color;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.filechooser.FileNameExtensionFilter;
publicclass Loadfile {
private JPanel jp;
public Loadfile(JPanel jp){
this.jp = jp;
}
privatestatic String getExtName(String s,char split) {
int i = s.indexOf(split);
int leg = s.length();
return (i>0?(i+1)==leg?" ":s.substring(i,s.length()):" ");
}
publicvoid load() {
try {
String abc = this.getExtName("abc.dat", '.');//
String abc2 = this.getExtName("abc.txt", '.');
FileInputStream file_Writer;//
DataInputStream dis;//
FileNameExtensionFilter filter = new FileNameExtensionFilter(abc,abc);//添加过滤器
FileNameExtensionFilter filter2 = new FileNameExtensionFilter(abc2,abc2);//过滤器可以添加多个
JFileChooser jFileChooser = new JFileChooser("F:\\覃翔宇\\软件工程\\Java\\workplace\\Ballmoving\\save");//
jFileChooser.setFileFilter(filter);//
jFileChooser.setFileFilter(filter2);//
jFileChooser.setDialogTitle("读取文件");//
int result = jFileChooser.showOpenDialog(jFileChooser);
if(result==jFileChooser.showOpenDialog(jFileChooser)){
File file = jFileChooser.getSelectedFile();
file_Writer = new FileInputStream(file);
file = new File(file.getPath()+abc);
dis = new DataInputStream(file_Writer );
int size = dis.readInt();//读取存档中场上小球个数
List<BallThread> allBall = new ArrayList<BallThread>();
System.out.println("场上小球个数变为:"+Date.allBall.size());
for(int i = 0;i<size;i++){
//注意:读取小球属性的顺序要和存储时一致
//依次读取存档中小球的信息
BallThread ball = new BallThread(jp);
ball.setRadios(dis.readInt());
ball.setLastX(dis.readInt());
ball.setLastY(dis.readInt());
ball.setX(dis.readInt());
ball.setXband(dis.readInt());
ball.setXdirection(dis.readInt());
ball.setXspeed(dis.readInt());
ball.setY(dis.readInt());
ball.setYband(dis.readInt());
ball.setYdirection(dis.readInt());
ball.setYspeed(dis.readInt());
ball.setColor(new Color(dis.readInt()));
ball.setPauseFlag(dis.readBoolean());
ball.setStopFlag(dis.readBoolean());
ball.setBeread(dis.readBoolean());
ball.start();
allBall.add(ball);
}
Date.allBall = allBall;
dis.close();
file_Writer.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
三、存储和读取类做好后,我们需要做的是分别给他们加上监听器,这里我们使用的监听器是ActionListener
储存文件监听器:
文件名:foListener
package jumpingBall;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class foListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
savefile savefile1 = new savefile();
savefile1.save();
System.out.println("保存成功");
}
}
读取文件监听器:
文件名:ioListener
package jumpingBall;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class ioListener implements ActionListener{
private JPanel jp;
public ioListener(JPanel jp) {
// TODO Auto-generated constructor stub
this.jp = jp;
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
for(int i = 0;i<Date.allBall.size();i++){//在读取文件之前,先把场上的小球全删光
System.out.println(Date.allBall.get(i).isStopFlag());
Date.allBall.get(i).exit(true);
}
Date.allBall.clear();
Loadfile laLoadfile = new Loadfile(jp);
laLoadfile.load();
System.out.println("读取成功");
}
}
四、将监听器加在菜单栏里的保存、读取按钮中;
这步我就不多说了,和之前的方法一样,嘿嘿;
就这样,我们的另存为和读取操作就弄完了,唉,累死了,我先去洗个澡哈,七月的长沙没空调真的可以热死人呐。
相关推荐
在本篇【弹球游戏分步解析(五)——阶段性总结】中,我们将对一个基于Java实现的弹球游戏进行深入探讨。这个弹球游戏的源代码提供了丰富的学习材料,帮助开发者了解游戏开发的基本概念和技术。博文链接为,可以在...
在本项目中,我们探索的是一个使用C语言编写的弹球游戏的核心代码。这款小游戏是基于WIN32框架构建的,对于想要学习游戏编程初学者来说,这是一个很好的起点。通过这个简洁的代码实现,我们可以了解到游戏开发的一些...
Scratch创意编程——弹球游戏 学历案.pdf
【OpenCV下的弹球游戏】是一个基于Visual Studio(VS)开发环境,利用OpenCV库创建的简单游戏项目。OpenCV,全称为Open Source Computer Vision Library,是一个开源的计算机视觉库,它包含了大量的图像处理和计算机...
《弹球游戏(Flash编写):深入解析与技术探讨》 在数字娱乐领域,Flash曾是制作互动内容的主流工具,尤其是对于小游戏的开发。本文将深入探讨一款名为“弹球游戏”的Flash作品,该作品提供了源代码和最终的SWF文件...
8. **文件操作**:游戏可能需要保存和读取用户进度,例如砖块的状态、得分记录等。VC++提供了文件流类(fstream)来处理文件读写。 9. **错误处理**:良好的错误处理机制是任何程序的重要组成部分,它能帮助游戏在...
java弹球游戏java弹球游戏java弹球游戏 java弹球游戏java弹球游戏java弹球游戏 java弹球游戏java弹球游戏java弹球游戏 java弹球游戏java弹球游戏java弹球游戏 java弹球游戏java弹球游戏java弹球游戏 java弹球游戏...
《C#实现简单弹球游戏源码解析》 在编程世界中,开发一款简单的游戏是初学者们常常选择的实践项目。本篇文章将详细解析一个使用C#语言编写的弹球游戏源码,旨在帮助读者了解游戏开发的基本原理,以及C#在图形用户...
本文将深入探讨如何使用Visual Basic(VB)编写一个弹球游戏,结合提供的完整源码,我们将一步步解析其背后的逻辑与实现细节。 一、VB基础介绍 Visual Basic,简称VB,是由微软公司推出的一种面向对象的编程语言,...
《VB源码实现的弹球游戏详解》 在IT领域,编程是一项基本技能,而用Microsoft Visual Basic 6.0(简称VB6)编写游戏,是初学者掌握基础编程概念和提升技能的好方法。本篇将详细介绍利用VB6实现的弹球游戏的编程知识...
本篇文章将深入探讨如何使用Python的pgzero库创建一个经典的弹球游戏——PONG。PONG是一款简单的双人对战游戏,两个玩家各控制一个垂直移动的挡板,试图让一个小球在屏幕上反弹并使对方无法接到球。 首先,我们要...
弹球游戏弹球游戏弹球游戏弹球游戏弹球游戏弹球游戏弹球游戏弹球游戏
在本项目中,我们关注的是一个使用C#编程语言开发的弹球游戏源代码。C#是一种面向对象的、类型安全的编程语言,由微软公司为.NET框架开发,广泛应用于Windows应用开发、游戏开发和Web服务。弹球游戏是计算机游戏中的...
《少儿Scratch编程项目:经典弹球游戏源代码解析》 Scratch,这款由麻省理工学院(MIT)媒体实验室的“终身幼儿园团队”开发的图形化编程工具,以其直观易懂的操作界面和丰富的功能模块,深受全球少儿编程教育者的...
本资源是山东大学软件学院图形学课程设计实验二
《弹球游戏在FPGA上的Verilog实现》 在电子工程领域,FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,它允许设计者根据需要自定义硬件电路。在这款“弹球游戏”中,我们看到的是Verilog语言被用来在...
QT开发的弹球游戏是一种基于QT框架的简单计分计时型休闲娱乐程序。QT是一个跨平台的应用程序开发框架,由Trolltech公司(现为Nokia)开发,广泛应用于桌面应用、移动设备以及嵌入式系统。它支持C++语言,并提供了...
《Android弹球游戏源码解析》 Android平台上的游戏开发是一项充满挑战与乐趣的工作,而“Android弹球游戏”作为一款简单的单机游戏,为初学者提供了很好的学习实例。这款游戏的核心在于挡板与小球之间的碰撞反弹,...
在本项目"弹球游戏 JavaAWT制作"中,开发者运用了Java的图形用户界面(GUI)库JavaAWT来创建一个互动的弹球游戏。JavaAWT是Java早期提供的用于构建桌面应用的基础组件,它提供了丰富的控件、布局管理和事件处理机制...