2014-09-04 2 views
1

Я исследовал это и пока не нашел то, что искал здесь, на сайте. Я более или менее пробовал свою руку в полу-базовой текстовой игре приключенческого типа, в которой игрок выбирает вариант, такой как (l) ook, (w) ander, (s) leep и т. Д. Я создал класс для комнаты, и инициализировали ее, и все остальное, а также описания и т. д. Внутри одного из вариантов вы входите в пещеру, и я недостаточно многому научился у других и моего учителя, чтобы разрешить описание области, в которой вы находитесь, изменить. Строки кода до сих пор для этого следующие:Как сменить комнату

public void Gameloop(Room startRoom) 
{ 
    String input; 
    boolean notDead = false; 

    Room currentRoom = startRoom; 

    while(!notDead) 
    { 
     //Shows description of the room 
    input = JOptionPane.showInputDialog(null, currentRoom.getDescription() + " What do you do? \n(l)ook around\n(g)rab a stick\n(s)leep."); 

, что для начала игры, где вы находитесь в лесу. Описание показывает правильно, и продвижение по выбору - все правильно. Проблема с этой области кода

if(input.equalsIgnoreCase("l")) 
    { 
     input = JOptionPane.showInputDialog(null,"You see trees and a cave. Do you want to go into the casve? \n(y)es \n(n)o"); 
     if(input.equalsIgnoreCase("y")) 
     { 

      input = JOptionPane.showInputDialog(null,currentRoom.getDescription() + " Do you want to set up a camp?\n(y)es\n(n)o"); 

проблема конкретно в том, что я не узнал, как реализовать номер изменения на всех, в противном случае, игра основа будет звук и выполнимо, варианты будут более хорошо и система предметов позже будет реализована. В принципе, как мне изменить «комнату», в которой находится человек. Обратите внимание: эта игра не имеет графического интерфейса пользователя и буквально основана на том, что вы печатаете букву для каждого действия.

+1

'currentRoom = cave;' –

ответ

0

Я бы воспользовался шаблоном стратегии здесь. Я дам вам псевдо-код, чтобы вы начали :), обратите внимание, что это не скомпилируется. Идея заключается в том, что вы создаете интерфейс IRoom. Это позволит вам сделать как можно больше различных комнат. В каждом номере можно определить действия, которые возможны в этой комнате, поэтому вы можете добавить определенные действия в лесную комнату, например. У этого также есть метод, который гарантирует, что комната выполняет действие. Это может привести к замене комнаты, поэтому он вернет новый IRoom.

 public class Game { 
      private IRoom currentRoom; 

      public void Gameloop(IRoom startRoom){ 

      while(!notDead) 
      { 
      //Shows description of the room 
      input = JOptionPane.showInputDialog(null, currentRoom.getDescription() + " What do you do? " + dissplayPossibleActionsToUser(startRoom.getPossibleActionsInRoom())); 

      Action chosenAction = dericeActionFromImput(input); 
      currentRoom = startRoom.performAction(chosenAction); 


      } 

     } 

    } 

     public interface IRoom{ 
      //Returns all the actions the current room provides 
      List<Actions> getPossibleActionsInRoom(); 

      //Does the action 
      IRoom performAction(Action action); 
     } 

     public enum Actions{ 
      LOOK, WANDER, SLEEP; 
     } 


      public class Forest implements IRoom{ 

       public List<Actions> getPossibleActionsInRoom(){ 
        return new ArrayList(Actions.wander); 
       } 

       public IRoom performAction(Action action){ 
        if(action == wander){ 
         return new HouseRoom(); 
        } 
       } 
      } 
Смежные вопросы