Авторизация



Счетчики

Обмен ссылками

Блог программиста
Главная Стандартный C++ Летающая строка
Летающая строка PDF Печать E-mail
Автор: Андрей   
31.03.2009 10:49

Описание программы
Код программы
Код с подробными комментариями
Советы по улучшению и расширению программы

Описание программы
Данная программа предлагает пользователю ввести строку, которая послее ввода начнет перемещаться по экрану - от левого края до правого и обратно. При всей своей простоте данная программа служит неплохой иллюстрацией работы со строками в стандартном 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, и контролировать на столкновение со стенками не по длине строки, а по ее размерам в пикселах.

Обновлено 04.07.2009 13:45