В этой статье мы разберём как делается консольный снеговик на языке программирования C++, думаю вам будет очень интересно.
Также посмотрите статьи как создать снеговика на других языках:
Думаю эти статьи вам будут интересны.
Разработка снеговика:
Теперь начнём разрабатывать снеговика, но стоит сказать, что работать он будет в терминале и для того чтобы он был разноцветным, будем использовать стандартную библиотеку Windows для работы с консолью.
Поэтому наша программа сможет работать только в операционной системе Winodws, но на какой конкретно, это не важно.
В начале нам нужно подключить все нужные библиотеки:
1 2 3 4 | #include <iostream> #include <windows.h> using namespace std; |
Тут в начале мы подключаем нужную библиотеку для ввода и вывода данных, но использовать мы её будем только для вывода, потом идёт библиотека windows.h
, которая нужна для окрашивания консоли.
Теперь создаём функцию main()
, где и будет работать весь код:
1 2 3 4 | int main() { ... } |
Внутри функции, настраиваем работу с консолью, вот что вписываем:
1 2 3 4 5 6 | // Берём вывод HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE); // Берем координаты курсора в консоли COORD C; // Переменные для цикла, (нужно будет ниже) short int i=1, j=1; |
В начале мы берём вывод из консоли, так как мы с ним и будем работать, потом берём координаты курсора в консоли, он будет нужен ниже, и создаём две переменных для цикла, которые тоже будут ниже.
Теперь пришла пора создать самого снеговика, вот как он делается:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | cout << "\n" " ** \n" " **** \n" " ** \n"; SetConsoleTextAttribute(h, 0x0004); cout << " /||\\ \n" " //||\\\\ \n" " ///||\\\\\\ \n" " ////||\\\\\\\\ \n" " /////||\\\\\\\\\\ \n" " //////||\\\\\\\\\\\\ \n" " ///////||\\\\\\\\\\\\\\ \n" " ////////||\\\\\\\\\\\\\\\\ \n" " /////////||\\\\\\\\\\\\\\\\\\ \n"; SetConsoleTextAttribute(h, 0x000F); cout << " /####################\\ \n" " /####"; SetConsoleTextAttribute(h, 0x0003); cout << "00"; SetConsoleTextAttribute(h, 0x000F); cout << "##########"; SetConsoleTextAttribute(h, 0x0003); cout << "00"; SetConsoleTextAttribute(h, 0x000F); cout << "####\\ \n" " |###"; SetConsoleTextAttribute(h, 0x0003); cout << "0000"; SetConsoleTextAttribute(h, 0x000F); cout << "########"; SetConsoleTextAttribute(h, 0x0003); cout << "0000"; SetConsoleTextAttribute(h, 0x000F); cout << "###| \n"; cout << " |####"; SetConsoleTextAttribute(h, 0x0003); cout << "00"; SetConsoleTextAttribute(h, 0x000F); cout << "##########"; SetConsoleTextAttribute(h, 0x0003); cout << "00"; SetConsoleTextAttribute(h, 0x000F); cout << "####| \n" " \\######################/ \n" " \\##"; SetConsoleTextAttribute(h, 0x0007); cout << "\\______________/"; SetConsoleTextAttribute(h, 0x000F); cout << "##/ \n" " \\##################/ \n" " \\################/ \n" " /################\\ \n" " /######################\\ \n" " /#############"; SetConsoleTextAttribute(h, 0x000D); cout << "OO"; SetConsoleTextAttribute(h, 0x000F); cout << "#############\\ \n" " /###############"; SetConsoleTextAttribute(h, 0x000D); cout << "OO"; SetConsoleTextAttribute(h, 0x000F); cout << "###############\\ \n" " /##################################\\ \n" " |#################"; SetConsoleTextAttribute(h, 0x000D); cout << "OO"; SetConsoleTextAttribute(h, 0x000F); cout << "#################| \n" " |#################"; SetConsoleTextAttribute(h, 0x000D); cout << "OO"; SetConsoleTextAttribute(h, 0x000F); cout << "#################| \n" " |####################################| \n" " |#################"; SetConsoleTextAttribute(h, 0x000D); cout << "OO"; SetConsoleTextAttribute(h, 0x000F); cout << "#################| \n" " \\################"; SetConsoleTextAttribute(h, 0x000D); cout << "OO"; SetConsoleTextAttribute(h, 0x000F); cout << "################/ \n" " \\################################/ \n" " \\############################/ \n" " \\######################/ \n" " \\################/ \n" " \n"; |
Как можете заметить код тут очень часто повторяется, но не чего сложного тут нет, cout
мы используем для вывода.
Но самое интересное, это функция setConsoleTextAttribute()
которая служит для покраски текста в определённый цвет, первым параметрам она принимает сам вывод, который мы выше объявили, вторым цвет специальном формате C++.
В целом на этом можно закончить, но я ещё решил в конце добавить не большую надпись, вот что мы делаем:
1 2 3 4 5 6 7 8 | SetConsoleTextAttribute(h, 0x000B); do{ if(i == 5) cout << " I'm a snowman." << endl; if(i == 10) cout << " I congratulate everyone on a happy New-Year!!!"; Sleep(1000); ++i; }while(i <= 10); |
В начале мы назначаем цвет, потом делаем цикл do ... while
, внутри него проверяем, чему он равна переменная i
, если 5 то выводим сообщение «I’m a snowman.», если 10, то выводим « I congratulate everyone on a happy New-Year!!!», также внутри цикла у нас останавливается программа на одну секунду.
Теперь создадим второй цикл, который будим использовать для изменения цвета текста, который мы только что вывели.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | do{ // Назначаем X C.X=0; // Назначаем Y C.Y=36; // Ставим курсор SetConsoleCursorPosition(h, C); // Вычисляем цвет SetConsoleTextAttribute(h, (j%2) ? 0x000B : 0x0004); // Выводим надпись cout << " I'm a snowman." << endl;\ // Выводим надпись cout << " I congratulate everyone on a happy New-Year!!!"; // Ждём 500 милисекунд Sleep(500); // Инкрементируем j ++j; // Проверяем j if(j > 10) j = 1; }while(j); |
Здесь мы также используем do ... while
, внутри мы назначаем координаты для курсора мыши в терминале и перемешаем курсор по этим координатам, делаем это с помощью функции SetConsoleCursorPosition()
.
Дальше ставим цвет для текста, цвет зависит от переменной j
, если она чётная, то один цвет, если не чётная, то другой цвет, дальше выводим эти надписи, которые вывели выше и ждём 500 миллисекунд, увеличиваем j
на один.
Вот что у нас должно получиться:
Как видите всё сработало, у вас должно получиться вот это же.
Вывод:
В этой статье вы прочитали как делается снеговик на языке программирования C++, види консольной программы на Windows.