C# 地下城迷宫游戏-方向问题

C# 地下城迷宫游戏-方向问题,c#,text,console,C#,Text,Console,这可能是重复的,也可能不是重复的,我在网站上找到了很多迷宫游戏和地下城游戏,但我找不到我想要的 我正在尝试制作一个有迷宫的游戏,其中用户按下箭头键进行导航。你进入的每个地牢要么面临威胁,要么收到一个宝箱(这些部分已分类) 我遇到的问题是,如果玩家要回到以前探索过的房间,我希望它是空的,而不是重新启动。我正在努力导航,因为我目前已经硬编码了导航(前3个房间) 就像上面的代码一样,我有3间完全相同但方向不同的房间。然后我注意到即使我的房间也有问题。如果用户返回两个房间,我的嵌套If语句将是绝对庞大的

这可能是重复的,也可能不是重复的,我在网站上找到了很多迷宫游戏和地下城游戏,但我找不到我想要的

我正在尝试制作一个有迷宫的游戏,其中用户按下箭头键进行导航。你进入的每个地牢要么面临威胁,要么收到一个宝箱(这些部分已分类)

我遇到的问题是,如果玩家要回到以前探索过的房间,我希望它是空的,而不是重新启动。我正在努力导航,因为我目前已经硬编码了导航(前3个房间)

就像上面的代码一样,我有3间完全相同但方向不同的房间。然后我注意到即使我的房间也有问题。如果用户返回两个房间,我的嵌套If语句将是绝对庞大的,这并不是我想要的

我的房间等级目前如下

class Room
{
    public int ID;
    public string Name;
    public int Completed = 0;
    public Random r = new Random();
    public static Random r1 = new Random();


    public Room(int id, string name)
    {
        this.ID = id;
        this.Name = name;
    }

public void Passage(Room room, Hero hero, ConsoleKeyInfo direction)
    {

        bool checkroom = room.CheckCompletetion(room);

        if (checkroom == true)
        {
            Console.WriteLine("empty");
        }
        if (checkroom == false)
        {
            room.GenerateInteraction(room, hero);
        }
    }


    public bool CheckCompletetion(Room room)
    {
        if (room.Completed == 1)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
(还需要一些修复,但尝试先对导航进行排序)
如果您还需要什么,只需询问-谢谢

在房间类中,您可以捕获北、东、南和西的值,这些值可能对应于该方向连接的房间,请参见以下内容:

 class Room
{
    public int ID;
    public string Name;
    public int Completed = 0;
    public Random r = new Random();
    public static Random r1 = new Random();


    public int North;
    public int East;
    public int South;
    public int West;



    public Room(int id, string name, int north, int east, int south, int west)
    {
        this.ID = id;
        this.Name = name;
        this.North = north;
        this.East = east;
        this.South = south;
        this.West = west;
    }
创建房间的新实例时,手动或随机提供为每个方向连接的房间编号

e、 g.下面是一个房间的新实例,其中id=1,name=“Room1”,北=2,东=0,南=0,西=0

 Room room1 = new Room(1, "Room1", 2, 0, 0, 0);
2号房间在1号房间的北面,看起来像

  Room room2 = new Room(2, "Room2", 0, 0, 1, 3);
这意味着2号房间的南面是1号房间,西面是3号房间

在您的代码中,您可以捕获当前房间以及标识下一个房间的方向选择等,例如:

Room currentRoom;
choice = Console.ReadLine();
if (choice.ToLower() == "n" || choice == "north")
{
nextroom = room.north;
}
 switch (nextRoom)
{


 case 1:
 currentRoom = room1;
 room = currentRoom;
 break;
 }

当您第一次创建房间时,您的roomCompleted bool将被设置为false,一旦房间被播放,它将被更改为true。您可以添加一个if语句,该语句将显示文件室已经完成,并向用户显示一个“空文件室”。

内存中的保留文件室状态不应该太昂贵,或者,您必须将它们写入磁盘。即使您只在运行时保存文件室状态,也是这样吗@BugFinderyes,如果该区域很可能是内存问题,那么将其保留在磁盘上没有什么错
Room currentRoom;
choice = Console.ReadLine();
if (choice.ToLower() == "n" || choice == "north")
{
nextroom = room.north;
}
 switch (nextRoom)
{


 case 1:
 currentRoom = room1;
 room = currentRoom;
 break;
 }