地下城迷宫游戏 - 定向问题

问题描述 投票:0回答:1

这可能是也可能不是重复,我在网站上发现了很多迷宫游戏和地牢游戏,但我找不到我想要的东西。

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

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

bool check = room.CheckCompletetion(room);
            if(check == true)
            {
                Console.WriteLine("[Directions: North]\n");
                Console.WriteLine("The entrance room is complete, choose where you want to go.");
                ConsoleKeyInfo DirectionE = Console.ReadKey();

            }
            else
            {
                room.GenerateInteraction(room, hero);
                room.Completed = 1;
            }

像上面的代码一样,我有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;
        }
    }

(需要一些修复,但首先尝试排序导航)如果你需要其他任何东西只是问 - 谢谢

c# text console
1个回答
1
投票

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

 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;
    }

当您创建新的房间实例时,可以手动或随机提供为每个方向连接的房间号。

例如下面是一个房间的新实例,其中id = 1,name =“Room1”,north = 2,east = 0,south = 0和west = 0。

 Room room1 = new Room(1, "Room1", 2, 0, 0, 0);

2号房间位于1号房间的北面,看起来就像是

  Room room2 = new Room(2, "Room2", 0, 0, 1, 3);

这意味着第二个房间由南边的room1和西面的room3连接起来。

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

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视为假,一旦房间被播放,这将被改为真。您可以添加一个if语句,该语句将显示该房间已经完成,并将向用户显示“空房间”。

© www.soinside.com 2019 - 2024. All rights reserved.