Untitled
Never
/* * ##### jogo da Nave com 2 LCDs 16x2 ###### * *LiquidCrystal_I2C - biblioteca e tutorial: *http://blog.eletrogate.com/guia-completo-do-display-lcd-arduino/ *Tutorial 2 lcds: *https://www.arduinoecia.com.br/2018/02/como-conectar-dois-displays-lcd-i2c-arduino.html *jogo original: *https://youtu.be/iDEIYxBwatM * *Alterções e ajustes Flavio R.O. dos Santos *Caicó-RN, 09 de maio de 2019 */ #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <AxisJoystick.h> #define SW_PIN 2 #define VRX_PIN A0 #define VRY_PIN A1 Joystick* joystick; LiquidCrystal_I2C lcd(0x27,16,2); LiquidCrystal_I2C lcd2(0x3f,16,2); //usando MILLIS unsigned long previousMillis = 0; // const long interval = 200; //velocidade do jogo //variaveis do jogo int pxnave,pynave,pxaste,pyaste,pxenergia,pyenergia,pxtiro,pytiro; bool game,vtiro,vpilha; int pontos; double venergia; int vtela; int maxpontos=1000; byte nave[8]={B11000,B01100,B01110,B01111,B01111,B01110,B01100,B11000}; byte asteroide[8]={B00000,B00100,B01110,B10111,B11101,B01110,B00100,B00000}; byte explosao[8]={B10001,B10101,B01010,B10100,B00101,B01010,B10101,B10001}; byte energia[8]={B01110,B11011,B10001,B10101,B10101,B10101,B10001,B11111}; byte tiro[8]={B00000,B00000,B00000,B00111,B00111,B00000,B00000,B00000}; //variaveis do joystick int line[3] = {0,1,2},line_bk[3], index, menu_number = 1; boolean enter_flag = 0, sub_menu = 0; void setup() { joystick = new AxisJoystick(SW_PIN, VRX_PIN, VRY_PIN); lcd.init(); // inicializa the lcd lcd.backlight(); //acender o LED lcd2.init(); // inicializa the lcd lcd2.backlight(); lcd2.begin (16,4);// iniciando com mais linhas pra não sobrescrever o texto pxnave = pynave = pyaste = pontos = pxenergia = pyenergia = pytiro = 0; pxtiro = -1; pxaste = 15; venergia = 100; vtela = 0; lcd.createChar(1,nave); lcd.createChar(2,asteroide); lcd.createChar(3,explosao); lcd.createChar(4,energia); lcd.createChar(5,tiro); lcd.clear(); lcd2.clear(); game = false; vtiro = vpilha = false; } void loop(){ unsigned long currentMillis = millis(); if(game){ if(currentMillis - previousMillis >= interval){ Joystick::Move move = joystick->singleRead(); if(!(move == Joystick::Move::PRESS)) enter_flag = 0x01; previousMillis = currentMillis; venergia -= 0.25; lcd.clear(); //lcd2.clear(); if(venergia <= 0){ game = 0; desenhaExplosaoNave(pxnave,pyaste); vtela = 2; } painel(); if(move == Joystick::Move::RIGHT){ //move nave pra cima pynave = 0; } if(move == Joystick::Move::LEFT){ //move nave pra baixo pynave = 1; } if((move == Joystick::Move::PRESS) && enter_flag){ // tiro enter_flag = 0x00; pxtiro = 1; vtiro = true; pytiro = pynave; } pxaste -= 1; desenhaNave(pxnave,pynave); desenhaAsteroide(pxaste,pyaste); if(vtiro){ desenhaTiro(pxtiro,pytiro); pxtiro += 1; } if(pxaste < 0){ pxaste = 15; pyaste = random(0,2); } if(pxtiro > 16){ vtiro = false; pxtiro = -1; } if(((pxtiro == pxaste + 1)&&(pytiro == pyaste))||((pxtiro == pxaste)&&(pytiro == pyaste))){ vtiro = false; pxtiro = -1; desenhaExplosaoAsteroide(pxaste,pyaste); pyaste = random(0,2); pxaste = 15; pontos += 2; if(pontos >= maxpontos){ game = 0; vtela = 1; } } if(((pxnave == pxaste)&&(pynave == pyaste))){ game = 0; desenhaExplosaoNave(pxnave,pyaste); vtela = 2; } if(!vpilha){ if(random(0,60) > 58){ pxenergia = 15; vpilha = true; pyenergia = random(0,2); } } else { pxenergia -= 1; desenhaEnergia(pxenergia, pyenergia); if(((pxnave == pxenergia + 1)&&(pynave == pyenergia))||(( pxnave == pxenergia)&&(pynave == pyenergia))){ vpilha = false; pxenergia = -1; venergia = 100; } } } //fim do millis } else { // fim do if(game) tela(vtela); } } void desenhaNave(int px, int py){ lcd.setCursor(px,py); lcd.write(1); } void desenhaAsteroide(int px, int py){ lcd.setCursor(px,py); lcd.write(2); } void desenhaEnergia(int px, int py){ lcd.setCursor(px,py); lcd.write(4); } void desenhaTiro(int px, int py){ lcd.setCursor(px,py); lcd.write(5); } void desenhaExplosaoNave(int px, int py){ lcd.clear(); lcd.setCursor(px,py); lcd.write(3); delay(500); lcd.clear(); } void desenhaExplosaoAsteroide(int px, int py){ lcd.setCursor(px,py); lcd.write(3); delay(500); lcd.clear(); } void reset(){ pontos = 0; venergia = 100; game = true; vtela = 0; } void painel(void){ lcd2.setCursor(10,0); lcd2.print(pontos); lcd2.setCursor(0,0); lcd2.print("Pontos:"); lcd2.setCursor(10,1); lcd2.print(venergia); lcd2.setCursor(0,1); lcd2.print("Energia:"); } void tela(int cond){ //0=TelaInicial | 1=Ganhou | 2=Perdeu Joystick::Move move = joystick -> singleRead(); if(!(move == Joystick::Move::PRESS)) enter_flag = 0x01; if(cond < 1){ if(!sub_menu){ //lcd2.clear(); lcd2.setCursor(0,0); lcd2.print(">"); lcd2.setCursor(0,1); lcd2.print(" "); lcd2.setCursor(1,line[0]); lcd2.print("1)Iniciar Jogo "); lcd2.setCursor(1,line[1]); lcd2.print("2)Como jogar "); lcd2.setCursor(1,line[2]); lcd2.print("3)Sair "); } readButts(); } else { String txt = {(cond > 1 ? " GAME OVER " : "PARABÉNS")}; lcd2.setCursor(0,0); lcd2.print(txt); //game over ou parabéns lcd2.setCursor(0,1); lcd2.print("Pontos: "); lcd2.setCursor(10,1); lcd2.print(pontos); lcd.setCursor(0,0); lcd.print(" ");//lcd.clear(); lcd.setCursor(0,1); lcd.print(" Pressione tiro "); if((move == Joystick::Move::PRESS) && enter_flag){ enter_flag = 0x00; sub_menu = !sub_menu; vtela=0; tela(vtela); } } } void readButts(){ Joystick::Move move = joystick->singleRead(); if(!(move == Joystick::Move::PRESS)) enter_flag = 0x01; if(move == Joystick::Move::LEFT){ list_menuDw(); menu_number += 1; if(menu_number > 3) menu_number = 1; } if((move == Joystick::Move::PRESS) && enter_flag){ enter_flag = 0x00; sub_menu = !sub_menu; menu_select(); } } //fim readButts void list_menuDw(){ for(int i=2; i>-1; i--){ index = i-1; line_bk[i] = line[i]; if(index < 0) line[i] = line_bk[i+2]; else line[i] = line[i-1]; } } //fim list_menu void menu_select(){ lcd2.clear(); switch(menu_number){ case 1: reset(); break; case 2: lcd2.setCursor(1,0); lcd2.print("2-Instrucoes"); lcd2.setCursor(0,1); lcd2.print(" 2 "); break; case 3: lcd2.setCursor(1,0); lcd2.print("3-Sair"); lcd2.setCursor(0,1); lcd2.print(" 3 "); break; } //fim switch } //fim menu_select
Raw Text
-
Backpacker Nata Ocean Opens Her Legs For BBC Roommate - HORNY HOSTEL
13 min ago
-
Lesbian Prison Guard Has Anal Threesome With Inmates
43 min ago
-
Jodi Taylor Gets Ass Pounded By Mike Adriano's Big Hard Cock
1 hour ago
-
Happy birthday! I'll let you fuck me, but don't cum inside! - AdaKham
1 hour ago
-
My sexy stepsister invite me for great fuck
2 hours ago
-
i n c e s t
2 hours ago
-
PTHC
2 hours ago
-
CPLOLI
2 hours ago
-
C..P V.I.D..E.O.S
2 hours ago
-
y0ung parad1se
2 hours ago