estoy con las SDL ya que no tengo mucha experiencia
tengo un juego buscaminas no esta completamente terminado
weno mi problema es en la funcion destapar hice dos bucles para que recorra el tablero puse pollevent detecte evento si toque una tecla del mouse hice un if que verifique si la celda es correcta y se presiono la tecla del mouse izquierdo imprima por pantalla la celda weno solo
funciona mouse en la primera celda 0,0 si presiono en las demas no anda osea no mestra la img pense que el problema esta en la validacion de la posicicion de cada casillero pero no se yo la veo correcta luego pense en que poll va almacenado cada evento y como devo hacer muchos clicks estoy consultado mal el evento ocurrido por eso solo anda mouse en la primera celda, si cambio la posicion inicial del for que empiese de 4 por ejemplo el mouse funciona pero solo en la coordenada x4 y 4
que puede ser?solo anda mouse en una celda
struct Tcasilla {
int nmina;
int status;
};
Tcasilla matriz[10][10];
tamaño imagen celda 15
Código:
funcion muesta la imagen de cada celda t=0 while (t!=1) { t=buscaminas.destapar(cronometro,celda,monitor,evento); }
Código:
codigo donde esta todo el problema que tengovoid CBuscaminas::DibujaCasilla(ClsSprite &celda,ClsMonitor &monitor,int i,int j) { if(matriz[i][j].status==1) { celda.cambiarElemento(matriz[i][j].nmina); celda.copiarEn(i*15,j*15+35,monitor.ptr()); } else if(matriz[i][j].status==2) { celda.cambiarElemento(10); celda.copiarEn(i*15,j*15+35,monitor.ptr()); } }
Código:
Para que entiendan mejor int CBuscaminas::destapar(ClsTimer &cronometro,ClsSprite &celda,ClsMonitor &monitor,ClsEvento &evento) { int h,z,estado; for(int i=0;i<8;i++) { for(int j=0;j<8;j++) { // SDL_WarpMouse(i*15,j*15+35); //pausa(); if(evento.huboEvento()) { if(evento.tipo()==MOUSE_PRESIONADO) { h=evento.mouseX(); z=evento.mouseY(); if(h>(i*15) && h<((i*15)+15) && z>((j*15)+35) && z<((j*15)+50) && evento.boton()==MOUSE_BOTON_IZQUIERDO) { matriz[i][j].status=1; if(matriz[i][j].nmina==0) { AbrirCasillas(celda,monitor,i,j); } if(matriz[i][j].nmina==9) { estado=1; } DibujaCasilla(celda,monitor,i,j); }//if valida si esta en la celda correcta y aprete el boton izquierdo del mouse }if valida si se presiono una tecla del mouse }if valida si ocurrio un evento }//for }//for monitor.refrescar(); return estado; }
Traduccion todas las funciones de SDL fueron guardadas en clases con funciones para que sea mas facil usar segun el Sensei
Funcion CambiarElemento
unsigned int ClsSprite::cambiarElemento(int elemento)
{
if (elemento >= imgTotal) return 702;
elementoActual = elemento;
return 0;
}
Funcion copiarEn
void ClsSprite::copiarEn(unsigned int X,
unsigned int Y,
SDL_Surface* sup
)
{
unsigned int ancho=sprite[elementoActual].imagen->w;
unsigned int alto=sprite[elementoActual].imagen->h;
SDL_Rect area = {X,Y,ancho,alto};
x=X;
y=Y;
SDL_BlitSurface(sprite[elementoActual].imagen, NULL, sup, &area);
}
Funcion huboEvento
bool ClsEvento::huboEvento()
{
if (SDL_PollEvent(&evento))
{
return true;
}
return false;
}
Funcion tipo
Uint8 ClsEvento::tipo()
{
return evento.type;
}
Funcion mouseX
Uint16 ClsEvento::mouseX()
{
return evento.button.x;
}
Funcion mouseY
Uint16 ClsEvento::mouseY()
{
return evento.button.y;
}
Funcion boton
Uint8 ClsEvento::boton()
{
return evento.button.button;
}
Funcion refrescar
void ClsMonitor::refrescar(){SDL_Flip(imagen);}