Juego de naves en C para Arduino con libreria TVOut.


les dejo un micro juego en c para arduino, utiliza la libreria tvout para poder usar la tv como salida visual  :?:
para jugar necesitas un "servo joystick" (motor dc común y corriente)  y un pulsador (en mi caso dos cables pelados).

y aqui el sketch:
code: [select]

#include <arduino.h>
#include <video_gen.h>
#include <tvout.h>
#include <fontall.h>

using namespace std;
tvout tv;
string estadojuego = "no-iniciado";
int x = 0;
int y = 0;
int xm = 0;
int ym = 0;
int tdisparo = 0;
long retardoia = 0;
long retardoia2 = 10;
long retardoia3 = 20;
long retardoia4 = 20;
long retardoia5 = 20;
bool disparado = false;
bool retardodesia = false;
bool col = false;
int vidas = 3;
int puntos = 0;

//ovnis prefabs

//ovni 1
int xo1 = random(10,80);
int yo1 = 0;
string oe = "vivo";

//ovni 2
int xo2 = random(10,80);
int yo2 = 0;
string o2e = "vivo";

//ovni 3
int xo3 = random(10,80);
int yo3 = 0;
string o3e = "vivo";

//ovni4
int xo4 = random(10,80);
int yo4 = 0;
string o4e = "vivo";

//ovni5
int xo5 = random(10,80);
int yo5 = 0;
string o5e = "vivo";


void setup() {
tv.begin(ntsc,105,105);
tv.select_font(font6x8);
x = 50;
y = 90;
pinmode(2,output);
digitalwrite(2,high);
pinmode(3,input);
pinmode(11,input);
pinmode(12,input);
estadojuego = "iniciado";
}

void loop() {
tv.clear_screen();
if (estadojuego == "game-over"){
  gameover();
}
if (estadojuego == "iniciado"){
tv.print(10,10,vidas);
tv.print(80,10,puntos);
teclado();
movmunicion();
dibujar_nave(x,y);
dibujar_ovni(xo1,yo1);
dibujar_ovni(xo2,yo2);
dibujar_ovni(xo3,yo3);
dibujar_ovni(xo4,yo4);
dibujar_ovni(xo5,yo5);

movovni1();
movovni2();
movovni3();
movovni4();
movovni5();
dibujarlimites();
controlador();
retardodesia = !retardodesia;

comprobarcolisiones(xm,1,ym,1,xo1,10,yo1,4);
if (col){
  disparado = false;
  resetovni1();
}
comprobarcolisiones(xm,1,ym,1,xo2,10,yo2,4);
if (col){
  disparado = false;
  resetovni2();
}
comprobarcolisiones(xm,1,ym,1,xo3,10,yo3,4);
if (col){
  disparado = false;
  resetovni3();
}
comprobarcolisiones(xm,1,ym,1,xo4,10,yo4,4);
if (col){
  disparado = false;
  resetovni4();
}
comprobarcolisiones(xm,1,ym,1,xo5,10,yo5,4);
if (col){
  disparado = false;
  resetovni5();
}



comprobarcolisiones(x,10,y,8,xo1,10,yo1,4);
if (col){
  resetovni1();
  vidas--;
  for(int i=400;i>1;i--){
    tone(5,i,10);
  }
}
comprobarcolisiones(x,10,y,8,xo2,10,yo2,4);
if (col){
  resetovni2();
    for(int i=400;i>1;i--){
    tone(5,i,10);
  }
  vidas--;
}
comprobarcolisiones(x,10,y,8,xo3,10,yo3,4);
if (col){
  resetovni3();
    for(int i=400;i>1;i--){
    tone(5,i,10);
  }
  vidas--;
}
comprobarcolisiones(x,10,y,8,xo4,10,yo4,4);
if (col){
  resetovni4();
    for(int i=400;i>1;i--){
    tone(5,i,10);
  }
  vidas--;
}
comprobarcolisiones(x,10,y,8,xo5,10,yo5,4);
if (col){
  resetovni5();
    for(int i=800;i>1;i--){
    tone(5,i,10);
  }
  vidas--;
}
} // estadojuego
delay(30);
}

