Java面对对象项目总结

本片文章主要是记录这一个星期做项目的收获。 就根据一个界面一个界面的细说。

一.总体思路

创建游戏思路:
1.人物:创建一个固定属性的角色(role)
2.地点:创建一个建筑抽象类(Architecture)
3.事件:定义一个事件接口(IEvent)
4.NPC:创建一个怪兽抽象类(Monster)
游戏玩法思路:
人物来到地点,随机或者固定遇到NPC,产生事件;再由遇到的不同事件来修改人数的各个属性。最后存档人物的属性就可以达到保存进度的功能。


先来说明一下我的核心:也就是我这个游戏的主角,存档也就是为了存它。
角色的所有属性:

public class Role implements Serializable{
//以下是该角色的全部属性
	private String name;//名字
	private int ATK;//攻击力
	private int DEF;//防御力
	private int HP;//体力
	private int WIT;//智力
	private int AGI; //敏捷
	private int HS; //血条
	private List<Prop> bag = new ArrayList<Prop>();//背包
	private List<Prop> inventory = new ArrayList<Prop>();//物品栏
	private int key1=0;//小树林进入最终boss的计数器
	private int key2 =0; //进入格兰之森的最终boss计时器
	private int key3 = 0; //进入天空之城的最终boss计时器
	//-------------------------------------------------
	//初始化的内容和封装的方法我就不放上来了
}


开始界面
在这里插入图片描述
收获(1)序列化(保存文件),反序列化(读取文件)

1.序列化:存档

//序列化
public void serialize(Role role) {//传入我的角色role
		try {
			File file = new File("d:\\data\\"+role.getName());//根据我的对象role的名字来保存对应为的文件
			FileOutputStream fos = new FileOutputStream(file);//创建文件输出流对象
			ObjectOutputStream oos = new ObjectOutputStream(fos);//创建对象输出流的对象
			oos.writeObject(role);	//通过对象输出流来将role保存为文件
			oos.close();			//文件输出流关闭
			fos.close();			//对象输出流关闭
			System.out.println("存档成功");
			System.out.println("~~~~~~~~~~~~~~");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			System.out.println("存档失败");
			System.out.println("~~~~~~~~~~~~~~");
		}
	}



2.反序列化:读档

public Role deserialization(File file) { //传入要读取的文件然后返回一个角色对象
		Role role = null;				//定义一个接受读取对象的空角色对象
		FileInputStream fis = null;		
		try {
			fis = new FileInputStream(file);	//创建一个件输入流对象
			ObjectInputStream ois = new ObjectInputStream(fis); //创建一个对象输入流对象
			role = (Role) ois.readObject();	//将读取到的对象保存到role里面
			ois.close();					//文件输入流关闭
			fis.close();					//对象输入流关闭
			System.out.println("读档成功");
			System.out.println("~~~~~~~~~~~~~~");
		} catch (Exception e) {
			System.out.println("读档失败");
			System.out.println("~~~~~~~~~~~~~~");
			//下面的这条信息是当初一个错误的操作,本来想着如果文件读取失败就删除该文件,但是发现不管怎么删除都不能删除。
			//最后找到的原因是:当读取失败也就是读到role = (Role) ois.readObject();就会报错直接跳到了catch里面,文件流没有关闭,无法删除文件
			file.delete();
		}
		return role;
	}



3.得到要读档的文件:

//1.创建一个存档根目录文件夹的对象,我的存档放在来D盘 "D:\\data"
File file = new File("D:\\data");
//2.将创建一个保存目录中所有文件名的数组
File[] files = file.listFiles();
//3.遍历数组中的文件名,从而实现选择读档的功能
for(int i = 0;i < files.length;i++){
	//4.打印要目录所有文件名
	System.out.println((i+1)+"."+files[i].getName());
}
//5.根据控制台接收到的值来确定要读取的文件
Scanner input = new Scanner(System.in);//定义一个scanner对象
int tmp = input.nextInt();
//6.得到该文件
file = files[tmp - 1];  


收获(2)
1.随机事件
本次小游戏里面的随机事件主要方式:利用switch选择结构和Random工具类。

//1.Random类默认构造方法
Random random = new Random();
//2.产生1到4的随机数
int tmp = random.nextInt(4)+1;
//3.根据tmp产生不可知的随机事件
switch(tmp){
case 1:
	//(任意的随机事件),比如遇到同学,遇到怪兽等等。
	break;
case 2:
	//...
	break;
	//...
}



2.产生不同属性的怪兽:

public abstract class Monster(){
	private String name;//怪兽名字
	private int ATK;	//怪兽攻击力
	private int DEF;	//怪兽防御力
	private int HP;		//怪兽血量
	//set,get方法此处省略
	//构造方法
	public Monster(int i){
		this.ATK = 50 + i*20;
		this.DEF = 30 + i*10;
		this.HP = 200 = i*50;
	}
}

总结:

做这个游戏,让我对java的文件操作有来了进一步的熟悉(序列化与反序列化);怎么样保存为文件怎么样读取一个文件。其中更重要的是:明白了我为什么要做一个文件操作,知道了需要对谁、那一个对象、或那一个属性进行操作。拿到上面的游戏系统。刚开始我是非常模糊的,发现这么多的东西,该从何保存起啊!!,一脸懵逼(⊙_⊙;)。最后细下心来,发现我的核心是游戏主角呀,只要将所有固定不能重置的字段保存就行了。然后将所有不可被重置的全放在了角色里。


以上就是对上一周的总结了,希望下周的课程能够更愉快哈哈~。

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值