一个简单的电子宠物,在控制台养宠物,支持电子宠物通过序列化保存到本地,可以继续养上一只
package com.pet;
import java.io.Serializable;
public class Pet implements Serializable {
private static Pet pet = new Pet();
private String name;
private String sex;
private int age;
private int mood;
private int strength;
private int health;
private int intimacy;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getMood() {
return mood;
}
public void setMood(int mood) {
this.mood = mood;
}
public int getStrength() {
return strength;
}
public void setStrength(int strength) {
this.strength = strength;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
public int getIntimacy() {
return intimacy;
}
public void setIntimacy(int intimacy) {
this.intimacy = intimacy;
}
public Pet(String name, String sex, int age, int mood, int strength, int health, int intimacy) {
super();
this.name = name;
this.sex = sex;
this.age = age;
this.mood = mood;
this.strength = strength;
this.health = health;
this.intimacy = intimacy;
}
private Pet() {
}
public static Pet getPet() {
return pet;
}
public void play() {
}
public void eat() {
}
public void seeDoctor() {
}
public String seeDetail() {
return null;
}
}
package com.pet;
public class Cat extends Pet {
private String breed;// 品种
public Cat(String name, String sex, int age, int mood, int strength, int health, int intimacy, String breed) {
super(name, sex, age, mood, strength, health, intimacy);
this.setBreed(breed);
}
public String getBreed() {
return breed;
}
public void setBreed(String breed) {
this.breed = breed;
}
// 复写父类pet的方法
@Override
public String seeDetail() {
String s = "我的猫 \n品种:" + breed + "\n名字:" + getName() + "\n性别" + getSex() + "\n年龄" + getAge() + "\n心情"
+ getMood() + "\n体力值" + getStrength() + "\n健康" + getHealth() + "\n亲密度" + getIntimacy();
return s;
}
@Override
public void play() {
System.out.println("撸猫:全属性提升");
super.setMood(super.getMood() + 1);
super.setStrength(super.getStrength() + 1);
super.setHealth(super.getHealth() + 1);
super.setIntimacy(super.getIntimacy() + 2);
}
@Override
public void eat() {
System.out.println("猫咪喂食:小鱼干:全属性提升");
super.setMood(super.getMood() + 1);
super.setStrength(super.getStrength() + 10);
super.setHealth(super.getHealth() + 5);
super.setIntimacy(super.getIntimacy() + 2);
}
@Override
public void seeDoctor() {
System.out.println("给猫咪看病:伊丽莎白帽:全属性削弱");
// 去医院,心情很不好
super.setMood(super.getMood() - 20);
// 没力气
super.setStrength(super.getStrength() - 30);
// 大病一场
super.setHealth(super.getHealth() - 20);
// 塑料主仆
super.setIntimacy(super.getIntimacy() - 20);
}
}
package com.pet;
public class Dog extends Pet {
private String breed;// 品种
// 父类有含参构造,子类调用,完成属性初始化
public Dog(String name, String sex, int age, int mood, int strength, int health, int intimacy, String breed) {
super(name, sex, age, mood, strength, health, intimacy);
this.breed = breed;
}
public String getBreed() {
return breed;
}
public void setBreed(String breed) {
this.breed = breed;
}
// 复写父类pet的方法
@Override
public String seeDetail() {
String s = "我的狗 \n品种:" + breed + "\n名字:" + getName() + "\n性别" + getSex() + "\n年龄" + getAge() + "\n心情"
+ getMood() + "\n体力值" + getStrength() + "\n健康" + getHealth() + "\n亲密度" + getIntimacy();
return s;
}
@Override
public void play() {
System.out.println("狗子专有活动:接飞盘:会流失体力");
super.setMood(super.getMood() + 2);
super.setStrength(super.getStrength() - 5);
super.setHealth(super.getHealth() + 5);
super.setIntimacy(super.getIntimacy() + 3);
}
@Override
public void eat() {
System.out.println("狗子吃骨头:全属性提升");
super.setMood(super.getMood() + 1);
super.setStrength(super.getStrength() + 10);
super.setHealth(super.getHealth() + 5);
super.setIntimacy(super.getIntimacy() + 2);
}
// public void catchFlydisk() {
// System.out.println("狗子专有活动:接飞盘");
// super.setMood(super.getMood()+2);
// super.setStrength(super.getStrength()-5);
// super.setHealth(super.getHealth()+5);
// super.setIntimacy(super.getIntimacy()+3);
// }
@Override
public void seeDoctor() {
System.out.println("给狗子看病:四个兽医按住:全属性削弱");
// 去医院,心情很不好
super.setMood(super.getMood() - 20);
// 没力气
super.setStrength(super.getStrength() - 30);
// 大病一场
super.setHealth(super.getHealth() - 20);
// 塑料主仆
super.setIntimacy(super.getIntimacy() - 20);
}
}
package com.pet;
//仓鼠
public class Hamster extends Pet {
private String breed;// 品种
public Hamster(String name, String sex, int age, int mood, int strength, int health, int intimacy, String breed) {
super(name, sex, age, mood, strength, health, intimacy);
this.breed = breed;
}
// 复写父类pet的方法
@Override
public String seeDetail() {
String s = "我的仓鼠 \n品种:" + breed + "\n名字:" + getName() + "\n性别" + getSex() + "\n年龄" + getAge() + "\n心情"
+ getMood() + "\n体力值" + getStrength() + "\n健康" + getHealth() + "\n亲密度" + getIntimacy();
return s;
}
@Override
public void play() {
System.out.println("仓鼠飞轮:会掉体力");
super.setMood(super.getMood() + 1);
super.setStrength(super.getStrength() - 3);
super.setHealth(super.getHealth() + 1);
super.setIntimacy(super.getIntimacy() + 2);
}
@Override
public void eat() {
System.out.println("仓鼠喂食:全属性提升");
super.setMood(super.getMood() + 1);
super.setStrength(super.getStrength() + 10);
super.setHealth(super.getHealth() + 5);
super.setIntimacy(super.getIntimacy() + 2);
}
@Override
public void seeDoctor() {
System.out.println("给仓鼠看病:全属性削弱");
// 去医院,心情很不好
super.setMood(super.getMood() - 20);
// 没力气
super.setStrength(super.getStrength() - 30);
// 大病一场
super.setHealth(super.getHealth() - 20);
// 塑料主仆
super.setIntimacy(super.getIntimacy() - 20);
}
}
package com.pet;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Scanner;
import com.zhiyou100.User;
public class PetGame {
public static int account=123456;
public static int password=123456;
public static void main(String[] args) throws Exception {
System.out.println("************欢迎光临枫林宠物小店*************");
System.out.println("请输入账号");
Scanner input = new Scanner(System.in);
Integer newaccount=input.nextInt();
System.out.println("请输入密码");
Integer newpassword=input.nextInt();
if(newaccount.equals(account)&&newpassword.equals(password)) {
PetGame perPetshop = new PetGame();
perPetshop.start();
}else {
System.out.println("错误");
}
}
private void start() throws Exception {
while (true) {
System.out.println("************请输入你需要领养的宠物*************" + "\n" + "1:狗狗" + "\n" + "2:猫" + "\n"+"3.仓鼠"+"\n"
+ "4:继续上次的宠物" + "\n" + "0:退出");
Scanner input = new Scanner(System.in);
int type = input.nextInt();
switch (type) {
case 1:
System.out.println("请选择狗狗的种类" + "\n" + "1:哈士奇" + "\n" + "2:萨摩耶");
int breed = input.nextInt();
String s = "";
if (breed == 1) {
s = "哈士奇";
} else {
s = "萨摩耶";
}
System.out.println("请输入性别: \n 1.公 \n 2.母");
int dogsex = input.nextInt();
String sex = "";
if (dogsex == 1) {
sex = "公";
} else {
sex = "母";
}
System.out.println("好的,你的宠物领养完成,初始化: \n年龄:1 \n心情:50/100 \n体力:50/100 \n健康:50/100 \n亲密值:50/100");
System.out.println("最后一步了,给你的宠物起个名字开始游戏吧");
String name = input.next();
Pet dogpet = new Dog(name, sex, 1, 50, 50, 50, 50, s);
System.out.println(dogpet.seeDetail());
PetGame petShop = new PetGame();
// 主菜单操作
petShop.mainmenu(dogpet);
break;
case 2:
System.out.println("请选择猫的种类" + "\n" + "1:英短" + "\n" + "2:橘猫");
int catbreed = input.nextInt();
String s2 = "";
if (catbreed == 1) {
s2 = "英短";
} else {
s2 = "橘猫";
}
System.out.println("请输入性别 1.公/2.母");
int catsex = input.nextInt();
String sex2 = "";
if (catsex == 1) {
sex2 = "公";
} else {
sex2 = "母";
}
System.out.println("好的,你的宠物领养完成,初始化: \n年龄:1 \n心情:50/100 \n体力:50/100 \n健康:50/100 \n亲密值:50/100");
System.out.println("最后一步了,给你的宠物起个名字开始游戏吧");
String catname = input.next();
Pet catpet = new Cat(catname, sex2, 1, 50, 50, 50, 50, s2);
System.out.println(catpet.seeDetail());
PetGame petShop3 = new PetGame();
// 主菜单操作
petShop3.mainmenu(catpet);
break;
case 3:
System.out.println("请选择仓鼠的种类" + "\n" + "1:白色仓鼠" + "\n" + "2:黑色仓鼠");
int hambreed = input.nextInt();
String s3 = "";
if (hambreed == 1) {
s3 = "白色仓鼠";
} else {
s3 = "黑色仓鼠";
}
System.out.println("请输入性别 1.公/2.母");
int hamsex = input.nextInt();
String sex3 = "";
if (hamsex == 1) {
sex3 = "公";
} else {
sex3 = "母";
}
System.out.println("好的,你的宠物领养完成,初始化: \n年龄:1 \n心情:50/100 \n体力:50/100 \n健康:50/100 31\n亲密值:50/100");
System.out.println("最后一步了,给你的宠物起个名字开始游戏吧");
String hamname = input.next();
Pet hampet = new Hamster(hamname, sex3, 1, 50, 50, 50, 50, s3);
System.out.println(hampet.seeDetail());
PetGame petShop4 = new PetGame();
// 主菜单操作
petShop4.mainmenu(hampet);
break;
case 4:
Pet mypet = readPet();
System.out.println("欢迎回来,你的宠物状态:" + mypet.seeDetail());
System.out.println("开始游戏");
PetGame petShop2 = new PetGame();
// 主菜单操作
petShop2.mainmenu(mypet);
break;
default:
System.out.println("再见...");
return;
}
}
}
// 向上转型的pet,猫狗等等
public void mainmenu(Pet pet) throws Exception {
while (true) {// 有这个一步操作完才能返回此处
System.out.println(
"********************开始游戏********************"+"\n"
+ "********主菜单********************" + "\n" + "请选择你要进行的操作: \n1,玩耍 \n2,喂食 \n3,看病 \n4,查看属性 \n5,退出");
Scanner input = new Scanner(System.in);
int choice = input.nextInt();
switch (choice) {
case 1:
System.out.println("和你的宠物玩耍");
pet.play();
System.out.println("刷新状态" + pet.seeDetail());
// 序列化保存宠物
savePet(pet);
// 读一下宠物
readPet();
break;
case 2:
System.out.println("给宠物喂食");
pet.eat();
System.out.println("刷新状态" + pet.seeDetail());
// 序列化保存宠物
savePet(pet);
// 读一下宠物
readPet();
break;
case 3:
System.out.println("给宠物看病");
pet.seeDoctor();
System.out.println("刷新状态" + pet.seeDetail());
// 序列化保存宠物
savePet(pet);
// 读一下宠物
readPet();
break;
case 4:
System.out.println("宠物最新状态:" + pet.seeDetail());
// 序列化保存宠物
savePet(pet);
// 读一下宠物
readPet();
break;
default:
System.out.println("返回目录");
return;
}
}
}
/**
* 序列化宠物
*
* @param pet
* @throws IOException
*/
public static void savePet(Pet pet) throws IOException {
//可能需要手动建一个demo文件夹,和src同级
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(new File("demo/mypet.txt")));
out.writeObject(pet);
out.flush();
out.close();
}
/**
* 反序列化宠物,读取生成java对象
* @return
* @throws Exception
*/
public static Pet readPet() throws Exception {
ObjectInputStream in = new ObjectInputStream(new FileInputStream(new File("demo/mypet.txt")));
/*
* Object object = in.readObject();
User u=(User) object;
*/
Pet pet2 = (Pet) in.readObject();
in.close();
return pet2;
}
}