void teclado(){
int  btndisp = digitalread(3);
  if (btndisp == high && disparado == false){
  disparar();
  }
  if (digitalread(11) == high && x < 85){
    x++;
  }
  if (digitalread(12) == high && x > 5){
    x--;
  }
}

void dibujar_nave(int x, int y){
tv.set_pixel(x + 4,y + 0,2);
tv.set_pixel(x + 5,y + 0,2);
tv.set_pixel(x + 4,y + 1,2);
tv.set_pixel(x + 5,y + 1,2);
tv.set_pixel(x + 2,y + 2,2);
tv.set_pixel(x + 3,y + 2,2);
tv.set_pixel(x + 4,y + 2,2);
tv.set_pixel(x + 5,y + 2,2);
tv.set_pixel(x + 6,y + 2,2);
tv.set_pixel(x + 7,y + 2,2);
tv.set_pixel(x + 0,y + 3,2);
tv.set_pixel(x + 1,y + 3,2);
tv.set_pixel(x + 2,y + 3,2);
tv.set_pixel(x + 3,y + 3,2);
tv.set_pixel(x + 4,y + 3,2);
tv.set_pixel(x + 5,y + 3,2);
tv.set_pixel(x + 6,y + 3,2);
tv.set_pixel(x + 7,y + 3,2);
tv.set_pixel(x + 8,y + 3,2);
tv.set_pixel(x + 9,y + 3,2);
tv.set_pixel(x + 3,y + 4,2);
tv.set_pixel(x + 4,y + 4,2);
tv.set_pixel(x + 5,y + 4,2);
tv.set_pixel(x + 6,y + 4,2);
tv.set_pixel(x + 4,y + 5,2);
tv.set_pixel(x + 5,y + 5,2);
tv.set_pixel(x + 3,y + 6,2);
tv.set_pixel(x + 4,y + 6,2);
tv.set_pixel(x + 5,y + 6,2);
tv.set_pixel(x + 6,y + 6,2);
tv.set_pixel(x + 2,y + 7,2);
tv.set_pixel(x + 3,y + 7,2);
tv.set_pixel(x + 4,y + 7,2);
tv.set_pixel(x + 5,y + 7,2);
tv.set_pixel(x + 6,y + 7,2);
tv.set_pixel(x + 7,y + 7,2);
}
void dibujar_ovni(int x, int y){
  tv.set_pixel(x + 4,y + 0,1);
  tv.set_pixel(x + 5,y + 0,1);
  tv.set_pixel(x + 3,y + 1,1);
  tv.set_pixel(x + 4,y + 1,1);
  tv.set_pixel(x + 5,y + 1,1);
  tv.set_pixel(x + 6,y + 1,1);
  tv.set_pixel(x + 0,y + 2,1);
  tv.set_pixel(x + 1,y + 2,1);
  tv.set_pixel(x + 2,y + 2,1);
  tv.set_pixel(x + 3,y + 2,1);
  tv.set_pixel(x + 4,y + 2,1);
  tv.set_pixel(x + 5,y + 2,1);
  tv.set_pixel(x + 6,y + 2,1);
  tv.set_pixel(x + 7,y + 2,1);
  tv.set_pixel(x + 8,y + 2,1);
  tv.set_pixel(x + 9,y + 2,1);
  tv.set_pixel(x + 4,y + 3,1);
  tv.set_pixel(x + 5,y + 3,1);
}
void dibujar_disparo(int x, int y){
  tv.set_pixel(x,y,2);
}

void dibujarlimites(){
for(int i=0;i<101;i++){
tv.set_pixel(i,0,1);
tv.set_pixel(0,i,1);
tv.set_pixel(100,i,1);
tv.set_pixel(i,100,1);
  }
}

