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:
saludos!
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?
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
Post a Comment