Return to Topic Menu | Computer Science Main Page | MathBits.com | Terms of Use
 

  Animated Tickertape

Create the illusion of a rolling tickertape inside of a rectangular box on your normal C++ output screen.  This illusion will give the appearance that the code is being "pulled" into the box from its right hand side, moves across the box toward the left hand side, and exits the box on the left side.

// tickertape
#include <iostream.h>
#include<stdlib.h>
#include"screen.h"
#include "apstring.cpp"

void mid_string(apstring banner, int starting, int number);
void rectangle_box(int x, int y, int length, int width);
void tickertape(apstring banner, int repeats, int box_size, int x_right_box,
int y_middle, int x_left_box);

int main(void)
{
     system("CLS");
     // Here is the WINDOW (or the box) for the tickertape
     rectangle_box(30, 10, 12, 4);
     // Here is the Tickertape message with spaces added that are length of box
     apstring banner = "Computer Science 2 is great!             ";
     // Here comes the tickertape effect
     tickertape(banner, 3, 11, 42, 12, 31);
     cout<<flush<<endl<<endl<<endl<<endl;
     return 0;
}
// Function to chop our middle portions of the string
void mid_string(apstring banner, int starting, int number)
{
     for (int n = 0; n <= number - 1; n++)
     {
          cout<<banner[starting+n];
          cout<<flush;
     }
     return;
}
// Function to create rectangular box using ASCII characters
void rectangle_box(int x, int y, int length, int width)
{
     gotoxy(x,y);
     cout<<char(201);
     for(int i = 1; i<=length; i++) // row across the top
     {
          cout<<char(205)<<flush;
     }
     cout<<char(187)<<flush;
     for(int j = 1; j <= width; j++) // edges of box
     {
           gotoxy(x,y+j);
           cout<<char(186)<<flush;
           gotoxy(x+length+1, y+j);
           cout<<char(186)<<flush;
     }
     gotoxy(x,y+width);
     cout<<char(200)<<flush;
     for(i=1; i <= length ; i++) // row across the bottom
     {
          cout<<char(205)<<flush;
     }
     cout<<char(188)<<flush;
     return;
}
// Function for tickertape effect
void tickertape(apstring banner, int repeats, int box_size, int x_right_box, int y_middle,
int x_left_box)
{
     // The c loop controls the number of repetitions
     for (int c = 1; c <= repeats; c++)
     {

          for(int s = 1; s <= box_size; s++)
          {
               gotoxy(x_right_box-s, y_middle);
               // control speed of tickertape
              delay(150);
              cout<<flush;
              for(int m = 0; m <= s-1; m++) //fill box with leftmost characters of banner
              {
                      cout<<banner[m];
                      cout<<flush;
              }

          }
         for(int y = 1; y < banner.length()-box_size; y++)
         {
                gotoxy(x_left_box, y_middle);
                // control speed of tickertape
                delay(150);
                cout<<flush;
                mid_string(banner, y, box_size);  //call function to chop middle
          }

     }
     return;
}