﻿
#include <iostream>     // cout, endl 
#include <stdlib.h>     // srand, rand
#include <time.h>       // time
#include <thread>       // sleep_for


using namespace std;

// losuje kod ASCII bombki
char losujBombke();

// rysuje określoną ilość spacji
void rysujSpacje(int);

int main()
{
	// initialize random seed
	srand(time(NULL));

	// pętla nieskończona do rysowania kolejnych klatek animacji
	while (1) {
		/*
		*  rysujemy gwiazdę na szczycie choinki
		*/
		int iloscSpacji = 28;
		cout << "\n\n\n";
		rysujSpacje(iloscSpacji);
		cout << "  *\n";
		rysujSpacje(iloscSpacji);
		cout << " ***\n";
		rysujSpacje(iloscSpacji);
		cout << "*****\n";
		rysujSpacje(iloscSpacji);
		cout << " ***\n";
		rysujSpacje(iloscSpacji);
		cout << "  *\n";

		/*
		*  rysujemy choinkę
		*/

		// ilość spacji
		iloscSpacji = 30;

		// zmienna pomocnicza do uzyskania nieparzystej 
		// liczby rysowanych znaków w rzędzie
		int n = 1;

		// ilość rzędów choinki
		int iloscRzedow = 20;

		// poziome warstwy choinki
		for (int i = 0; i < iloscRzedow; i++)
		{
			// rysujemy spacje
			for (int k = iloscSpacji; k > 0; k--)
			{
				cout << ' ';
			}
			iloscSpacji--;
			// rysujemy jeden rząd znaków (i + n daje nieparzystą ilość)		
			for (int m = 0; m < i + n; m++)
			{
				// losowo wybieramy albo znak choinki albo bombka
				if (rand() % 2) {
					cout << 'x';
				}
				else {
					cout << losujBombke();
				}
			}
			n++;
			// przechodzimy do następnej warstwy
			cout << endl;
		}

		/*
		*  rysujemy podstawę choinki
		*/
		for (int i = 0; i < 3; i++)
		{
			rysujSpacje(28);
			for (int j = 0; j < 5; j++)
			{
				cout << '+';
			}
			cout << endl;
		}

		cout << "\n\n\n";
		std::cout << "      Wesołych Swiąt!\n";
		
		// chwila przerwy
		std::this_thread::sleep_for(std::chrono::milliseconds(20));

		// czyścimy konsolę
		system("cls");
	}
}
char losujBombke() {
	// kod ASCII bombki 33-126
	char bombka = rand() % 94 + 33;
	return bombka;
}

void rysujSpacje(int ilosc) {
	for (int i = 0; i < ilosc; i++)
	{
		cout << ' ';
	}
}