Прежде всего, заранее спасибо за вашу помощь.Я студент, и я только начинаю заниматься программированием на C #, поэтому, пожалуйста, извините меня за то, что я сделал свой код таким невероятно грязным.
С намеченной целью как практики, так и развлечения, яЯ пытаюсь сделать игру ASCII (сверху вниз, как старые игры Zelda, но невероятно просто).Мне удалось создать систему движений («w» перемещает курсор вверх в консоли, «a» перемещает его влево и т. Д.). Карта также будет полностью прорисована в консоли.
Теперь к проблеме, с которой я столкнулся, и к следующему вопросу: всякий раз, когда я перемещаю свой курсор, он фактически помещает символ, соответствующий нажатой кнопке, где должен быть фрагмент карты (пример: я нажимаю 'w'. Курсорсначала помещает букву «w», которая заменяет плитку карты, а затем перемещается вверх).Мое решение было бы сначала скопировать персонажа, который изначально находится в плитке.После этого я перемещаю курсор.наконец, я помещаю скопированный символ обратно туда, где он принадлежит, вместо 'w', 'a', 's' или 'd', которые программа поместила туда ранее).Другим решением было бы убедиться, что курсор никогда не заменит символ ascii карты.Вопрос в том, как мне реализовать одно из этих решений?
Код, который я включил, показывает мою процедуру построения карты (которая в настоящее время заполнена только '█') и систему перемещения.
class Program
{
static void Main(string[] args)
{
Console.WindowWidth = 128; //The map will be 128x32
Console.WindowHeight = 32;
LoadMap();
Console.SetCursorPosition(10, 10); //the cursor will be set at x = 10 and y = 10
while (true) //a simple loop to check for user input
{
ConsoleKeyInfo input = Console.ReadKey();
Console.Write("\b");
PosX = Console.CursorLeft;
PosY = Console.CursorTop;
switch (input.KeyChar)
{
case 'w':
Console.SetCursorPosition(PosX + 0, PosY - 1);
break;
case 'a':
Console.SetCursorPosition(PosX - 1, PosY + 0);
break;
case 's':
Console.SetCursorPosition(PosX + 0, PosY + 1);
break;
case 'd':
Console.SetCursorPosition(PosX + 1, PosY + 0);
break;
}
}
}
public static void PathWay(int PathSize) //pathsize = amount of █ placed in a row.
{
int n = 0;
Console.ForegroundColor = ConsoleColor.Gray;
while (n < PathSize)
{
n = n + 1;
Console.Write("█");
}
}
public static void LoadMap() //This will eventually call to many subroutines to create a map (a subroutine for creating a tree for example)
{
PathSize = 128;
int n;
n = 0;
while(n < 32)
{
n = n + 1;
PathWay(PathSize);
}
}
public static int PathSize;
public static int PosX;
public static int PosY;
public static string test;
}
конечно, я мог бы сделать так, чтобы вы могли ходить только по одному типу персонажа, но игра была бы более увлекательной, если бы вы могли ходить по более чем одному типу персонажа.
Один разеще раз, спасибо заранее!