2014-03-31 54 views
0

我正在用Eclipse設計一個帶有Jpanel接口的簡單電子郵件地址簿。我試圖決定在使用循環編寫快樂,飢餓,能量狀態代碼時使用什麼是最好的方法,這是我的兩個類,我使用抽象動物類,以及擴展動物類的MyPet:快樂,飢餓,能量狀態

動物類:

package GroupAnimal; 

import java.util.*; 


public abstract class Animal 
{ 
    protected int hungry; 
    protected int happy; 
    protected int energy; 
    protected int toilet; 
    protected int love; 
    protected int health; 
    protected int limbs; 
    protected String name; 
    protected String dob; 
    protected double weight; 
    protected double height; 


    public int getHungry() 
    { 
     return hungry; 
    } 

    public int getHappy() 
    { 
     return happy; 
    } 

    public int getEnergy() 
    { 
     return energy; 
    } 

    public int gettoilet() 
    { 
     return toilet; 
    } 

    public int getLove() 
    { 
     return love; 
    } 

    public int getLimbs() 
    { 
     return limbs; 
    } 

    public int getHealth() 
    { 
     return health; 
    } 

    public String getName() 
    { 
     return name; 
    } 

    public String getDob() 
    { 
     return dob; 
    } 

    public double getWeight() 
    { 
     return weight; 
    } 

    public double getHeight() 
    { 
     return height; 
    } 

    protected void setName(String newName) 
    { 
     name = newName; 
    } 

    protected void setHeight(double newHeight) 
    { 
     height = newHeight; 
    } 

    protected void setWeight(double newWeight) 
    { 
     weight = newWeight; 
    } 

    protected void setLimbs (int newLimbs) 
    { 
     limbs = newLimbs; 
    } 

    protected void setDOB (String newDOB) 
    { 
     dob = newDOB; 
    } 

    protected abstract void die(); 

    protected abstract void feed(int amount); 

    protected abstract void sleep (int amount); 

    protected abstract void play (int amount); 

    protected abstract void annoy (int amount); 

    protected abstract void cuddles (int amount); 

    protected abstract void sick (int amount); 
} 

MyPet:

package IndividualPet; 

import GroupAnimal.Animal; 


public class MyPet extends Animal 
{ 

int Dec = 10; 
int Inc = 10; 


public MyPet(String aName, String aDOB, int aRelease, int aLimbs, 
     double aWeight, double aHeight, int aEnergy, int aHungry) { 
energy = aEnergy; 
hungry = aHungry; 
name = aName; 
dob = aDOB; 
toilet = aRelease; 
limbs= aLimbs; 
weight= aWeight; 
height= aHeight; 

} 


    // TODO Auto-generated constructor stub 






enum Skill { ROOKIE, ADVANCED, EXPERT} 
enum Concentration { LOW, MEDIUM, STRONG; } 
enum Hygiene { POOR, GOOD, EXCELLENT; } 



public void decHungry() { 


    hungry -= Dec; 

} 

public void incEnergy() { 

    energy += Inc; 

} 


@Override 
protected void die() { 
    Runtime.getRuntime().halt(0);{ 
    System.out.println("Your pet has died"); 
    } 
} 
@Override 
protected void feed() { 

    System.out.println("\nEating..."); 



     decHungry(); 
     incEnergy(); 

     if (hungry < 0 && energy > 100) { 
      hungry = 0; 
      energy = 100; 
      System.out.println("I have ate enough!"); 
     } 

     System.out.println("I've just ate dumplings, my current energy state is " + energy 
       +" and hungry state is " + hungry); 
     } 



@Override 
protected void sleep(int amount) { 
    // TODO Auto-generated method stub 

} 
@Override 
protected void play(int amount) { 
    // TODO Auto-generated method stub 

} 
@Override 
protected void annoy(int amount) { 
    // TODO Auto-generated method stub 

} 
@Override 
protected void cuddles(int amount) { 
    // TODO Auto-generated method stub 

} 
@Override 
protected void sick(int amount) { 
    // TODO Auto-generated method stub 

} 

}

