题目描述:
1、创建Pet抽象类,有喂养的方法,宠物的名称,其它的子类派生自该类。
2、创建一个商店类,商店中有多种可以购买的宠物列表,可以选择购买的宠物,购买一只宠物需要花费10个金币。
3、可以将购买的宠物显示在自己的商店中。
4、可以销售自己的宠物,喂养1次一次以上的宠物才可以销售,宠物的价格按:初始价格为10金币+成长价格来计算。
5、可以喂养宠物,每天最多喂养3次;喂养1次以上,才可以销售,每次喂养成长值+5,可以增加5个金币。
6、每个人的初始金币是10金币,通过不断的购买、喂养、销售宠物来增加自己的金币。
7、可以随时查看自己商店中的宠物和自己账户的金币。
我的思路:
- Pet建立抽象类,属性有名字、品种、价格,有抽象喂养方法与打印方法,子类有Bird、Dog、Tiger。
- Shop建立类,包含属性:名字、品种、价格
- 给我的宠物建立myPets集合,shop建立shops集合,考虑到输出要有排序,且查询的操作较多,都定为ArrayList集合,且在主程序中呈静态变量。
- 天数、每天喂养次数、金币也设为静态变量且赋初值。
- 当购买宠物时,从商店选中指定的Pet类实例,取出姓名、品种、价格,赋值到new的Pet中,由于Pet子类不同有各自的喂养方法,因此switch判断一下品种,分别建立不同子类的Pet实例,加入myPets集合中去。加入时将价值折半。
- 出售时从myPets中remove掉,通过临时变量赋值给shop中去,出售时价值*2.(奸商!!)
- 每次喂养成长值加3~7的随机数。且count++,一旦count>= 3则不能喂养。
- 进入下一天,count置零,day++
然后就可以开始写了。
效果:
然后其实并没有写输入保护
代码:
其中一个Pet的子类的喂养方法,成长值随机加:
public void feed() {
System.out.println(getName() + "吃了武大郎烧饼……");
Random r = new Random();
int addPrice = r.nextInt(5)+3;
this.setPrice(getPrice()+addPrice);
System.out.println(getName() + "的成长值增加了"+addPrice+"!");
setCanSell(true);
}
主程序:
public class Demo02PetShop {
static Scanner sc = new Scanner(System.in);
static List<Shop> shop = new ArrayList<>();
static List<Pet> myPets = new ArrayList<>();
static int myMoney = 10;
static int feedCount = 0;
static int day = 1;
public static void main(String[] args) {
loadDefault();
mainMenu();
System.out.println("再见");
}
// 加载初始化
private static void loadDefault() {
shop.add(new Shop("成成", "bird", 5));
shop.add(new Shop("露露", "bird", 10));
shop.add(new Shop("富贵", "dog", 30));
shop.add(new Shop("大宝", "tiger", 100));
}
private static void mainMenu() {
while (true) {
System.out.println(">首页");
System.out.println("0.退出系统");
System.out.println("1.进入商店");
System.out.println("2.我的宠物");
System.out.println("3.进入下一天");
System.out.println("-------------");
System.out.println("今天是第" + day + "天 我的金币:" + myMoney);
System.out.println("输入序号:");
int index = sc.nextInt();
switch (index) {
case 0:
return;
case 1:
goShop();
break;
case 2:
myPet();
break;
case 3:
nextDay();
break;
default:
System.out.println("重新输入:");
break;
}
}
}
private static void nextDay() {
System.out.println("又过去了一天……");
feedCount = 0;
day++;
}
private static void myPet() {
while (true) {
System.out.println(">首页>我的宠物");
for (int i = 0; i < myPets.size(); i++) {
System.out.print(i + "\t");
myPets.get(i).show();
}
System.out.println("-------------");
System.out.println("0.返回");
System.out.println("1.喂养宠物");
System.out.println("2.出售宠物");
int index = sc.nextInt();
switch (index) {
case 0:
return;
case 1:
feedPets();
break;
case 2:
sellPets();
break;
default:
System.out.println("输入有误,重新输入:");
break;
}
}
}
private static void sellPets() {
System.out.println("输入要出售的编号:");
int i = sc.nextInt();
Pet pet = myPets.get(i);
String name = pet.getName();
String type = pet.getType();
int price = pet.getPrice();
myMoney += price;
Shop petToShop = new Shop(name, type, (int) (price * 1.5));
shop.add(petToShop);
myPets.remove(i);
System.out.println("出售完成,获得了" + price + "个金币!");
}
private static void feedPets() {
if (feedCount < 3) {
System.out.println("输入要喂养的编号:");
int i = sc.nextInt();
myPets.get(i).feed();
feedCount++;
} else {
System.out.println("今天已经喂得太多了……");
}
}
private static void goShop() {
while (true) {
System.out.println(">首页>商店");
int i = 0;
for (Shop shop1 : shop) {
System.out.print(i + "\t");
shop1.show();
i++;
}
System.out.println("0.离开商店");
System.out.println("1.购买宠物");
int index = sc.nextInt();
if (index == 0) {
return;
}
if (index == 1) {
System.out.println("要买哪只?输入序号:");
int index2 = sc.nextInt();
if (index2 < shop.size()) {
if (shop.get(index2).getPrice() <= myMoney) {
buy(index2);
} else System.out.println("你的钱不够!");
}
}
}
}
private static void buy(int index) {
String name = shop.get(index).getName();
String type = shop.get(index).getType();
int price = shop.get(index).getPrice() / 2; // 购买来的宠物售价要减半
myMoney -= shop.get(index).getPrice(); // 扣钱
shop.remove(index); // 从商店移除
switch (type) { //加入自己的宠物列表
case "bird":
Pet pet = new Bird(name, type, price);
myPets.add(pet);
System.out.println("购买成功!");
break;
case "dog":
Pet pet1 = new Dog(name, type, price);
myPets.add(pet1);
System.out.println("购买成功!");
break;
case "tiger":
Pet pet2 = new Tiger(name, type, price);
myPets.add(pet2);
System.out.println("购买成功!");
break;
default:
System.out.println("购买失败");
break;
}
}
}