Есть сотни реализаций, на разных языках и графика и консоль, что хочешь. Но свой велосипед всегда приятнее.
Подробности под катом.
К тому-же сессия, надо учить экономику а она в голову не лезет. И тут я вспомнил что на С++ писал только с помощью Qt. Решил что это не порядок. Почему бы не написать что-то например с помощью gcc? В моём случае g++. И попутно изучить редактор emacs. Флаг в руки и в атаку. Решил написать заставку из матрицы. Для позиционирования символов использовал ncurses. Ещё хочеться использовать свой i5 на полную катушку. Поэтому решил сделать матрицу ещё и многопоточной. Использовал pthread.
Давайте рассмотрим костыли.
ncurses поста в использовании google кишит ссылками на эту тему. Алгоритм рисования одной пробегающей "змейки" в матрице тоже достаточно прост.
void print_snake(int col,int len,int speed){
//print 1 snake in col column with len length and speed speed;
int i;
for (i = 0;i<count_row;i ){
TS_print_char(i,col);
if (i>=len){
TS_print_pass(i-len,col);// when snake is almost on screen is time to clear her tail
}
usleep(speed);
}
for (i=count_row-len-1;i<count_row;i ){
TS_print_pass(i,col);//clear tail when snake is under screen border
usleep(speed);
}
}
TS_print_char - моя потоко-безопасная функция вывода случайного символа на экран в место x y.
Сначала я делал refresh каждый раз при выводе символа. Но посмотрел что програмка при выполнении занимает полтора процессора. и Ужаснулся. Вывел обновление в отдельный поток, с периодом в 10000 микросекунд. Теперь программка занимает каких-то 15 - 20 % процессора, и это при полном экране ( более 100 потоков) . Ах я ещё не говорил. Количество потоков зависит от количества столбцов помещающихся на консоль. Вот собственно и всё.
Просмотреть код можно тут:
КОД
скачать запустить, или скомпилировать и запустить можно от сюда
git clone git@github.com:alexkutsan/The-Matrix.git
или
Код легко читаем. Разобраться в нём - раз плюнуть. Я старался максимально снабдить комментариями
Матрица - хорошее упражнение. Алгоритм не сложный легко наверстать набивку кода ручками. При этом немного подумать о функционале, и многопоточности. В перспективе сделаю матрицу на технологии cuda. Но пока-что не могу победить драйвер видеокарты под Linux.И можно сделать матрицу на OpenGL.
Читать дальше......