PDA

Ver la Versión Completa : Llevar Puntuación en los juegos


yuyidt
26-10-2016, 17:31:54
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
...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,

por cada respuesta buena se sumaria 5 puntos por ejemplo

Entonces debes almacenar en una tabla (o matriz):


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
Ok, muchas gracias. Voy a intentarlo para ver como me va y le cuento.

Snaked
23-11-2016, 20:45:41
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 ....

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

#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(TComponent* Owner)
: 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 = puntuacion; Label1->Refresh();
}
//---------------------------------------------------------------------------



Unit2.cpp
//---------------------------------------------------------------------------

#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(TComponent* Owner)
: 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
#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(TComponent* Owner)
: 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/videojuego_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

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(&puntuacion, sizeof(puntuacion), 1, stream); /* 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

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(puntuacion, sizeof(puntuacion), 1, stream); /* lee la estructura del archivo */
fclose(stream); /* cierra el archivo */