2012-10-11 113 views
0

我真的不明白麪向對象設計的原理嗎? 所以我有課基本面向對象設計java

地圖類保存房間和連接所有房間,將所有的危險隨機放入房間,返回粒狀房間,並返回隨機房間。

以及播放輪流

Player類,從一個房間移動播放器到另一個,拍攝成室和玩遊戲。

房間類如下。

import java.util.ArrayList; 

public class Room 
{ 
    private int myRoomID; 
    private ArrayList<Room> myNeighbours; 

    private boolean myHasBats; 
    private boolean myHasPit; 
    private boolean myHasWumpus; 

    public Room(int id) { 
     myRoomID = id; 
     myNeighbours = new ArrayList<Room>(); 
    } 

    public int getRoomID() { 
     return myRoomID; 
    } 

    public ArrayList<Room> getNeighbours() { 
     return myNeighbours; 
    } 

    public void connectTo(Room room) { 
     myNeighbours.add(room); 
    }  

    public boolean hasBats() { 
     return myHasBats; 
    } 

    public void setHasBats(boolean flag) { 
     myHasBats = flag; 
    } 

    public boolean hasPit() { 
     return myHasPit; 
    } 

    public void setHasPit(boolean flag) { 
     myHasPit = flag; 
    } 

    public boolean hasWumpus() { 
     return myHasWumpus; 
    } 

    public void setHasWumpus(boolean flag) { 
     myHasWumpus = flag; 
    } 

    public void checkBats() { 
     boolean bats = false; 
     for (Room r : myNeighbours) { 
      if (r.hasBats()) { 
       bats = true; 
      } 
     } 
     if (bats) { 
      System.out.println("I hear squeaking!"); 
     } 
    } 

    public void checkPit() { 
     boolean pit = false; 
     for (Room r : myNeighbours) { 
      if (r.hasPit()) { 
       pit = true; 
      } 
     } 
     if (pit) { 
      System.out.println("I feel a draft!"); 
     } 
    } 

    public void checkWumpus() { 
     boolean wumpus = false; 
     for (Room r : myNeighbours) { 
      if (r.hasWumpus()) { 
       wumpus = true; 
      } 
     } 
     if (wumpus) { 
      System.out.println("I smell a wumpus!"); 
     } 
    } 

    public boolean enter(Player player) { 
     System.out.println("You are in Room " + myRoomID); 
     System.out.print("Exits lead to rooms"); 

     for (Room r : myNeighbours) { 
      System.out.print(" " + r.getRoomID()); 
     } 
     System.out.println(); 
     checkBats(); 
     checkPit(); 
     checkWumpus(); 

     if (myHasBats) { 
      System.out.println("A flock of bats picks you up and carries you off to another room!"); 
      return player.moveRandom(); 
     } 
     else if (myHasPit) { 
      System.out.println("You fall into a bottomless pit!"); 
      return true; 
     } 
     else if (myHasWumpus) { 
      System.out.println("You have been eaten by a wumpus!");    
      return true; 
     } 

     return false; 
    } 

public boolean shoot() 


     if (myHasWumpus) { 

      System.out.println("You killed the Wumpus!"); 

      return true; 


     } 
     else { 

      System.out.println("Your arrow falls with a clatter to the floor!"); 

      return false; 


     } 

    } 

而且我想改變這個,所以這個wumpus需要被射擊多次(你選擇多少次)才能被殺死。每次拍攝時,它會跑到一個隨機的鄰居房間(不是玩家所在的房間)。

我假設我需要將public boolean shoot()方法更改爲循環,並調用public Room getRandomRoom(),如下所示。

但我真的不明白如何做到這一點,特別是因爲使用布爾方法對我來說非常困惑。 有誰知道我在哪裏可以找到信息來學習面向對象設計的基礎知識?

public Room getRandomRoom() { 

     Random rng = new Random(); 

     int i = rng.nextInt(Map.NUM_ROOMS); 

     return myRooms.get(i); 

    } 

稍後我們將使用implements在類中的所有危險分成類。但不是他們都在地圖和房間類。

+2

SOOO muuuuchhh cooode –

+0

我想我只需要發佈'公共布爾拍攝()'方法,但我所以用這個堆棧,我不知道在哪裏甚至開始...... – user1721548

+2

@ user1721548那麼現在就開始吧。對於你的問題,最好有一個對你有用的最小範圍(如果需要的話可以提出更多問題),而不是在你做任務時發生的任何事情。 – millimoose

回答

1

沒有wumpus類,那將是混亂和有限的,甚至更低效。你的問題不是你沒有得到面向對象,而是你被限制使用它。

沒有出課。 你打算去已經到myWumpusShotCount添加到 室然後在你的拍攝功能,把它加1,測試以查看它是否是3,如果是殺了它在其他隨機選擇一個房間,並在裏面

設置hasWumpus和WumpusShotCount如果你有一個wumpus類,它將有一個房產房,另一個是它運送了多少子彈和一槍時的行爲,即wumpus的狀態和wumpus的行爲將通過wumpus而不是房間來實現。這是OO。

+0

什麼是調用'getRandomRoom()'的正確語法?我使用getter方法嗎?請看第二個答案。 – user1721548

+0

通過你所描述的,它不一定是公開的,如果是我,我會在房間類中添加一個Random類型的靜態屬性,並使getRandomroom成爲一個靜態函數。每次通話不需要爲每個通話創建一個新通話。小費從私人方法開始,然後讓他們看起來更清晰。稍後公開私人公開方式會比公開私人方式更容易 –

0

在託尼霍普金森的幫助下,我提出了這個代碼,但它還沒有編譯。它說無法找到符號 - 方法getRandomRoom() To call the method getRandomRoom();`從Map類。 要發送wumpus房間另一個房間隨機

public boolean shoot() { 

if (myHasWumpus) { 
    myWumpusShotCount = 3; 
    for(int i = 0; i< myWumpusShotCount; i++){ 
     if(myWumpusShotCount<=i){ 
      System.out.println("You killed the Wumpus!"); 
      return true; 
     } 
     else { 
     Room wRoom = getRandomRoom(); 
     System.out.println("You killed the Wumpus!"); 
     return false; 
     myWumpusShotCount++; 

     } 

     System.out.println("Your arrow falls with a clatter to the floor!"); 
     return false; 
} 


     System.out.println("You killed the Wumpus!"); 
     return true; 
     } 
    } 
     System.out.println("Your arrow falls with a clatter to the floor!"); 
     return false; 
}