• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Migotanie w cmd

Object Storage Arubacloud
0 głosów
619 wizyt
pytanie zadane 2 sierpnia 2017 w C i C++ przez seba Dyskutant (8,900 p.)
Witam mam pytanie czy można stworzyć efekt migotania poszczególnego znaku w cmd. Jeśli tak jak to zrobić.

2 odpowiedzi

0 głosów
odpowiedź 2 sierpnia 2017 przez PoetaKodu Stary wyjadacz (10,990 p.)

Da się, ale jest to słaby pomysł.

#include <iostream>
#include <windows.h>
#include <cstdint>
#include <chrono>
#include <vector>
#include <thread>

class FlashingChar
{
public:
	FlashingChar(const char argCharacter,
		const std::int16_t argX, const std::int16_t argY,
		const double argInterval = 0.7)
		: character(argCharacter), x(argX), y(argY),
		interval(argInterval), visible(false), currentTime(0)
	{

	}
	void Update(const double deltaTime)
	{
		currentTime += deltaTime;
		while (currentTime >= interval)
		{
			currentTime -= interval;
			visible = !visible;
			this->modify();
		}
	}
	void modify()
	{
		HANDLE output = GetStdHandle(STD_OUTPUT_HANDLE);

		COORD pos = { this->x, this->y };
		COORD currentPos;

		{
			CONSOLE_SCREEN_BUFFER_INFO csbi;
			GetConsoleScreenBufferInfo(output, &csbi);
			currentPos = csbi.dwCursorPosition;
		}

		{
			SetConsoleCursorPosition(output, pos);
			DWORD dwBytesWritten = 0;
			char space = ' ';
			if (this->visible)
				WriteConsoleOutputCharacterA(output, &(this->character), 1, pos, &dwBytesWritten);
			else
				WriteConsoleOutputCharacterA(output, &space, 1, pos, &dwBytesWritten);
		}

		SetConsoleCursorPosition(output, currentPos);
	}
	char character;
	std::int16_t x, y;
	double interval;
	double currentTime;
	bool visible;
};

int main() {
	std::vector<FlashingChar> characters = {
		{ 'Z', 10, 1, 0.4 },
		{ 'A', 15, 2, 0.9 },
		{ ']', 4, 3, 0.7 },
		{ 'x', 12, 7, 0.2 },
	};

	auto getCurrentTime = []() {
		return std::chrono::high_resolution_clock::now();
	};

	auto lastTime = getCurrentTime();
	double deltaTime = 1.0 / 60.0;
	while (true)
	{
		deltaTime = std::chrono::duration<double>(getCurrentTime() - lastTime).count();
		lastTime = getCurrentTime();
		

		for (auto &character : characters)
		{
			character.Update(deltaTime);
		}

		auto frameTime = std::chrono::duration<double>(getCurrentTime() - lastTime).count();
		if (frameTime < 1.0 / 60.0)
			std::this_thread::sleep_for(std::chrono::duration<double>(1.0 / 60.0 - frameTime));
	}

	return 0;
}

 

–1 głos
odpowiedź 2 sierpnia 2017 przez Borys Kaczmarek Użytkownik (630 p.)
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
    while(true)
    {
    cout<<"Hello world!"<<endl;
    Sleep(500);
    system("cls");
    Sleep(500);
    }
    return 0;
}

Może coś takiego. Wadą jest to, że jeśli nie przerwiesz pętli, nie będziesz mógł dalej działać w programie;

komentarz 2 sierpnia 2017 przez niezalogowany
"efekt migotania poszczególnego znaku w cmd"

Podobne pytania

0 głosów
2 odpowiedzi 166 wizyt
pytanie zadane 2 sierpnia 2017 w C i C++ przez seba Dyskutant (8,900 p.)
0 głosów
2 odpowiedzi 207 wizyt
pytanie zadane 2 sierpnia 2017 w C i C++ przez seba Dyskutant (8,900 p.)
0 głosów
0 odpowiedzi 43 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...