Efekt napisów końcowych i konsola c++

0

Witam
Jak zrobić efekt napisów końcowych w konsoli c++.
Chodzi o to że napisy przesuwają się od dołu do góry

0

Dodawaj spacje tak aby to wyśrodkować a następnie co np. sekundę przesuwaj wiersz na dół.

1
#include <iostream>
#include <windows.h>
#include <cstdlib>
int main()
  {
      for (int i=1; i<25; i++)
      {
          std::cout << "\t\t\t\tNapis koncowy" << std::endl;
          _sleep(400);
          system("cls");
          for (int b=1; b<i; b++)
          {
              std::cout << std::endl;
          }
      }
      return 0;
  }

:D

0

Dzięki @Min0s, ale ten tekst idzie od góry na dół a nie tak jak ja bym wolał.
Wiesz co trzeba by tu zmienić aby tak było?

0

Wyświetl tyle pustych linii ile ma konsola (domyślnie 25).

1
BigZ25 napisał(a):

Dzięki @Min0s, ale ten tekst idzie od góry na dół a nie tak jak ja bym wolał.
Wiesz co trzeba by tu zmienić aby tak było?

Tak główkowałem i przypomniałem sobie o stringach, rozwiązanie okazało się takie proste :D.

#include <iostream>
#include <windows.h>
#include <cstdlib>
#include <string>
int main()
  {
      std::string napis="\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t\tNapis koncowy";
      for (int i=0; i<25; i++)
      {
          std::string napis2(napis, i+1, 70-i);
          std::cout << napis2 << std::endl;
          _sleep(400);
          system("cls");
      }
      return 0;
  }
2

@Min0s, to samo tylko bez przekombinowań:

#include <iostream>
#include <windows.h>

int main()
  {
   const char napis[]="\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n \t\t\t\tNapis koncowy";
   for (int i=0;napis[i]!='\t';++i)
     {
      std::cout<<(napis+i)<<std::endl;
      _sleep(400);
      system("cls");
     }
   return 0;
  }
0

Wszystko super, ale jak zrobić gdy mamy więcej zdań (jedno pod drugim). Przecież podnoszenie każdego zdania osobno nie ma sensu

0
BigZ25 napisał(a):

Wszystko super, ale jak zrobić gdy mamy więcej zdań (jedno pod drugim). Przecież podnoszenie każdego zdania osobno nie ma sensu

#include <iostream>
#include <windows.h>
#include <cstdlib>
#include <string>
int main()
  {
      std::string napis="\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t\tNapis koncowy\n\t\t\t\tNapis koncowy 2\n\t\t\t\tNapis koncowy 3\n\t\t\t\tNapis koncowy 4";
      for (int i=0; i<25; i++)
      {
          std::string napis2(napis, i+1, (napis.length()-i));
          std::cout << napis2 << std::endl;
          _sleep(400);
          system("cls");
      }
      return 0;
  }

\n Powoduje przejście do nowej linii

0

Wielkie dzięki @Min0s.

a tak z ciekawości do czego służy \t?

1

a tak z ciekawości do czego służy \t?

Wyświetla znak "tab".

A jeśli chodzi o wątek, może mnie coś mija, ale dlaczego nie po prostu:

int main() {
   std::string lines[] = {
       "linia 1", "", "", // każdy napis w tablicy to jedna linia, puste napisy dla pustych linii
       "linia 2", "", "", 
       "linia 3", "", "", "", 
       "linia 4", "", "", "",
       "THE END", "", "", "", "", "", "", ""
   };
   int line_ct = sizeof(lines)/sizeof(*lines);
   // 40 - ilość wierszy w konsoli, w teorii może być wyższa więc lepiej by to było pobrać skądś
   // upewniamy sie że jesteśmy na dole konsoli - przy okazji powoduje to że system() jest niepotrzebne
   for (int i=0; i<40; i++) { 
       std::cout << std::endl;
   }
   for (int i=0; i<line_ct; i++) {
       // wypisujemy kolejną linię, a reszta się przesuwa sama automatycznie do góry
       std::cout << lines[i] << std::endl;
       sleep(400); // i czekamy trochę czasu
   }
   return 0;
}
0

Ogromne dzięki dla wszystkich

1 użytkowników online, w tym zalogowanych: 0, gości: 1