Замена элемента в массиве
как на поле, которое изначально сформировалось как квадрат, по краям которого "#", а внутри ".", заменить введенные координаты из функции fPos на букву "А"? если стоит использовать метод Console.SetPosition(), то как это можно реализовать?
static void field(int N) /*создается квадратное поле размером N(значение N берется из main->юзерский ввод)*/
{
int[,] desk = new int[s,s];
for (int i = 0; i < N+2; i++)
{
for (int j = 0; j < N+2; j++)
{
if (i > 0 && j > 0 && i <= N && j <= N) Console.Write(".");
else Console.Write("#");
}
Console.Write("\n");
}
}
static string[] fPos(int s, out string[] cord) /*ввод координат фигуры на поле*/
{
int x0, y0;
string line;
while (true)
{
Console.Write("Input one's coordinates: ");
line = Console.ReadLine();
cord = line.Split(',');
x0 = int.Parse(cord[0]); y0 = int.Parse(cord[1]);
if (cord.Length != 2 || int.Parse(cord[0]) <= 0 || int.Parse(cord[0]) > N
|| int.Parse(cord[1]) <= 0 || int.Parse(cord[1]) > N)
{ Console.WriteLine("\aIncorect input!"); }
else return cord;
}
}
Ответы (1 шт):
Вам нужно для начала решить, где будет находиться на экране ваше поле: в верхней части экрана, или оно будет рисоваться вновь после каждого хода.
Рассмотрим более интересный первый случай, для него вам понадобятся функции «ручного» управления позицией курсора на экране.
Если так, то код вывода символа в данной точке выглядит просто:
static void DisplayAtPosition(int x, int y, char c) // x, y от 1 до N
{
Console.SetCursorPosition(x, y);
Console.Write(c);
}
Что у нас не в порядке, так это функция ввода координат.
Для начала, она должна работать не в произвольной точке, а «уходить вниз» под доску. Затем, вы должны из функции возвращать не строки, а числа, тем более вы их из введённых строк и так и так получаете. Ну и наконец, вместо функции int.Parse, которая бросает исключение, если введено не число, вам понадобится более «осторожная» функция int.TryParse. Получается вот что:
static void fPos(out int x, out int y) /*ввод координат фигуры на поле*/
{
string prompt = "";
while (true)
{
Console.SetCursorPosition(0, N + 2); // сперва очистить
Console.Write(new string(' ', Console.WindowWidth));
Console.SetCursorPosition(0, N + 2);
Console.Write(prompt);
Console.Write("Input one's coordinates: ");
string line = Console.ReadLine();
var parts = line.Split(',');
if (parts.Length != 2)
{
prompt = "Expected two coordinates. ";
continue;
}
if (!int.TryParse(parts[0], out x) || !int.TryParse(parts[1], out y))
{
prompt = "Couldn't parse coordinates. ";
continue;
}
if (x <= 0 || y <= 0 || x > N || y > N)
{
prompt = "Сoordinates must be between 1 and N. ";
continue;
}
return;
}
}
Можно пробовать.
static int N = 5;
static void Main(string[] args)
{
Console.Clear();
field();
int x, y;
fPos(out x, out y);
DisplayAtPosition(x, y, 'A');
Console.SetCursorPosition(0, N + 3);
}
Результат пробного пробега:
#######
#A....#
#.....#
#.....#
#.....#
#.....#
#######
Input one's coordinates: 1,1