Вывод ромба в консоли C#

1045
17 февраля 2017, 00:36

Вывожу ромб в консоли таким способом:

class Program
{    
    static void Main(string[] args)
    {
        int x = 6;
        int y = 6;
        int x1 = 6;
        int y1 = 6;
        int size = 6;
        for (int i = 0; i < size; i++)
        {
            Console.SetCursorPosition(x, y + i);
            Console.WriteLine("*");
            Console.SetCursorPosition(x - i, y + size);
            Console.WriteLine("*");
            Console.SetCursorPosition(x - i, y + i);
            Console.WriteLine("*");
            Console.SetCursorPosition(x, y + i);
            Console.WriteLine("*");
            Console.SetCursorPosition(x + i, y + size);
            Console.WriteLine("*");
            Console.SetCursorPosition(x + i, y + i);
            Console.WriteLine("*");
        }
        for (int i = 0; i < size; i++)
        { 
            Console.SetCursorPosition(x1, y1 + i);
            Console.WriteLine("*");
            Console.SetCursorPosition(x1 + i, y1 - size);
            Console.WriteLine("*");
            Console.SetCursorPosition(x1 + i, y1 - i);
            Console.WriteLine("*");
            Console.SetCursorPosition(x1, y1 + i);
            Console.WriteLine("*");
            Console.SetCursorPosition(x1 - i, y1 - size);
            Console.WriteLine("*");
            Console.SetCursorPosition(x1 - i, y - i);
            Console.WriteLine("*");

        }
        Console.ReadKey();
    }
}

Но получается не ромб, а что-то вроде этого:

 * * * * *
  *    *
    *
    *
  *   *
* * * * *

А должно быть это :

>         *
>       *   *
>     * * * * *
>       *   *
>         * 
Answer 1

Ну почти.

Вы должны всё время помнить, что у вас y-координата в консоли отсчитывается вниз, а не вверх. Из-за этого путаница.

У вас (x, y) — верхняя опорная точка, поэтому нужно

int y = 0;

Аналогично, (x1, y1) — нижняя опорная точка, поэтому

int y = 12;

Ну и несколько мелких опечаток: во втором цикле у вас Console.SetCursorPosition(x1, y1 + i);, но раз вы отсчитываете вверх от нижней опорной точки, то нужен минус. (В двух местах.) И ещё вы в том же цикле один раз по ошибке используете y вместо y1.

С исправленными этими ошибками у меня получилось такое:

      *
     ***
    * * *
   *  *  *
  *   *   *
 *    *    *
 ***********
 *    *    *
  *   *   *
   *  *  *
    * * *
     ***
      *
READ ALSO
Xamarin и ошибки компиляции

Xamarin и ошибки компиляции

Я пользуюсь Xamarin for VS2015Летом я установил Xamarin на личный компьютер

318
Ускорить процесс выборки из БД

Ускорить процесс выборки из БД

Есть два класса: сервер и матч

284
ASP .Net. Как получить данные из WSDL файла?

ASP .Net. Как получить данные из WSDL файла?

У меня есть ссылка на wsdl файлКак мне получить данные по заданному url? Я делаю так:

376
Entity Framework. Помогите с архитектурой

Entity Framework. Помогите с архитектурой

ЗадачаЕсть база фильмов (фильм имеет различные поля, в данном контексте не имеет значение какие)

334