# 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