Мне нужно написать программу для текстового изображения в C для класса. Ничего сложного просто написать изображение с помощью текста.Анимированные тексты в C
Что касается этого: towel.blinkenlights.nl, как я могу анимировать текст?
Мне нужно написать программу для текстового изображения в C для класса. Ничего сложного просто написать изображение с помощью текста.Анимированные тексты в C
Что касается этого: towel.blinkenlights.nl, как я могу анимировать текст?
Для чего это платформа? Если вы хотите что-то многоплатформенное, я бы предложил вам использовать ncurses.
Если это просто для Windows, вы можете использовать conio.h и graphics.h среди других. Я нашел this, которые, как представляется, имеют некоторые основные чертежные/анимационные примеры в C, используя некоторые заголовки Windows. Имейте в виду, что это чрезвычайно неуправляемый код и Windows.
Обновление: Я также нашел this, который включает в себя несколько примеров в использовании graphics.h
Я не хочу, чтобы графика отображалась, но используя текстовые символы, чтобы выглядеть как графика. – HollerTrain
ncurses и conio предназначены именно для этого. Ну, не только для этого, но это способы манипулирования экранными персонажами с гораздо большим контролем, чем просто печать строк. Одна вещь, которую они могут сделать, это «анимационные» персонажи. –
Если вам разрешено использовать внешние библиотеки, AALib похоже, что это поможет. Если нет, то вы могли бы использовать систему() функцию и передать «CLS» (я предполагаю, что Windows, здесь для Linux или Mac, используйте «ясно».):
#include <stdlib.h>
#ifdef WIN32
system("cls");
#else
system("clear");
#endif
После этого, он должен быть простое задание распечатать кадр и подождать, пока не приступит к печати следующего.
Вот пример, чтобы показать вам, как оживить что-то. Это именно то, что анимация Star Wars. Это гигантский текстовый файл, разделенный на отдельные кадры. Читайте FAQ на Star Wars ASCIImation page, чтобы узнать больше об этом.
Общая идея заключается в том, что у вас есть набор кадров. Каждый кадр содержит одно изображение в анимации. Вы очищаете экран, показываете рамку и ждете некоторого периода времени. Делайте это снова и снова, и у вас есть текстовая анимация.
Итак, сначала создайте файл с вашими рамками. Назовите его frame.txt. Чтобы разрешить кадры переменной длины, мы следуем каждому кадру по строке, начинающейся с @!, за которым следует количество анимационных тиков, которые должны оставаться на экране. Например, если вы рисуете 15 кадров в секунду, а строка - @! 15, тогда рамка будет отображаться на экране в течение 1 секунды (15 тиков).
+---------+
| frame 1 |
+---------+
@! 15
.-----------.
| frame 2 |
| |
`-----------'
@! 15
+-------------+
| frame 3 |
| |
| |
| |
+-------------+
@! 15
.-----------.
| frame 4 |
| |
.-----------.
@! 15
+---------+
| frame 5 |
+---------+
@! 3
+---------+
| rame 5 |
+---------+
@! 3
+---------+
| ame 5 |
+---------+
@! 3
+---------+
| me 5 |
+---------+
@! 3
+---------+
| e 5 |
+---------+
@! 3
+---------+
| 5 |
+---------+
@! 3
+---------+
| |
+---------+
@! 3
Затем скомпилируйте и запустите эту программу. В Linux или OSX я просто сохраняю его как text_animate.cpp и запускаю make text_animate. В Windows, возможно, единственное, что вам нужно сделать, это изменить строку, в которой говорится о системе («ясно») для системы («cls»), но я не знаю точно.
#include <iostream>
#include <string>
#include <ctime>
#include <fstream>
const char *FRAME_DELIM = "@!";
unsigned int FRAME_DELIM_LEN = strlen(FRAME_DELIM);
int main(int argc, char *argv[]) {
if(argc != 2) {
std::cout << "Usage: text_animate <frames file>\n";
exit(1);
}
std::string frames_fn = argv[1];
struct timespec sleep_time = {0, 1000000000/15}; // 15 fps
std::ifstream file_stream;
file_stream.open(frames_fn.c_str(), std::ios::in);
if(!file_stream.is_open()) {
std::cout << "Couldn't open [" << frames_fn.c_str() << "]\n";
return -1;
}
std::string frame_line;
unsigned int frame_ticks = 0;
while(true) {
system("clear");
bool is_frame_delim = false;
do {
getline(file_stream, frame_line);
if(file_stream.fail() && file_stream.eof()) {
file_stream.clear();
file_stream.seekg(0, std::ios::beg);
getline(file_stream, frame_line);
}
else if(file_stream.fail()) {
std::cout << "Error reading from file.\n";
break;
}
is_frame_delim = strncmp(frame_line.c_str(),FRAME_DELIM,
FRAME_DELIM_LEN) == 0;
if(!is_frame_delim) {
std::cout << frame_line << "\n";
}
} while(!is_frame_delim);
frame_ticks = atoi(&(frame_line.c_str()[FRAME_DELIM_LEN + 1]));
while(frame_ticks-- > 0) {
nanosleep(&sleep_time, NULL);
}
}
file_stream.close();
return 0;
}
Тогда просто запустить ./text_animate frames.txt. Нажмите CTRL-C, чтобы выйти, так как он петли навсегда.
Возможно, вам стоит попытаться объяснить более подробно то, что вы хотите достичь, и в чем проблема. – hlovdal
Мне нужно написать программу, которая отображает текст как изображение. Как printf ("****** \ n"); printf ("******** \ n"); printf ("*** \ n"); и так далее. . Однако мне любопытно, как анимировать текст, как этот парень, если вы открываете свой терминал и набираете его в: towel.blinkenlights.nl – HollerTrain
точке hlovdal: терминал (с или без проклятий?) Или gui (какой из них ? Xlib ?, Qt ?, SVGAlib? Windows?)? – dmckee