# Ardozaur v2
```c++
#include <LiquidCrystal.h>
LiquidCrystal lcd(2,3,4,5,6,7);
byte kursor[8] =
{
B00000,
B00000,
B11100,
B00110,
B00110,
B11100,
B00000,
B00000
};
byte skala_gorna[8]=
{
B11111,
B11111,
B01110,
B01110,
B11100,
B01110,
B01100,
B00100
};
byte skala_dolna[8]=
{
B00100,
B01100,
B01110,
B11100,
B01110,
B01110,
B11111,
B11111
};
byte boom[8]=
{
B00000,
B10101,
B01110,
B11111,
B01110,
B10101,
B00000,
B00000
};
void setup(){
lcd.begin(16, 2);
lcd.createChar(0,kursor);
lcd.createChar(1,skala_gorna);
lcd.createChar(2,skala_dolna);
lcd.createChar(3,boom);
pinMode(8,INPUT_PULLUP);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
randomSeed(analogRead(0)); // deklarowanie “ziarna losowania”
Serial.begin(9600);
}
bool gora[17]; //Jest ich 17, gdyż potrzebujemy jednego dodatkowego do "chowania"
//następnych przeszkód
bool dol[17];
bool czolg = 1; // nowe
bool przycisk; // nowe
int hp = 3;
int punkty = 0;
int lvl = 1;
bool poczatek = true;
// Tworzenie funkcji gry (zadanie tych zajęć)
//Kolejność tej funkcji jest... ciekawa, trzeba przedyskutować
void gra(){
lcd.setCursor(1,czolg);
lcd.write(byte(0));
for(int i = 0; i<random(2,6);i++){ //pętla oddzielająca przeszkody (przerwa 1-4)
//random(min,max+1)
//Sprawdzamy czy nasz gracz nie przywalił, patrzymy do przodu
if (czolg == 0 && gora[2]==0){
lcd.setCursor(1,0);
lcd.write(byte(0));
punkty++;
}
else if(czolg == 1 && dol[2]==0){
lcd.setCursor(1,1);
lcd.write(byte(0));
punkty++;
}
else{//Walniecie
lcd.setCursor(1,czolg);
lcd.write(byte(3));
hp--;
if (czolg)
dol[2] = 0;
else
gora [2] = 0;
}
for(int j =0; j<16; j++)// Nie podoba mi się to... ale działa
//a zmiana byłaby za bardzo skomplikowana
{
if(gora[j+1]==1){ //Tu okazuje się po co nam 17,
//albowiem wyświetlamy o jeden do przodu (do gracza) od tego co jest w tablica
lcd.setCursor(j,0); //Przez to, jesli nasza tablica miałaby tylko 16,
//to zawsze by wyświetlało się od 15 miejsca, gdyż ta część pomija jedną kratkę
lcd.write(byte(1));
gora[j]=1;
gora[j+1]=0;
}
if(dol[j+1]==1){
lcd.setCursor(j,1);
lcd.write(byte(2));
dol[j]=1;
dol[j+1]=0;
}
}
long czas = millis();
while(millis()-czas<1000 - 150*lvl){// z kolejnymi lvl mamy mniej czasu
if(digitalRead(8)==HIGH) //przycisk
przycisk = false;
if(digitalRead(8)== LOW && przycisk == false){
przycisk = true;
czolg = !czolg;
}
}
lcd.clear();
Serial.println(punkty);
switch (hp)//sprawdzamy hp
{
case 3:
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
break;
case 2:
digitalWrite(9,LOW);
break;
case 1:
digitalWrite(10,LOW);
break;
case 0:
digitalWrite(11,LOW);
hp = 3;
lcd.setCursor(1,0);
lcd.print("Game");
lcd.setCursor(1,1);
lcd.print("Over");
delay(2000);
for(int j=0;j<17;j++)
{
gora[j]=0;
dol[j]=0;
}
poczatek = true;
return; //przegralismy, wracamy na poczatek
}
if (punkty == 50*lvl){
lvl++;
poczatek = true;
lcd.setCursor(1,0);
lcd.print("Next");
lcd.setCursor(1,1);
lcd.print("Level");
for(int j=0;j<6;j++)// na wszelki wypadek,
//przy probach odrazu wraca sie a przed tobą może być przeszkoda
{
gora[j]=0;
dol[j]=0;
}
delay(3000);
}
}
if (random(0,2) == 0) //generowanie przeszkód
gora[16]=1;
else
dol[16]=1;
}
void loop(){
if(poczatek){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("START");
lcd.setCursor(0,1);
lcd.print("Level");
lcd.setCursor(6,1);
lcd.print(lvl);
delay(2500);
punkty = 0;
poczatek = false;
lcd.clear();
}
else{
gra();
}
}
```
Do kolejnej obróbki, najlepiej do nowego napisania i przedyskutowania funkcji gra
To może być znośnie, ale nie wiem czy na zajęcia, jak już to obrobić to na parę funkcji