2016-12-08 1 views
2

나는 목록과 클래스 '방'을 만들었습니다. 객실을 목록에 추가했습니다. 이제 나는 게임 플레이 자체를 코딩하는 데 어려움을 겪고있다. 기본적으로 나는 방 A에서 시작하고 Room A와 Room E, Room B를 반복 할 수 있습니다. (S) outh 버튼을 눌러 Room E로 이동하고 (W) Est 버튼을 눌러 Room B로 이동합니다. 또한 코드를 읽을 수 있도록 게임 플레이를 위해 다른 클래스를 호출 할 생각입니다. 따라서 주 코드에는 몇 줄의 코드 만 있습니다. 내 코드는 다음과 같습니다. 어쨌든 최적화 할 수있는 방법을 알려주십시오. 당신이 바로 그 트랙에있는 것처럼C#에서 연결된 목록을 사용하여 미로 만들기를 시도합니다. 게임을 시작하는 방법을 알 수 없습니다.

+1

목록의 다음 공간 만 유지합니다. 이것은 'w, a, s, d'버튼을 입력 할 때 결정을 내리기에 충분하지 않습니다. 왜냐하면 네 가지 방법이 있기 때문입니다. '앞으로, 왼쪽, 뒤, 오른쪽'의 방을 다음 방이가 아닌 서로 연결되도록 유지해야합니다. – kizilsu

+0

무슨 뜻인지 이해가 안 되니? 더 설명해 주시겠습니까? – GidiBloke

+0

Eran Gat의 대답은 실제로 내가 말하려고하는 것입니다. @GidiBloke – kizilsu

답변

5

전체

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication2 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     roomsList theRooms = new roomsList(); 
     theRooms.allRoomsList(); 
     theRooms.addRoomToEnd("A"); 
     theRooms.addRoomToEnd("B"); 
     theRooms.addRoomToEnd("C"); 
     theRooms.addRoomToEnd("D"); 
     theRooms.addRoomToEnd("E"); 
     theRooms.addRoomToEnd("F"); 
     theRooms.addRoomToEnd("G"); 
     theRooms.addRoomToEnd("H"); 
     theRooms.addRoomToEnd("I"); 
     theRooms.addRoomToEnd("J"); 
     theRooms.addRoomToEnd("K"); 
     theRooms.addRoomToEnd("L"); 
     Console.WriteLine("What is your name?"); 
     string playerName = Console.ReadLine(); 
       Console.WriteLine("================================================================"); 
     Console.WriteLine(playerName + " You have been Chosen, Enter if you dare!!"); 
      Console.WriteLine("================================================================"); 
     Console.WriteLine("(Y)es/(N)o"); 
     string decision = Console.ReadLine(); 

     if (decision == "y") 
     { 
      Console.WriteLine("You need to make you way to Room L, so you may live!!"); 

     } 
     else 
     { 
      Console.WriteLine("Goodbye"); 
     } 

    } 
} 
class rooms //create class rooms 
{ 
    private string roomname; 
    private rooms next; 

    public rooms(string rname) //constructor 
    { 
     roomname = rname; 
     next = null; 
    } 
    public void setRoom (rooms nxtRoom) 
    { 
     next = nxtRoom; 
    } 
    public rooms ftchNext() 
    { 
     return next; 
    } 
    public string ftchName() 
    { 
     return roomname; 
    } 
}//done creating class rooms 
class roomsList //create linked list 
{ 
    public rooms start, end; 
    public roomsList() 
    { 
     start = null; 
     end = null; 
    } 
    public void addRoomToEnd(string rname) 
    { 
     rooms current = new rooms(rname); 
     if (end == null) 
     { 
      start = current; 
      end = current; 
     } 
     else 
     { 
      end.setRoom(current); 
      end = current; 
     } 
    } 
    public void allRoomsList() 
    { 
     rooms current; 
     if (start != null) 
     { 
      current = start; 
      while (current != null) 
      { 
       current = current.ftchNext(); 
      } 
     } 
     else { } 
    } 
}//class list ends 

