Рисование буквы «М» в консоли с помощью C # - PullRequest
0 голосов
/ 16 мая 2019

У меня проблемы с рисованием буквы M в консоли с использованием "*" для буквы и использованием "-" в качестве пустого пространства.

Толщина буквы читается с консоли.

Где - n - положительное целое число и всегда нечетное число 2

Пока что я не нашел ничего похожего на решение.

int  n = int.Parse(Console.ReadLine());
for (int i = n+1; i > 0; i--)
        {
            for (int j = 1; j < i; j++)
            {
                Console.Write("-");
            }
            for (int j = 1; j <= n; j++)
            {
                Console.Write("*");
            }
            Console.WriteLine();
        }

Пример. Вот как должна выглядеть буква, если n = 5:

enter image description here

Редактировать: Я прошу прощения за плохо написанный вопрос, это мой первый раз здесь. (

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

проверьте ссылку .Net Fiddle ниже, это общее решение для любой буквы или букв, я разветвлял его для работы с буквами, так как оригинальный автор разработал его для работы с изображениями, попробуйте с переменными M, 100

https://dotnetfiddle.net/DEY9il

Вывод

будет выглядеть примерно так: -

Enter the letter?M
Enter Line Character Amount100

 ###################################################################################################
 ###################################################################################################
 ###################################################################################################
 ####  .#######*  ##################################################################################
 ####   @######   ##################################################################################
 ####   .#####* . ##################################################################################
 ####  + %#### +  ##################################################################################
 ####  # -###+ #  ##################################################################################
 ####  #: ### :#  ##################################################################################
 ####  ## .#w ##. ##################################################################################
 ####  ##: @ *##. ##################################################################################
 ####  ##@ , @##  ##################################################################################
 ####  ###, ,###. ##################################################################################
 ###################################################################################################
 ###################################################################################################
 ###################################################################################################
 ###################################################################################################
 ###################################################################################################

Вы можете настроить его так, чтобы печатать только те символы, которые вам нужны.

Существует миллион способов сделать это, но это другой способ, который использует функции, разбивая M на четыре линии и рисуя для этого.

using System;
using System.Collections.Generic;                   
public class Program
{
    static List<List<string>> board;
    public static void Main()
    {
        Console.WriteLine("Enter Width:");
        var width=ReadWidth();
        var emptyText="-";
        var fillText="*";

        board=new List<List<string>>();

        //for M we will use 4 points each with a width of [width]
        Func<int,int,bool> p1=(row,col)=>{ 
                        int startX=width-1-row;
                        return (col>startX && col<=(startX+width));
                    };
        Func<int,int,bool> p2=(row,col)=>{ 
                        int startX=width-1+row;
                        return (col>startX && col<=(startX+width));
                    };
        Func<int,int,bool> p3=(row,col)=>{ 
                        int startX=(3*width)-1-row;
                        return (col>startX && col<=(startX+width));
                    };
        Func<int,int,bool> p4=(row,col)=>{ 
                        int startX=(3*width)-1+row;
                        return (col>startX && col<=(startX+width));
                    };



        for(int row=0;row<=width;row++)
        {
            var rowChars=new List<string>();
            for(int col=0;col<(width*5);col++)
                rowChars.Add((p1(row,col) || p2(row,col) || p3(row,col) || p4(row,col))?fillText:emptyText);
            board.Add(rowChars);
        }
        ShowOutput();
    }
    public static int ReadWidth()
    {
    Console.WriteLine("Enter Width (odd number beteween 2< Input < 1000):");
        var widthString=Console.ReadLine();
        int width=0;
        if(!int.TryParse(widthString,out width) || width<2 || width >1000)
        {
        Console.WriteLine("The value entered is not accepted, please try again.");
            ReadWidth();
        }
        return width;
    }
    public static void ShowOutput()
    {
        var sb=new System.Text.StringBuilder();
        foreach(List<string> row in board)
            sb.AppendLine(string.Join("",row.ToArray()));

        Console.Write(sb.ToString());
    }
}

для ввода 10, вывод такой, как показано ниже: -

Enter Width:
Enter Width (odd number beteween 2< Input < 1000):
10
----------**********----------**********----------
---------************--------************---------
--------**************------**************--------
-------****************----****************-------
------******************--******************------
-----****************************************-----
----**********--******************--**********----
---**********----****************----**********---
--**********------**************------**********--
-**********--------************--------**********-
**********----------**********----------**********
0 голосов
/ 16 мая 2019

Вы в основном должны нарисовать четыре линии.Каждая строка - это функция, которая выглядит как x=y*A+B.x и y поменялись местами, чтобы иметь больше смысла.Вы пишете строка за строкой, увеличивая y в процессе, и для каждого y вы циклически проходите по x, и для каждого x вы должны определить, соответствует ли оно хотя бы одному условию, которое помещает (x,y) внутриодна из четырех строчек.Условием для каждой строки является то, что x больше или равно y*A+B и меньше или равно y*A+B+N, где N - толщина.В этом конкретном случае A будет либо 1, либо -1.Если (x,y) удовлетворяет хотя бы одному из четырех условий, напишите '*', в противном случае напишите '-'.Вы должны вычислить значения A и B для каждой из четырех строк.Вы также должны определить диапазон цикла x (он должен заканчиваться в определенный момент, когда вам следует перейти к другому ряду).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...