天天看點

練習 - 寵物市場

題目描述:

1、建立Pet抽象類,有喂養的方法,寵物的名稱,其它的子類派生自該類。

2、建立一個商店類,商店中有多種可以購買的寵物清單,可以選擇購買的寵物,購買一隻寵物需要花費10個金币。

3、可以将購買的寵物顯示在自己的商店中。

4、可以銷售自己的寵物,喂養1次一次以上的寵物才可以銷售,寵物的價格按:初始價格為10金币+成長價格來計算。

5、可以喂養寵物,每天最多喂養3次;喂養1次以上,才可以銷售,每次喂養成長值+5,可以增加5個金币。

6、每個人的初始金币是10金币,通過不斷的購買、喂養、銷售寵物來增加自己的金币。

7、可以随時檢視自己商店中的寵物和自己賬戶的金币。

我的思路:

  1. Pet建立抽象類,屬性有名字、品種、價格,有抽象喂養方法與列印方法,子類有Bird、Dog、Tiger。
  2. Shop建立類,包含屬性:名字、品種、價格
  3. 給我的寵物建立myPets集合,shop建立shops集合,考慮到輸出要有排序,且查詢的操作較多,都定為ArrayList集合,且在主程式中呈靜态變量。
  4. 天數、每天喂養次數、金币也設為靜态變量且賦初值。
  5. 當購買寵物時,從商店選中指定的Pet類執行個體,取出姓名、品種、價格,指派到new的Pet中,由于Pet子類不同有各自的喂養方法,是以switch判斷一下品種,分别建立不同子類的Pet執行個體,加入myPets集合中去。加入時将價值折半。
  6. 出售時從myPets中remove掉,通過臨時變量指派給shop中去,出售時價值*2.(奸商!!)
  7. 每次喂養成長值加3~7的随機數。且count++,一旦count>= 3則不能喂養。
  8. 進入下一天,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;
        }
    }
}