는}, 그것은 보이지만없는 몇 가지 주요 기능이있다. 다음은 구현을 완료하는 데 사용할 수있는 몇 가지 사항입니다.

먼저 문제 설명을 말씀 드리겠습니다. 귀하의 미로는 방의 모음입니다. 북쪽, 남쪽, 동쪽 또는 서쪽으로 이동하여 방 사이를 이동할 수 있습니다. 당신은 출구로 정의 된 어떤 방에 도착했을 때 미로를 완성합니다.

방의 종류 : 방은 다른 방과 연결될 수 있다는 개념을 유지해야합니다. 미로 클래스가 시작 룸을 가지고 있으며, 그것 뿐이다 :

class Room 
{ 
    public string Name; 
    public Room NorthRoom; 
    public Room SouthRoom; 
    public Room EastRoom; 
    public Room WestRoom; 
    pulic bool isExit; 

    public ConnectTo(Room room, Direction direction) 
    { 
     // Add room connection logic here... 
    } 
} 

미로 클래스 : 나는 다음을 제안합니다. 미로를 만들려면 방을 만들고 적절하게 연결하십시오.

class Maze 
{ 
    public Room StartingRoom; 
} 

그래서 어떻게하면 미로를 만들 수 있습니까? 나는 순진한 방법을 보여줄 것이지만, 여기서 당신을 돕기 위해 좀 더 쉽게 도우미 함수를 코딩 할 수 있습니다.

//Lets say we want to have the following maze: 
// 
// start - room 1 - room 2 
//   |  | 
//   room 3 room 4 (exit) 

var maze = new Maze(); 
var startingRoom = new Room(); 
maze.StartingRoom = startingRoom; 
var room1 = new Room(); 
var room2 = new Room(); 
var room3 = new Room(); 
var room4 = new Room(); 
room4.IsExit = true; 
startingRoom.ConnectTo(room1, "East"); 
room1.ConnectTo(room2, "East"); 
room1.ConnectTo(room3, "South"); 
room2.ConnectTo(room4, "South"); 

적절한 방 (북쪽, 남쪽, 등) 당신이 입력으로 얻는 방향을 확인하고 설정, 연결 구현합니다.

게임하기 : 기본 클래스에서 사용자가 시작하기로 동의 한 후 사용자가 IsExit = true 인 방에 ​​들어가면 중지되는 while 루프가 있습니다. 사용자가있는 현재 회의실을 추적합니다. 그들은 미로의 시작에서 시작합니다. 사용자는 그들이 N, S, E, W를 가고 싶은지를 선택한다. 선택에 따라 현재 방을 북쪽, 남쪽, 동쪽, 서쪽 방으로 이동합니다. 객실 중 일부가 null 인 경우를 처리해야합니다.

게임을 완성하기에 충분한 생각 포인트가되기를 바랍니다.

+0

다른 방향 '방향'을 만들어야 함을 의미합니까? 또한 연결 논리는 어떻게 작동합니까? 나는 미로의 길을 설정하는 방법을 추측하고 있습니다. 특정 방 1 개만 다른 방의 집합과 다른 곳에 갈 수있는 방법입니다. 나의 순결을 용서하십시오, 나는 언어에 아주 새롭다. – GidiBloke

+0

방향이 필요하지 않습니다. 클래스입니다. 현재 방의 "북쪽 방"에 "w"와 같은 문자열 값을 전달할 수 있습니다. 한 클래스의 한 객체는 다른 방으로 이어질 수 있습니다. 당신은 "방"객체를 가지고 있다고 생각하고 "서쪽, 동쪽 북쪽, 남쪽"인 4 개의 다른 방 객체를 가지고 있으며 각 방향 방은 자체 방을 가지고 있으며 그렇게됩니다. 하나의 시작 방이 있고 다른 방을 연결해야합니다. 따라서 연결 작업이 완료되면 미팅 룸이있는 미로가 생깁니다. 그것은 명확한 질문입니까 아니면 다른 질문입니까? @GidiBloke – kizilsu

+0

@GidiBloke - 더 자세한 내용을 추가했습니다. – PartlyCloudy

관련 문제