尝试使用链表在 C# 中创建迷宫。不知道如何开始游戏



我创建了列表和类'房间'。我已经将房间添加到了列表中。现在,我坚持编码游戏本身。基本上,我想从A房间开始,只能通过按下(S)Outh按钮到达e e和(w)EST按钮到达房间,然后到达房间,等等。另外,我正在考虑为游戏玩耍打电话,以便可以读取代码。因此,主只有几行代码。这是我的代码。随时指出如何优化它。

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的房间时,该循环将停止。您可以跟踪用户所在的当前房间。他们从迷宫开始。用户选择是否要使用n,s,e,w。根据他们的选择,您将分别向北,南,东,西房间移动当前房间。您需要处理某些房间可能无效的情况。

希望这为您提供足够的思维点来完成游戏!

相关内容

最新更新