void disparar(){
  if (disparado == false){
  disparado = true;
tone(5,880,500);
  xm = x + 4;
  ym = y - 3;
  dibujar_disparo(xm, ym);
  }
}

void movmunicion(){
  if (disparado){
  ym--; ym--; ym--;
  if (ym > 1){
  dibujar_disparo(xm,ym);
  } else{
    disparado = false;
  }
  }
  }

  void movovni1(){
    if (retardodesia){
      yo1++;
    }
    retardoia++;
    if (retardoia > 35){
  retardoia = 0;
    }
    if (xo1 < x && retardoia > 20){
    xo1++;
    }
    if (xo1 > x && retardoia > 20){
      xo1--;
    }
    if (yo1 > 99){
      estadojuego = "game-over";
    }
    if (xo1 > 85){
      xo1--;
    }
    if (xo1 < 10) {
      xo1++;
    }
  }

void movovni2(){
    if (retardodesia){
      yo2++;
    }
    retardoia2++;
    if (retardoia2 > 45){
  retardoia2 = 0;
    }
    if (xo2 < x && retardoia2 > 20){
    xo2++;
    }
    if (xo2 > x && retardoia2 > 20){
      xo2--;
    }
    if (yo2 > 99){
      estadojuego = "game-over";
    }
    if (xo2 > 85){
      xo2--;
    }
    if (xo2 < 10) {
      xo2++;
    }
  }

void movovni3(){
    
      yo3++;

    retardoia3++;
    if (retardoia3 > 35){
  retardoia3 = 0;
    }
    if (xo3 < x && retardoia3 > 10){
    xo3++;
    }
    if (xo3 > x && retardoia3 > 10){
      xo3--;
    }
    if (yo3 > 99){
      estadojuego = "game-over";
    }
    if (xo3 > 85){
      xo3--;
    }
    if (xo3 < 10) {
      xo3++;
    }
  }

  void movovni4(){
    
      yo4++;

    retardoia4++;
    if (retardoia4 > 25){
  retardoia4 = 0;
    }
    if (xo4 < x && retardoia4 > 15){
    xo4++;
    }
    if (xo4 > x && retardoia4 > 15){
      xo4--;
    }
    if (yo4 > 99){
      estadojuego = "game-over";
    }
    if (xo4 > 85){
      xo4--;
    }
    if (xo4 < 10) {
      xo4++;
    }
  }

  void movovni5(){
    if (retardodesia){
      yo5++;
    }
    retardoia5++;
    if (retardoia5 > 55){
  retardoia5 = 0;
    }
    if (xo5 < x && retardoia5 > 10){
    xo5++;
    }
    if (xo5 > x && retardoia5 > 10){
      xo5--;
    }
    if (yo5 > 99){
      estadojuego = "game-over";
    }
    if (xo5 > 85){
      xo5--;
    }
    if (xo5 < 10) {
      xo5++;
    }
  }

  
  void resetovni1(){
    puntos = puntos + random(1,10);
      tone(5,1,500);
      tone(5,999,150);
    yo1 = random(-10,-100);
    xo1 = random(-50,200);
  }





saludos!

y cual es la pregunta? estas en un foro de preguntas. si quieres dejar un tutorial ve documentación. 
la verdad que no veo en que contribuye tu aporte y disculpa por el comentario pero si por cada cosa que encontremos en la web vamos postear aqui, estaríamos releyendo todo, no te parece?


Arduino Forum > International > Español > Software (Moderators: surbyte, Hector_A) > Juego de naves en C para Arduino con libreria TVOut.


arduino

Comments

Popular posts from this blog

Error: ‘for’ loop initial declarations are only allowed in C99 or C11 mode - Raspberry Pi Forums

class MPU6050 has no member named begin

missing filename after '-o'