所以這個方法可以讓我減少飢餓狀態,增加能量狀態,雖然磨片ñ它變出界它使打印 **吃...... 我剛剛吃了餃子,我現在的能量狀態是100和飢餓狀態是0

吃...... 我已經吃夠了! 我剛剛吃了餃子,我目前的能量狀態是100,飢餓狀態是0

吃... 我已經吃夠了! 我剛剛吃過餃子,目前的能量狀態爲100,飢餓狀態爲0 **

如何刪除除「我已經吃夠了!」之外的所有打印語句。當它超出界限?

@Override 
protected void feed() { 

    System.out.println("\nEating..."); 



     decHungry(); 
     incEnergy(); 

     if (hungry < 0 && energy > 100) { 
      hungry = 0; 
      energy = 100; 
      System.out.println("I have ate enough!"); 
     } 

     System.out.println("I've just ate dumplings, my current energy state is " + energy 
       +" and hungry state is " + hungry); 
     } 

任何人都可以扔在如何做到這一點的任何具體的例子嗎?

+0

也許只有一個循環用於遊戲滴答,然後通過單一方法操作邏輯來確定每次滴答做什麼?或甚至使用'ScheduledFuture'來重複任務? – Rogue

+0

所以你要求我們爲你寫代碼? –

+5

五顏六色的標題:-D – Coffee

回答

0

雖然你的問題是過於寬泛給實際的答案,這裏是一些一般性的建議:

你餵養你的寵物是你的程序的業務邏輯的一部分。這是你的程序確實是

您希望向用戶顯示某種動畫進度,這是您的程序的用戶界面的一部分。這就是您的程序如何向用戶展示

你會發現,事情走到一起了很多更順暢,如果你把有意識地努力爲保持這兩個東西分開。您將要目前輸送到用戶在一個較高的水平,在用戶界面代碼,而不是裏面MyPet在您邏輯是。

例如,先定義你的實際意圖是什麼。如果你的目的是「每秒給動物X的食物一次,Y次」,那麼像(僞代碼):

in ui: 
    display progress dialog or progress bar 
    create a 1 second timer and start it 

in timer: 
    animal.feed(X); 
    if this is the Yth time it happened: 
     stop timer 
     close dialog/hide progress bar 
    end if 

使用timer那裏而不是直接循環的目的是爲了讓擺幅在延遲期間繼續處理事件(這樣您的UI不會凍結),並且它使得它更直接,以確保component updates are done on the proper thread

如果你的目的是爲了給動物總共N食物則只是使用戶的利益看中動畫:

in ui: 
    animal.feed(N) 
    show and animate a progress bar, even though feeding logic has already run 

都會導致同樣的最終結果,都是有效的,但問題是,保持你的用戶界面和邏輯分離,並讓你的代碼反映你的意圖。請注意,上述僞代碼示例都不涉及在feed()中放置任何與UI相關的任何UI,並且任何循環(如果已完成)純粹是UI的功能,並且也不在feed()中完成。

我希望這會有幫助。我會給你更具體的例子,但有太多的可能性。當你遇到一個更具體的問題時,你必須先嚐試一些東西然後回到這裏。

+0

玩家應該能夠餵養動物(增加飢餓狀態),與動物玩耍(增加快樂狀態),並讓動物睡覺(增加能量狀態),如果動物被忽略,它會「死亡」 。這可以通過現在使用打印語句在控制檯中表現出來,稍後我將使用Jframe和Jpanels作爲用戶界面和進度條,以實際顯示動物是否進食等進度。計時器將用於測量寵物剩下的時間單獨如果超過一定的數量就會死亡。 – user3482500

+0

@ user3482500這是一個很好的發展策略。以上依然成立。通過將這些「延遲」作爲UI的功能保留下來,並將UI代碼(例如控制檯輸入/輸出)保留在動物邏輯之外,您可以使用臨時控制檯UI定義並測試動物本身的行爲,然後交換在後來的基於Swing的GUI中*不需要改變'Animal' /'MyPet'的代碼* - 這正是這種設計的目標。 –

+0

@ user3482500您可能還想看看[MVC模式](http://www.tutorialspoint.com/design_pattern/mvc_pattern.htm)瞭解一些設計思路。 –