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