Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Llevar Puntuación en los juegos (https://www.clubdelphi.com/foros/showthread.php?t=91021)

yuyidt 26-10-2016 17:31:54

Llevar Puntuación en los juegos
 
Hola buenos días. Soy nueva en todo esto y necesito su ayuda por favor. Estoy haciendo un juego para la universidad, el cual lleva puntaje (lo estoy trabajando con label), por cada respuesta buena se sumaria 5 puntos por ejemplo. No sé como hacerlo. para el cambio de niveles uso formularios distintos porque el diseño cambia, entonces como hago para que ese puntaje funcione en todos los formularios y que al final cuando pierda (pantalla game over) me aparezca la cantidad de puntos alcanzados. Y si fuera posible que aparezca ese record cada vez que inicio el juego. Se aceptan recomendaciones. Agradezco su colaboración. Feliz día

Neftali [Germán.Estévez] 26-10-2016 18:38:30

Cita:

Empezado por yuyidt (Mensaje 510065)
...el cual lleva puntaje (lo estoy trabajando con label), por cada respuesta buena se sumaria 5 puntos por ejemplo. No sé como hacerlo. para el cambio de niveles uso formularios distintos porque el diseño cambia, entonces como hago para que ese puntaje funcione en todos los formularios y que al final cuando pierda (pantalla game over) me aparezca la cantidad de puntos alcanzados. Y si fuera posible que aparezca ese record cada vez que inicio el juego. Se aceptan recomendaciones. Agradezco su colaboración. Feliz día

Piensa en que una cosa es dónde muestras la información y otra dónde lo almacenas.
Piensa en un formulario como una pieza de tu programa.
Si tu puntuación se debe mantener durante la aparición de los diferentes formularios, no se puede almacenar en un Label de uno de ellos.

Tendrás que almacenarlo fuera, y desde cada uno acceder a ella (para mostrarla y para incrementarla si es necesario).

mamcx 26-10-2016 18:47:13

En estos casos es buenos que inviertas algo de tiempo en visualizar como se ve la informacion y como fluye, usando dibujos, diagramas, hojas de excel, etc.

Por ej,

Cita:

por cada respuesta buena se sumaria 5 puntos por ejemplo
Entonces debes almacenar en una tabla (o matriz):

Código SQL [-]
Nivel1 - Pregunta1 - Puntaje: 5
Nivel1 - Pregunta2 - Puntaje: 0
Nivel2 - Pregunta1 - Puntaje: 3

Y luego recorres esa estructura para obtener la suma.

Si necesitas guardar la informacion puedes usar una base de datos. No se si ya llegaste al tema del SQL. Puedes usar archivos tipo CSV (como hoja de excel) o puedes usar los TClientDataset.

yuyidt 31-10-2016 19:35:46

Gracias
 
Ok, muchas gracias. Voy a intentarlo para ver como me va y le cuento.

Snaked 23-11-2016 20:45:41

Opcion para puntuaciones con diferentes forms
 
hola yuyidt....te ofrezco la solucion pero en C++ Builder si no te importa

mira.... suponiendo que tengas el Form1 donde tienes la puntuacion, y Form2 y Form3 sean los niveles

en el Form1 .......ponemos los Use Units (includes) de los 3 Units
en el Form2 .......ponemos los Use Units (includes) de Unit2 y Unit1
en el Form3 .......ponemos los Use Units (includes) de Unit3 y Unit1

de esta forma nos aseguramos que todos tienen acceso a la variable extern int puntuacion ....

Código PHP:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int puntuacion 0;   //Declaramos esta variable AQUI visibilidad total


//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponentOwner)
    : 
TForm(Owner)
{

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  
puntuacion 0;
  
Label1->Caption puntuacion;  //boton poner a 0 la puntuacion

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 
Form2->ShowModal();        //mostramos el 1º nivel de juego (Form2)
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Form3->ShowModal();        //mostramos otro nivel de juego (Form3 y asi ...)
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
 
Label1->Caption =  puntuacionLabel1->Refresh();
}
//--------------------------------------------------------------------------- 



Unit2.cpp
Código PHP:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
extern int puntuacion;  // asi el programa sabra que hay una variable llamada puntuacion por ahi fuera
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponentOwner)
    : 
TForm(Owner)
{

}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
 
puntuacion puntuacion 5;  // sumamos 5 puntos en la variable puntuacion
  
Form1->Repaint();  //en el evento OnPaint del Form1 tenemos la actualizacion del Label de puntuaciones 
                             // asi que llamamos a Repaint() aqui para que se actualice
}
//--------------------------------------------------------------------------- 


Unit3.cpp
Código PHP:

#include "Unit3.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm3 *Form3;
extern int puntuacion;    // asi el programa sabra que hay una variable llamada puntuacion por ahi fuera
//---------------------------------------------------------------------------
__fastcall TForm3::TForm3(TComponentOwner)
    : 
TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Button1Click(TObject *Sender)
{
  
puntuacion puntuacion 10;  // sumamos 5 puntos en la variable puntuacion
  
Form1->Repaint();  //en el evento OnPaint del Form1 tenemos la actualizacion del Label de puntuaciones 
                             // asi que llamamos a Repaint() aqui para que se actualice
}
//--------------------------------------------------------------------------- 


Capturas:

http://www.qualinost.tk/descargas/punt1.jpg

http://www.qualinost.tk/descargas/punt2.jpg

http://www.qualinost.tk/descargas/punt3.jpg



aqui tienes los sources del proyecto:

http://www.qualinost.tk/descargas/vi...puntuacion.rar

Snaked 23-11-2016 21:19:21

para llevar el Record tienes que hacer uso de un fichero o algo ya que cuando sales del programa se borraria....para eso tienes primero que escribirlo algo asi

Código PHP:

    FILE *stream;
   if ((
stream fopen("Record_de_Puntos.$$$""w+")) == NULL/* abre el archivo Record_de_Puntos.$$$ */
   
{
      
ShowMessage("No he podido crear el fichero de las puntuaciones en el disco.");
      return;
   }

   
fwrite(&puntuacionsizeof(puntuacion), 1stream); /* escribe la estructura en disco */
   
fclose(stream); /* cierra el archivo */
   
ShowMessage("FileStream guardado con éxito en el disco: Archivo Record_de_Puntuaciones.$$$"); 

y para leer las puntuaciones

Código PHP:

FILE *stream;
   if ((
stream fopen("Record_de_Puntos.$$$""r")) == NULL/* abre el archivo Record_de_Puntos.$$$ */
   
{
      
ShowMessage("No he podido LEER el fichero de las puntuaciones.");
      return;
   }

   
fread(puntuacionsizeof(puntuacion), 1stream); /* lee la estructura del archivo */
   
fclose(stream); /* cierra el archivo */ 



La franja horaria es GMT +2. Ahora son las 07:40:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi