Bueno pues eso :Algun ejemplo o source de un juego de billar
es que quiero empezar y hacer un juego de billar ya que no he visto ni uno solo para la gp32
Bueno pues eso :Algun ejemplo o source de un juego de billar
es que quiero empezar y hacer un juego de billar ya que no he visto ni uno solo para la gp32
Venga una ayudita para estas navidades ponerme e intentar hacer un juego de billares...
que pasa nadie me ayuda? Nadie sabe?
lo siento, yo tengo ni P. idea, lo único que se, esque que yo sepa, no hay ningun juego de billar para la GP, y eso que me encantan...
Seria genial que hicieras uno
Enga chicos, ayudadle si podeis!
-Vegeta-
Visca València!!!!!!!
pues si,juegos de billares no hay ninguno en la gp32,salvando los juegos para emuladores como el fgen, asi que seria una sorprendente noticia que hubiese un juego de este tipo para la gp32...,animo con el proyecto...
Te he respondido la duda q posteaste en mi foro .
Yo te animo 100% y no creo que sea demasiado difícil, por que supongo que lo único importante seria el algoritmo de rebote de las bolas, el resto ya seria pan comido.
Supongo que viendo el source de algún juego en el que algún elemento tenga que rebotar (Como el del mini golf, pero no se si es libre) y modificándolo un poco ya tendrías un 50% (vamos, ingeniería inversa, por así decirlo)
Un saludo
Bueno ya Netrix me dejo el código, es de Div2 lo dejo por aqui para si alguien quiere hacer el juego...
Yo empezare en navidades ...
NO se nada de Fénix haber si me sale esto....
//-----------------------------------------------
//Program:
//Author:
//Team:
//-----------------------------------------------
//---------------------------------------------
//TITULO: TOTAL BILLIARDS
//AUTOR: DANIEL NAVARRO
//FECHA: 1/15/97
//--------------------------------------------
Program spanish_billar;
Begin
Const
radio_bola=14; // Radio de la bola
x_reg_mesa=62-radio_bola; // Region de la mesa
y_reg_mesa=104-radio_bola;
ancho_reg_mesa=580-62+radio_bola*2; // Region de la ventana
alto_reg_mesa=375-104+radio_bola*2;
pos_toque_x=604; // Posicion de toque en efecto
pos_toque_y=452;
Global
puntuacion1; // Numero de carambolas con la bola blanca
puntuacion2; // Numero de carambolas con la bola amarilla
blanco; // Identificadores de las bolas
amarillo;
rojo;
ultimo; // Controla la ultima colision
quien; // Identificador de la bola que colisiona
turno; // Controla turno de los jugadores
sonido0; // Identificadores de sonido
sonido1;
vtotal0; // Velocidad total de la bola blanca
vtotal1; // Velocidad total de la bola amarilla
modos[]="Apuntar","Efecto","Tiro";
txt_puntuacion[]="7 Puntos","21 Puntos","40 Puntos";
puntuacion=0; // modos[] y txt_puntuacion[] texto que cambian
puntuaciones[]=7,21,40;
txt_modo; // Identificador para txt_puntuacion[]
modo; // Identificador de modo
id_efectos; // Identificador de efectos
efecto_vert; // Efecto vertical
efecto_horiz; // Efecto horizontal
choque_contraria=0; // Comprueba el choque con la bola contraria
choque_roja=0; // Comprueba el choque con la bola roja
Local
velocidad=0; // Velocidad de bola
avelocidad=0; // Velocidad acumulada
ang=0; // Direccion
x_resol; // Coordenadas * 100
y_resol;
incr_x; // X incremento
incr_y; // Y incremento
Private
ngulo2=0; // Movimiento de la bola
inc_ ngulo2=0;
opci¢n=0; // Opci¢n del menu
opciones[2]; // Identificador de texto
fin_juego=0; // Bandera. 1=Fin ded juego
ultima_x; // Ultimas posiciones del rat¢n
ultima_y;
Begin
set_mode(m640x480);
set_fps(30,0);
load_fpg("billar\billar.fpg"); // Carga graficos
load_fpg("billar\b_menu.fpg");
load_fnt("billar\billar.fnt"); // Carga letras
load_fnt("billar\numeros.fnt");
load_fnt("billar\titulo.fnt");
load_fnt("billar\menu.fnt");
sonido0=load_pcm("billar\billar0.pcm",0); // Carga sonidos
sonido1=load_pcm("billar\banda.pcm",0);
// Crea una ventana
define_region(1,x_reg_mesa,y_reg_mesa,ancho_reg_me sa,alto_reg_mesa);
Loop
// Carga la paleta para que los gr ficos salgan bien
load_pal("billar\b_menu.fpg");
put_screen(1,1); // Pone la pantalla de fondo
// Imprime mensajes
write(3,320,4,1,"TOTAL BILLIARD");
opciones[0]=write(4,400,320,0,"Empezar");
opciones[1]=write(4,400,354,0,txt_puntuacion[puntuacion]);
opciones[2]=write(4,400,388,0,"Salir al DOS");
write(4,320,480,7,"Daniel Navarro DIV Games Studio");
// Selecciona el gr fico del taco para el cursor
file=1;
graph=2;
// Renicia las variables del cursor
y=342; incr_y=0; ngulo2=0;
opci¢n=0;
fade_on(); // Enciende la pantalla
Repeat // Menu
ultima_y=mouse.y; // Guarda la posici¢n del rat¢n para mirar si hay cambio
x=17+get_distx(ang,16);
If ((ang+=pi/8)>pi)
ang-=2*pi;
End
// Comprueba si se ha elegido una opci¢n
If (opci¢n<>0 AND ang<pi/15 AND ang>-pi/15)
incr_x=400;
// Repite hasta que desaparezca el texto
Repeat
move_text(opciones[opci¢n-1],incr_x+=16,incr_y);
Frame;
Until (incr_x>640) // Cambia texto
// Se ha elegido la opcion de cambiar tipo de juego
If (opci¢n==2)
delete_text(opciones[1]);
puntuacion=++puntuacion%3;
opciones[1]=write(4,incr_x=640,incr_y,0,txt_puntuacion[puntuacion]);
Repeat
move_text(opciones[1],incr_x-=16,incr_y);
Frame;
Until (incr_x==400)
opci¢n=0;
incr_y=0;
Else
opci¢n-=4;
End
End
If (incr_y==0) // Cuando el palo este sobre una opci¢n
If (key(_enter) OR mouse.left OR
key(_control) OR key(_space)) // Selecciona esa opci¢n
incr_y=y-22;
opci¢n=(y-342)/34+1;
Else
If ((key(_down) OR mouse.y>ultima_y) AND y<410) // Cambia a otra opci¢n
incr_y=y+17;
ngulo2=pi/2;
inc_ ngulo2=-pi/8;
End
If ((key(_up) OR mouse.y<ultima_y) AND y>342) // Cambia a otra opci¢n
incr_y=y-17;
ngulo2=-pi/2;
inc_ ngulo2=pi/8;
End
End
End
If (inc_ ngulo2<>0) // Detiene el incremento vertical
ngulo2+=inc_ ngulo2;
y=incr_y+get_disty( ngulo2,17);
If (inc_ ngulo2<0)
If ( ngulo2<-pi/2)
y=incr_y+17;
incr_y=0;
inc_ ngulo2=0;
End
Else
If ( ngulo2>pi/2)
y=incr_y-17;
incr_y=0;
inc_ ngulo2=0;
End
End
End
// comprueba la pulsacion de la tecla escape
If (key(_esc))
opci¢n=-1;
End
Frame;
Until (opci¢n<0)
// Borra todo y apaga la pantalla
fade_off();
clear_screen();
delete_text(all_text);
graph=0;
Frame;
If (opci¢n==-1) // Sale del programa
exit("Gracias por jugar!!!",0);
Frame;
End
load_pal("billar\billar.fpg"); // Carga la paleta de colores
// Imprime los textos necesarios
write(1,12,6,0,"Jugador 1");
write(1,628,6,2,"Jugador 2");
write_int(2,115,0,0,&puntuacion1);
write_int(2,525,0,2,&puntuacion2);
// Pone los gr ficos de la mesa y la bola de efectos
put(0,1,320,240);
put(0,8,pos_toque_x,pos_toque_y);
// Crea el proceso que maneja los efectos
id_efectos=efecto();
// Escribe el texto del turno
write(1,12,428,0,"Jugador");
write_int(1,98,428,0,&turno);
fade_on();
// Crea las bolas
blanco=bola(3,320,240);
amarillo=bola(4,128,240-48);
rojo=bola(5,128,240+48);
// Valores iniciales
fin_juego=0;
choque_contraria=0;
choque_roja=0;
puntuacion1=0;
puntuacion2=0;
ultimo=0;
quien=0;
turno=2;
Repeat // Bucle principal
// Comprueba que este parado todo y que no haya palo, es decir, el fin de la tirada
If (blanco.velocidad==0 AND amarillo.velocidad==0 AND rojo.velocidad==0 AND NOT get_id(Type palo))
// Si no ha chocado con las dos bolas a la vez,
// es que no ha sido una carambola
If (NOT (choque_contraria AND choque_roja))
// Cambia de turno
If (turno==1)
turno=2;
Else
turno=1;
End
Else
// Carambola conseguida
If (turno) // Mira quien jugaba en ese turno
// Mira los puntos obtenidos hasta ahora
If (++puntuacion1==puntuaciones[puntuacion])
x=800;
quien=write(1,x,240,4,"Jugador uno gana");
From x=800 To 319 Step -8;
move_text(quien,x,240);
Frame;
End
From x=0 To 29;
Frame;
End
fin_juego=1;
End
Else
// Comprueba y hace lo mismo que antes pero para el otro jugador
If (++puntuacion2==puntuaciones[puntuacion])
x=800;
quien=write(1,x,240,4,"Jugador dos gana");
From x=800 To 320 Step -8;
move_text(quien,x,240);
Frame;
End
From x=0 To 29;
Frame;
End
fin_juego=1;
End
End
End
// Comprueba si no ha acabado
If (NOT fin_juego)
// Pone el palo dependiendo del turno al lado de la bola apropiada
If (turno)
palo(blanco);
Else
palo(amarillo);
End
choque_contraria=0;
choque_roja=0;
End
End
// Si se pulsa la tecla escape sale del juego
If (key(_esc))
fin_juego++;
End
Frame;
Until (fin_juego)
fade_off();
signal(id,s_kill_tree);
signal(id,s_wakeup);
clear_screen();
delete_text(all_text);
Frame;
End
End
//------------------------------------------------------------------------------
// Proceso bola
// Maneja la bola
//------------------------------------------------------------------------------
Process bola(graph,x,y);
Private
id_colisiones; // Identificador de colisiones
dir_final; // Direccion despues de la colision
veloc_final_x; // Velocidad final despues de la colision
veloc_final_y;
longitud; // Longitud a un punto
ultima_pos_x; // Ultima posicion
ultima_pos_y;
Begin
sombra(6); // Pone la sombra de la bola
x_resol=x*100; // Coge las coordenadas multiplicadas por 100
y_resol=y*100;
Loop
avelocidad+=velocidad;
// Hasta que pare
While (avelocidad>100)
avelocidad-=100; // A cada paso decrementa la velocidad
ultima_pos_x=x_resol; // Guarda posicion
ultima_pos_y=y_resol;
// Mueve la bola
incr_x=get_distx(ang,100);
x_resol+=incr_x;
incr_y=get_disty(ang,100);
y_resol+=incr_y;
// Comprueba el rebote con las bandas de manera vertical
If ((y_resol<=10400 AND incr_y<0) OR (y_resol>=37400 AND incr_y>0))
velocidad=velocidad*7/10; // Reduce la velocidad
sound(sonido1,80*velocidad/4000,100); // Hace un sonido de rebote
// Cambia el ngulo para que rebote
ang=fget_angle(x,y,x+incr_x,y-incr_y)+efecto_horiz*(pi/96);
// Quita cualquier efecto que existiera
efecto_vert=80;
efecto_horiz=0;
End
// Comprueba el rebote con las bandas de manera horizontal
If ((x_resol<=6200 AND incr_x<0) OR (x_resol>=57900 AND incr_x>0))
velocidad=velocidad*7/10;
sound(sonido1,30+50*velocidad/5000,100);
ang=fget_angle(x,y,x-incr_x,y+incr_y)+efecto_horiz*(pi/96);
efecto_vert=80;
efecto_horiz=0;
End
// Carga las coordenadas reales del gr fico con las temporales
x=x_resol/100;
y=y_resol/100;
// Comprueba si ha chocado con una bola
id_colisiones=collision(Type bola);
If (id_colisiones)
// Mira si esta colision no esta mirada y no es con esta bola
If (ultimo<>id_colisiones+id OR quien<>id)
// Guarda los identificadores para proximas comprobaciones
quien=id;
ultimo=id_colisiones+id;
// Comprueba si ha chocado la bola blanca con la amarilla
If (ultimo==blanco+amarillo)
choque_contraria=true;
End
// Mira que bola tiene el turno
If (turno)
// Y comprueba si choca con la roja
If (id_colisiones+id==blanco+rojo)
choque_roja=true;
End
Else
If (id_colisiones+id==amarillo+rojo)
choque_roja=true;
End
End
sound(sonido0,512,256); // Sonido de colision
avelocidad+=100;
// Las bolas rebotan
// Primero coge los incrementos horizontal y vertical de una bola
incr_x=get_distx(ang,velocidad);
incr_y=get_disty(ang,velocidad);
// Y los mismo incrementos de la otra
id_colisiones.incr_x=get_distx(id_colisiones.ang,i d_colisiones.velocidad);
id_colisiones.incr_y=get_disty(id_colisiones.ang,i d_colisiones.velocidad);
// Suma la velocidades, que es lo mismo que la fuerza total
vtotal0=velocidad+id_colisiones.velocidad;
// Halla el angulo que hay entre las dos bolas que chocan
dir_final=get_angle(id_colisiones)+efecto_horiz*(p i/96);
// Suma los incrementos sacando dos que es igual a la velocidades
veloc_final_x=incr_x+id_colisiones.incr_x;
veloc_final_y=incr_y+id_colisiones.incr_y;
// Halla la longitud del vector entre las dos bolas,
// que es proporcional a la suma de las velocidades
longitud=fget_dist(x,y,x+veloc_final_x,y+veloc_fin al_y)*efecto_vert/100;
// Borra los efectos una vez que han colisionado
efecto_vert=80;
efecto_horiz=0;
// A la bola que choca se le resta el vector
// total del choque
incr_x-=get_distx(dir_final,longitud);
incr_y-=get_disty(dir_final,longitud);
// Y se hallan los nuevos valores para dicha bola
ang=fget_angle(x,y,x+incr_x,y+incr_y);
velocidad=fget_dist(x,y,x+incr_x,y+incr_y);
// A la bola que recibe el choque se le suma
// el vector total que ha salido del choque
id_colisiones.incr_x+=get_distx(dir_final,longitud );
id_colisiones.incr_y+=get_disty(dir_final,longitud );
// Y se actualizan sus valores de ngulo y velocidad
id_colisiones.ang=fget_angle(x,y,x+id_colisiones.i ncr_x,y+id_colisiones.incr_y);
id_colisiones.velocidad=fget_dist(x,y,x+id_colisio nes.incr_x,y+id_colisiones.incr_y);
// Por ultimo se hace una media con la fuerza inicial
// para que en vez de ser proporcional, sea identica
vtotal1=velocidad+id_colisiones.velocidad;
velocidad=vtotal0*velocidad/vtotal1;
id_colisiones.velocidad=vtotal0*id_colisiones.velo cidad/vtotal1;
avelocidad=velocidad;
id_colisiones.avelocidad=id_colisiones.velocidad;
End
x_resol=ultima_pos_x; // Restaura posicion
y_resol=ultima_pos_y;
Else
// Si el identificador es el de la propia bola
// borra cualquier rese¤a del choque
If (quien==id)
ultimo=0;
End
End
Frame(0); // Refresca pantalla
End
x=x_resol/100;
y=y_resol/100;
Frame;
// Parando las bolas
If (velocidad>10)
velocidad-=10;
If (efecto_vert>80)
efecto_vert-=2;
velocidad+=(efecto_vert-80)/10;
End
If (efecto_vert<80)
efecto_vert++;
velocidad-=(80-efecto_vert)/2;
End
Else
// Se ha parado completamente
velocidad=0;
End
End
End
//------------------------------------------------------------------------------
// Proceso sombra
// Muestra las sombras de la bola y el palo
//------------------------------------------------------------------------------
Process sombra(graph);
Begin
region=1; // Elige la regi¢n
z=1; // Lo pone por debajo de las bolas
flags=4; // Lo pone transparente
priority=-1; // Hace que se ejecute despues de la bola
Loop
angle=father.angle; // Coge el angulo del padre
x=father.x+8; // Sigue al proceso que lo llamo
y=father.y+8; // el palo o la bola
Frame;
End
End
//------------------------------------------------------------------------------
// Proceso palo
// Controla el palo
//------------------------------------------------------------------------------
Process palo(idbola);
Private
ultima_pos_rat¢n; // Ultima posicion del raton
real_x_rat¢n; // Coordenadas reales del raton
real_y_rat¢n;
fuerza; // Fuerza de lanzamiento
distancia; // Para coger la distancia
ngulo_res; // Para coger el angulo
Begin
sombra(7); // Crea la sombra del palo
// Imprime el modo de juego
txt_modo=write(1,114,428,0,modos[modo=0]);
mouse.x=320; // Centra el raton
mouse.y=240;
graph=2; // Elige el gr fico del palo
ultima_pos_rat¢n=mouse.x;
// Coge las coordenadas respecto a la bola que se¤ala
x=idbola.x;
y=idbola.y;
angle=-pi/2; // Angulo inicial
// Posicion inicial de los efectos
id_efectos.x=pos_toque_x;
id_efectos.y=pos_toque_y;
Loop
// Esta en el modo de apuntar con el taco
If (modo==0)
// Actualiza la posici¢n del taco con la del rat¢n
angle-=(ultima_pos_rat¢n-mouse.x)*(pi/256);
ultima_pos_rat¢n=mouse.x;
// Hace que el raton este entre 512 y 512
If (mouse.x<128)
mouse.x+=320;
ultima_pos_rat¢n=mouse.x;
End
If (mouse.x>512)
mouse.x-=320;
ultima_pos_rat¢n=mouse.x;
End
// Comprueba si se ha pulsado el bot¢n del rat¢n
If (mouse.left)
// Borra el texto antiguo y pone el nuevo
delete_text(txt_modo);
txt_modo=write(1,114,428,0,modos[1]);
// Centra el rat¢n
mouse.x=320;
mouse.y=240;
// Espera a que se suelte el bot¢n del rat¢n
Repeat
Frame;
Until (NOT mouse.left)
// Cambia el modo de tratar el taco
modo=1;
// Coge las coordenadas del rat¢n y las guarda en variables propias
real_x_rat¢n=mouse.x;
real_y_rat¢n=mouse.y;
Else
// Si no se pulsa el rat¢n crea el visor
visor(idbola,angle+pi);
End
End
// Modo en el que se selecciona efecto
If (modo==1)
// Actualiza el afecto dependiendo de las coordenadas del rat¢n
id_efectos.x=pos_toque_x+(mouse.x-real_x_rat¢n)/3;
id_efectos.y=pos_toque_y+(mouse.y-real_y_rat¢n)/3;
// Coge la distancia del centro de la bola a la posici¢n del efecto
distancia=fget_dist(pos_toque_x,pos_toque_y,id_efe ctos.x,id_efectos.y);
// Si la longitud es mayor que 22 la trunca para hacerlo redondo
If (distancia>22)
ngulo_res=fget_angle(pos_toque_x,pos_toque_y,id_ef ectos.x,id_efectos.y);
id_efectos.x=pos_toque_x+get_distx( ngulo_res,22);
id_efectos.y=pos_toque_y+get_disty( ngulo_res,22);
End
// Mira si se pulsa el bot¢n del rat¢n
If (mouse.left)
// Borra el texto antiguo
delete_text(txt_modo);
// Pone el texto nuevo
txt_modo=write(1,114,428,0,modos[2]);
// Centra el rat¢n
mouse.x=320;
mouse.y=240;
// Espera a que se suelte el bot¢n del rat¢n
Repeat
Frame;
Until (NOT mouse.left)
// Actualiza las variables del proceso
ultima_pos_rat¢n=mouse.y;
real_x_rat¢n=x;
real_y_rat¢n=y;
// Cambia el modo de acci¢n del taco
modo=2;
// Guarda los efectos elegidos en sus variables
efecto_vert=id_efectos.y-pos_toque_y;
If (efecto_vert<0)
efecto_vert=80-28*-efecto_vert/22;
Else
efecto_vert=80+efecto_vert*120/22;
End
efecto_horiz=id_efectos.x-pos_toque_x;
End
End
// Modo de taco de seleccion de fuerza
If (modo==2)
// Coloca el taco en relaci¢n a las coordenadas del rat¢n
x=real_x_rat¢n+get_distx(angle,mouse.y-240);
y=real_y_rat¢n+get_disty(angle,mouse.y-240);
// Si se pasa de un limite significa que se ha hecho el tiro
If (mouse.y<232)
// Borra el texto de modo
delete_text(txt_modo);
// Hace un sonido
sound(sonido1,100,128);
// Halla la fuerza, dependiendo de la £ltima posici¢n del rat¢n
fuerza=(ultima_pos_rat¢n-mouse.y)*100;
// Comprueba si la fuerza se pasa de los limites permitidos
If (fuerza<200)
fuerza=200;
End
If (fuerza>8000)
fuerza=8000;
End
// Guarda la fuerza como velocidad de la bola
idbola.velocidad=fuerza;
// Y pone el ngulo apropiado a la bola
idbola.ang=angle+pi;
// Borra todo y se prepara para salir del proceso
ultimo=0;
signal(id,s_kill);
signal(son,s_kill);
End
// Comprueba si se pulsa el bot¢n del rat¢n
If (mouse.left)
// Borra el texto antiguo y pone el nuevo
delete_text(txt_modo);
txt_modo=write(1,112,428,0,modos[0]);
// Actualiza la posici¢n del taco al lado de la bola
x=idbola.x;
y=idbola.y;
// Centra el rat¢n
mouse.x=320;
mouse.y=240;
// Espera hasta que se suelte el bot¢n del rat¢n
Repeat
Frame;
Until (NOT mouse.left)
// Cambia de modo
ultima_pos_rat¢n=mouse.x;
modo=0;
Else
// Actualiza la £ltima posici¢n del rat¢n
ultima_pos_rat¢n=mouse.y;
End
End
Frame;
End
End
//------------------------------------------------------------------------------
// Proceso visor
// Muestra donde ira la bola
//------------------------------------------------------------------------------
Process visor(idbola,ang);
Private
impacto=0; // Bandera. 1=impacto 0=no impacto
id_bola2; // Identificador de la bola
Begin
z=2;
// Inicialmente coge el gr fico de la bola para comprobar colisiones
graph=idbola.graph;
// Tambi‚n coge las coordenadas de la bola que es lanzada
x_resol=idbola.x_resol;
y_resol=idbola.y_resol;
Repeat
// Mueve el visor un punto en el ngulo deseado
incr_x=get_distx(ang,100);
x_resol+=incr_x;
incr_y=get_disty(ang,100);
y_resol+=incr_y;
// La coloca en la nueva posici¢n
x=x_resol/100;
y=y_resol/100;
// Testea limites de la mesa
If ((y_resol<=10400 AND incr_y<0) OR (y_resol>=37400 AND incr_y>0) OR (x_resol<=6200 AND incr_x<0) OR (x_resol>=57900 AND incr_x>0))
impacto=1;
End
// Va comprobando si colisiona con cualquiera otra bola
id_bola2=collision(Type bola);
While (id_bola2)
If (id_bola2<>idbola)
impacto=1;
End
id_bola2=collision(Type bola);
End
Frame(0); // Hace que no aparezca en pantalla
Until (impacto) // Busca la posicion del visor hasta que colisiones
graph=9; // Selecciona ya el gr fico propio del visor
Frame; // Ahora ya puede mostrar el gr fico del visor
End
//------------------------------------------------------------------------------
// Proceso efecto
// Muestra la posicion del toque
//------------------------------------------------------------------------------
Process efecto();
Begin
// Coge las coordenadas de la posici¢n de toque
x=pos_toque_x;
y=pos_toque_y;
graph=6; // Selecciona el gr fico
size=29; // Y cambia el tama¤o porque es muy grande
Loop
Frame;
End
End
yo tengo el div2, libro y cd, me lo compre hace 2 dias, si alguien me explica a compilarlo y luego a pasarlo a fenix, yo lo ago, eso si, seria de chopi
PONGO SOLO ESTOS POR SUS CANCIONES
Bart si quieres crealo, yo es que no se de fenix ni de programación a lo mejor Netrix o alguien sabe que te heche una mano ....
Lo dicho yo me pondria para las navidades
Marcadores