Описание программы
Код программы
Код с подробными комментариями
Советы по улучшению и расширению программы
Описание программы
Данная программа предлагает пользователю ввести строку, которая послее ввода начнет перемещаться по экрану - от левого края до правого и обратно. При всей своей простоте данная программа служит неплохой иллюстрацией работы со строками в стандартном C++. Единственный камень преткновения здесь - это приостановка программы на небольшой промежуток времени. Однако, историю моей войны с функциями delay и sleep в среде Borland C++ Builder читайте здесь.
Код программы
#include <iostream>
#include <conio>
#include <dos>
std::string s;
int position = 1;
int V = 1;
int main()
{
std::cout << "Input string: ";
getline(std::cin,s);
if (s.length() < 80)
while(!kbhit())
{
clrscr();
position += V;
if (position < 2 || (position + s.length()) > 80)
V *= -1;
gotoxy(position, 10);
std::cout << s;
sleep(1);
}
getch();
}
|
Код программы с комментариями
#include <iostream> //Подключаем библиотеку, обрабатывающую //потоки ввода/вывода
#include <conio> //Библиотека содержит функции //clrscr, kbhit, gotoxy и getch
#include <dos> //Библиотека содержит функцию sleep
std::string s; //Стандартная C++-строка
int position = 1; //Начальное положение строки - у левого края
int V = 1; //Строка смещается на одну позицию в секунду
int main()
{
std::cout << "Input string: "; //Просим ввести строку
getline(std::cin,s); //Считываем строку. При этом пробел НЕ является //символом окончания строки, в отличие от std::cin >> s;
if (s.length() < 80) //Если строка помещается в одну строчку экрана...
while(!kbhit()) //...то до тех пор, пока не нажата клавиша
{
clrscr(); //Очищаем экран
position += V; //Определяем новое положение строки
if (position < 2 || (position + s.length()) > 80) //Если строка //находится у края экрана
V *= -1; //Меняем направление смещения
gotoxy(position, 10); //Перемещаем курсор в новую позицию
std::cout << s; //Выводим строку
sleep(1); //Приостановка на одну секунду. //О проблемах, связанных с данной операцией прочитайте здесь
}
getch(); //Ждем нажатия клавиши перед завершением программы
}
|
Советы по улучшению и расширению программы
Естественно, что мы можем перемещать строку не только в горизонтальном направлении, но и вертикальном. Введя дополнительную игрековую координату, а также игрековую скорость, можно легко заставить строку летать по всему экрану, сталкиваясь с его краями.
Кроме того, можно перемещать строку не только в, так сказать, символьной сетке, но и попиксельно. Однако, это уже требует работы с графикой, а, следовательно, будет выполняться уже в среде разработки Borland C++ 3.1, которая создавалась задолго до принятия стандарта C++, а потому программа потребует соответствующей конвертации.
Кроме того, необходимо использовать не сочетание функций gotoxy-std::cout , а функцию outtextxy , и контролировать на столкновение со стенками не по длине строки, а по ее размерам в пикселах.
|