Как преобразовать текст в ascii-арт в массиве

Я хотел бы знать, существует ли инструмент, который в основном преобразует мой текст, скажем, «42» в файл «карты», который я могу отобразить с помощью небольшой программы, которую я написал. Положение чисел в этом файле определяет координаты Z моих точек, которые я проецирую на экран, причем их X и Y, очевидно, являются двумя измерениями моего массива.

Вот пример карты, которую я хотел бы получить:

0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
0  0 10 10  0  0 10 10  0  0  0 10 10 10 10 10  0  0  0
0  0 10 10  0  0 10 10  0  0  0  0  0  0  0 10 10  0  0
0  0 10 10  0  0 10 10  0  0  0  0  0  0  0 10 10  0  0
0  0 10 10 10 10 10 10  0  0  0  0 10 10 10 10  0  0  0
0  0  0 10 10 10 10 10  0  0  0 10 10  0  0  0  0  0  0
0  0  0  0  0  0 10 10  0  0  0 10 10  0  0  0  0  0  0
0  0  0  0  0  0 10 10  0  0  0 10 10 10 10 10 10  0  0
0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0

Какие выходы

fdf42

Так кто-нибудь знает, как я могу преобразовать любую строку в такой файл? Если такого инструмента не существует, есть ли общий способ получения формы персонажа, который мог бы помочь мне создать эти карты?

Спасибо, что читаете меня, с нетерпением жду ваших ответов :)


person cfz42    schedule 25.02.2015    source источник
comment
Просто использовать banner или figlet?   -  person abligh    schedule 25.02.2015
comment
На каком языке эти теги? Не могли бы вы уточнить немного больше?   -  person cfz42    schedule 25.02.2015
comment
Оба конвертируют текст в графику ASCII. Если вы хотите перекодировать его самостоятельно, то хорошо, но это должно послужить источником вдохновения. Насколько я помню, они оба находятся в C. См. en.wikipedia.org/wiki/Banner_(Unix ) , packages.debian.org/testing/misc/sysvbanner и figlet.org ; согласно stackoverflow.com/questions /652517/ (ответ Zoredache) debian sysvbanner — это один файл со 155 строками C.   -  person abligh    schedule 25.02.2015
comment
Также в этом ответе есть 2 партии исходного кода, чтобы делать то, что вы хотите (просто напечатайте десятичное значение, а не #): stackoverflow.com/questions/652517/   -  person abligh    schedule 25.02.2015
comment
Спасибо, что указали мне на эти инструменты, вопрос решен.   -  person cfz42    schedule 26.02.2015


Ответы (1)


Грубое решение:

  1. Создайте объект изображения.
  2. Напишите на нем свой текст, используя библиотеку шрифтов. Использование растрового шрифта улучшит результаты из-за очень низкого разрешения.
  3. Переберите пиксели изображения и выведите текстовый файл.

Более подробное решение потребует указания языка программирования.

РЕДАКТИРОВАТЬ: я сделал это на скорую руку: http://phpfiddle.org/lite/code/zr3k-hwbw< /а>

<?php
    $str = isset($_GET['str']) ? $_GET['str'] : "+1";
    $font = isset($_GET['font']) ? $_GET['font'] : 1;
    $w = imagefontwidth($font) * strlen($str);
    $h = imagefontheight($font);
    $img = imagecreate($w, $h);
    $bg = imagecolorallocate($img, 0, 0, 0);
    $tc = imagecolorallocate($img, 255, 0, 0);
    imagestring($img, $font, 0, 0, $str, $tc);

    header("Content-Type: text/plain");
    for ($y = 0; $y < $h; $y++) {
        for ($x = 0; $x < $w; $x++) {
            echo (imagecolorat($img, $x, $y) * 10)."\t";
        }
        echo "\n";
    }
?>

Выход:

0   0   0   0   0   0   0   0   0   0   
0   0   10  0   0   0   0   10  0   0   
0   0   10  0   0   0   10  10  0   0   
10  10  10  10  10  0   0   10  0   0   
0   0   10  0   0   0   0   10  0   0   
0   0   10  0   0   0   0   10  0   0   
0   0   0   0   0   0   10  10  10  0   
0   0   0   0   0   0   0   0   0   0   
person Adrian Leonhard    schedule 25.02.2015
comment
Спасибо, что потрудились (или нет, я не знаю!) Сделать это, это действительно соответствует тому, что мне нужно, но, к сожалению, я предпочитаю решение figlet, приведенное выше. (Проголосовал, хотя :-)) - person cfz42; 26.02.2015