/*
{9 czerwca sprawozdanie jak dobudowany
+działający program
}*/
/* ---bombardowanie----
----efekt ruchu---
definiowanie elementów w tablicy dynamicznej--
*/
//WPROWADZENIE BIBLIOTEK
#include <iostream>
#include <iomanip>
#include <Windows.h>//do funkcji sleep()
#include <time.h>//do funkcji srand() //żeb można było generować
#include <conio.h>//dofunkcji np.: kbhit() //korzystanie z klawiatury
//DEKLARACJA STAŁYCH
//samolot
#define SAMOLOT "="
#define SAMOLOT_T "T" //ustalenie znaku dla sylwetki T samolotu
#define SAMOLOT_P ">"//ustalenie znaku dla sylwetki P samolotu
//tablica pole_bitwy
#define SZEROKOSC 50 //ustalenie szerokosci tablicy
#define WYSOKOSC 20 //ustalenie wysokosci tablicy
//instrukcja czyszcząca
#define CZYSC_INSTRUKCJE "cls"
#define BOMBA 4//ustalenie znaku bomby (kod ASCII) tu romb (4 to romb)(15)
#define EXPLOSJA 42 //ustalenie znaku eksplozji (kod ASCII) to gwaizdka
HANDLE hOut;
//blok definiowania zmiennych
int samolot_odstep=0; //zmienna pomocnicza
char pole_bitwy[WYSOKOSC][SZEROKOSC];
bool przemieszczenie_prawo = true;
using namespace std;
void maluj_samolot(){
cout<<setw(samolot_odstep+2);//ustawienie lewego marginesu od krawedzi pola bitwy żeby samolot się nie schował
cout<<SAMOLOT_T<<SAMOLOT<<SAMOLOT_P<<"\n";
}
void krok_samolot()//przaelot samolotu - warunki do trasy samolotu
{
if(samolot_odstep == SZEROKOSC-2)//jezeli samolot doszedl do max szerokosci
przemieszczenie_prawo=false;//ruch nie istnieje
else if(samolot_odstep==0)//jezeli samolot jest w min szerokosci
przemieszczenie_prawo=true;//ruch istnieje
if(przemieszczenie_prawo)//jezeli ruch istnieje
samolot_odstep++;//inkrementuj pozycje
else//jezeli nie istnieje
samolot_odstep--;//dekrementuj pozycje
}
void maluj_bomby()
{
SetConsoleTextAttribute( hOut, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_BLUE);
for(int i=0;i<WYSOKOSC;i++)
{
for(int j=0; j<SZEROKOSC;j++)
{
if(pole_bitwy[i][j] == 0)//obszar zrzutu bąby nie może być w pierwszym wierszu
printf(" ");
else
printf("%c",pole_bitwy[i][j]);//wywo?anie z kodu ASCII znaku char i pierwszy sposob rysowania
//cout<<pole_bitwy[i][j]; drugi sposob malowania
}
printf("\n");
}
}
void krok_bomb()
{
//przesuniecie bomb w dol, jesli sa w ostatniej kratce bedzie eksplozja
for(int i=(WYSOKOSC-1);i>0;i--)
{
for(int j=0;j<SZEROKOSC;j++)
{
if(pole_bitwy[i-1][j]==BOMBA)
{
pole_bitwy[i-1][j] = 0;
pole_bitwy[i][j] = BOMBA;
}
if(i== WYSOKOSC-1)
{
if(pole_bitwy[i][j]== BOMBA)//warunek zamiany znaku bomby na eksplozje
pole_bitwy[i][j]=EXPLOSJA;
else
pole_bitwy[i][j]=0;//wygaszanie bomby
}
}
}
//losowanie zrzutu
if(rand()%10<2)//na oko 20% szansy na bomby
{
pole_bitwy[0][samolot_odstep]=BOMBA;//zrzut pojedynczy
//pole_bitwy[0][samolot_odstep+1]=BOMBA;//zrzut drugi seryjny
}
}
int main(int argc, char** argv) {
srand(time(NULL));//silnik do uruchomienia ruchu
for(int i=0;i<WYSOKOSC;i++)
for(int j=0;j<SZEROKOSC;j++)
pole_bitwy[i][j]=0;
while(1)//petla nieskonczona otwarcie
{
if(kbhit())//je?eli nacisniesz dowolny klawisz (keyboard hit)
{
break;
}
else
{
maluj_samolot();
krok_samolot();
maluj_bomby();
krok_bomb();
Sleep(50);
system(CZYSC_INSTRUKCJE);
}
}
cin.get();
return 0;
}