Как напечатать буквы в консоле через звездочки?

213
17 января 2019, 13:20

Есть 3 буквы на входе "А В В" Нужно вывести в консоль? Так должна выглядеть буква

   *          
 * * *   
*     *        

Если можно какой-то универсальный способ решения и для других букв алфавита. Дайте совет в какую сторону двигаться?

Answer 1

Я думаю смотреть надо в сторону ASCII Art.

public static void main(String[] args) {
    int width = 100;
    int height = 30;
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    Graphics g = image.getGraphics();
    g.setFont(new Font("SansSerif", Font.PLAIN, 24));
    Graphics2D graphics = (Graphics2D) g;
    graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
            RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
    graphics.drawString("JAVA", 10, 20);
    for (int y = 0; y < height; y++) {
        StringBuilder sb = new StringBuilder();
        for (int x = 0; x < width; x++) 
            sb.append(image.getRGB(x, y) == -16777216 ? " " : "*");
        if (sb.toString().trim().isEmpty())
            continue;
        System.out.println(sb);
    }
}

Примеры тут, тут и тут

Answer 2

Раньше это называлось битовый шрифты. Идея в том, что вы создаете массив из, например, N 16ричных чисел и потом где бит = 1 - выводите звездочку, где 0 - пробел. То есть буквы "I" массив в двоичном представлении будет выглядеть вот так:

00000000
00011000
00011000
00011000
00011000
00011000
00011000
00000000

Далее просто выбираете такие обращаетесь к таким буквам как, например, через dict и рисуете их. Основная проблема для вас будет в том, что так как буквы имеют высоту, вам надо использовать библиотеку, которая умеет позиционировать указатель в нужную точку экрана. Для python можно использовать ncurses, для Java надо поискать. Я именно так делал для себя в игре - но там я выводил текст в графике.

Answer 3

Для питона есть библиотека pyfiglet, количество символов для выводимой буквы 3х5. Пример:

> from pyfiglet import figlet_format
> 
> print(figlet_format('A B B', font='3x5'))

 #      ##      ##  
# #     # #     # # 
###     ##      ##  
# #     # #     # # 
# #     ##      ##  
READ ALSO
Не подключаются несколько событий onTextChanged на каждый EditText

Не подключаются несколько событий onTextChanged на каждый EditText

Когда я пытаюсь присвоить одно событие onTextChanged к одному EditText, чтобы значение из этого EditText записалось в другой EditText, всё работает хорошоНо...

207
Программный отступ margin

Программный отступ margin

нужно отступить от нижнего правого угла, но если в view посадить bottom и right любое значение, то ничего не происходит, а отступ идет, только если...

158
Иннициализация логина юзера

Иннициализация логина юзера

Ситуация следующая: Юзер логинится в личный кабинет, переходя по рестам в логах могу отловить его логинВ одном из классов, метод SecurityUtils

129