[C con Clase] como se hace para ... ¿desea reiniciar el juego ?

Steven Davidson steven en conclase.net
Dom Ene 14 16:24:15 CET 2007


Hola Francesc,

El pasado 2007-01-13 22:45:23, Francesc Cabecerans escribió:
 
FC> he comentado este tema con otro colega y propone basicamente lo mismo que 
FC> tu. O sea preguntar al usuario y si este decide serguir, entonces 
FC> INICIALIZAR TODAS LAS VARIABLES DEL JUEGO de nuevo, parece que no hace falta 
FC> el mensaje WM_INIDIALOG, sencillamente en cunto el timer llega al final del 
FC> tiempo si la respuesta es seguir jugando basta con poner las variables 
FC> "importantes" a su valor inicial

Es cierto que puedes reasignar aquellas variables importantes en ese momento, pero como desconozco por completo los detalles de tu aplicación, no te podía dar esa opción. En lo general, 'WM_INITDIALOG' existe precisamente para eso: "iniciar el diálogo". Si usas variables "normales", entonces adelante. Lo más seguro es que estés escribiendo por partida doble las mismas sentencias: la primera vez que entras al cuadro de diálogo y luego las posteriores veces cuando el usuario decide continuar. Por esta razón, sugerí volver a 'WM_INITDIALOG'. Además, si luego tienes que agregar más variables a tu aplicación, tienes que estar pendiente de darles valores iniciales en dos lugares: al comienzo del diálogo y en el "reinicio". No sugiero crear este tipo de dependencias, ya que casi siempre hay problemas si se hacen cambios "pequeños".

Otra solución es crear tus propios mensajes y así asegurar que todo va al mismo lugar. Por ejemplo,

#define WM_REINICIO (WM_APP+1)
...

case WM_INITDIALOG:
  SendMessage( hdlg, WM_REINICIO, 0, 0 );
  ...

  case IDT_TIMER1:
    SendMessage( hdlg, WM_REINICIO, 0, 0 );  // Quizá 'PostMessage()' sea mejor
    ...

case WM_REINICIO:
  // Asignar valores iniciales a las variable importantes
  ...


En fin, todo esto no es más que algunas sugerencias. Si lo que has implementado te funciona bien, puedes hacer caso omiso de lo que he dicho.


Espero que esto te sea de ayuda.

Steven


Más información sobre la lista de distribución Cconclase