¿GuardarCargar variables a partir archivo externo?

Aprendi masomenos lo basico en c++, y me se mucho de otros lenguajes...
Como solo se usar perfectamente el cin y cout, y declarar variables estoy realizando un simulador algo así como de heroes y criaturas...
Y lo que tengo pensado es que, te manejas mediante ocmandos, es decir:
Ingresa 1 para ir al mercado
Pones 1 y te muestra algo así como:
Monedas: 200
Objetos:
Espada 50
Daga 30
Escudo 20
Y cosas así, entonces tu puedes ir comprando, luego ingresas "atras" y vuelves etc etc,
Y la cosa es cuando lo cierras, quisiera saber como seria una forma de guardar las variables, como, fuerza agilidad destreza y eso del héroe, en un archivo que al abrir de nuevo el programa puedas cargar y seguir jugando con tu héroe.
si no se entendio pidanme detalles =D

1 Respuesta

Respuesta
1
Pues hay un montón de formas de guardarlo en un archivo externo. Lo más fácil, si tienes en tu programa una estructura con esas variables del héroe. Puedes guardarlo en el fichero con "fwrite" y recuperarlo con "fread".
Tendrías que salvarlo al final de cada partida, y cargarlo al principio de cada partida.
Si tienes algo del programa pégalo y te digo cómo hacerlo.
Saludos cordiales
Kepa Ríos Alday
Profesor Programación en Academia Cartagena99 de Madrid
Mira, ya tengo el código hecho, es largo pero lo entenderás fácilmente...
A este punto me gustaría crear un archivo con la información de ese personaje creado, para luego poder cargar esa información cuando necesite cerrar el programa y volver a abrirlo. ( Idéntico a los juegos)..
He aquí el código:
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
// Variables del personaje
char Nombre[200];
char Titulo[200];
string name();
int Vida;
int Nivel;
int Experiencia;
int Golpe;
int Golpehechi;
int Monedas;
int Fuerza;
int Destreza;
int Inteligencia;
int Constitucion;
int Defensa;
int Mana;
//Variables de Inventario
char Ropa[200];
int Arma;
char Armainfo[200];
int Armadura;
int Amuleto;
char Amuletoinfo[200];
strcpy(Ropa, "Ropaje de Campesino");
strcpy(Armainfo, "Horca de Campesino");
strcpy(Amuletoinfo, "Amuleto de aprendiz");
// Variables Globales
int crear;
int punto;
char continuar[10];
int Inventario;
cout<<"1 Para crear su personaje"<<endl;
cin >> crear;
while( crear != 1)
{
cout << "Solo Puede crear su personaje" << endl;
cin>>crear;
}
cin.ignore();
int creacion();{
cout << "Ingrese el nombre de su personaje" << endl;
gets(Nombre);
cout << "Ingrese un Titulo para su personaje" <<endl;
cout << " Ej: '' El cazador Oscuro '', '' El Guerrero Temido '' , Etc... "<< endl;
gets(Titulo);
cout<<endl;
cout<<" Usted empezara con 100 monedas"<< endl;
Monedas = 100;
cout<<endl;
cout<<endl;
cout<<" Ahora tiene que asignar sus puntos de habilidad"<< endl;
cout<<endl;
cout<<"Ingrese ''continuar'' cuando este listo..."<<endl;
cin>>continuar;
system("cls");
cout<<"Sus puntos actuales son: "<<endl;
cout<<"Fuerza = 1"<<endl;
cout<<"Destreza = 1"<<endl;
cout<<"inteligencia = 1"<<endl;
cout<<"Constitucion = 1"<<endl;
Fuerza = 1;
Inteligencia = 1;
Constitucion =1;
Destreza = 1;
cout<<endl;
cout<<"Utilize 1 para asignar un punto a fuerza"<<endl;
cout<<"Utilize 2 para asignar un punto a destreza"<<endl;
cout<<"Utilize 3 para asignar un punto a inteligencia"<<endl;
cout<<"Utilize 4 para asignar un punto a constitucion"<<endl;
cout<<endl;
cout<<"Tiene 4 puntos restantes"<<endl;
cin>>punto;
while( punto != 1 && punto != 2 && punto != 3 && punto != 4){
cout<<"Solo numeros del 1-4 estan permitidos"<<endl;
cin>>punto;
}
if (punto == 1){
Fuerza += 1;
}
if (punto == 2){
Destreza += 1;
}
if (punto == 3){
Inteligencia += 1;
}
if (punto == 4){
Constitucion += 1;
}
system("cls");
cout<<"Sus puntos actuales son: "<<endl;
cout<<endl;
cout<<"Fuerza = "<<Fuerza<<endl;
cout<<"Destreza = "<<Destreza<<endl;
cout<<"Inteligencia = "<<Inteligencia<<endl;
cout<<"Constitucion = "<<Constitucion<<endl;
cout<<endl;
cout<<"Utilize 1 para asignar un punto a fuerza"<<endl;
cout<<"Utilize 2 para asignar un punto a destreza"<<endl;
cout<<"Utilize 3 para asignar un punto a inteligencia"<<endl;
cout<<"Utilize 4 para asignar un punto a constitucion"<<endl;
cout<<endl;
cout<<"Usted tiene 3 puntos restantes"<<endl;
cin>>punto;
while( punto != 1 && punto != 2 && punto != 3 && punto != 4){
cout<<"Solo numeros del 1-4 estan permitidos"<<endl;
cin>>punto;
}
if (punto == 1){
Fuerza += 1;
}
if (punto == 2){
Destreza += 1;
}
if (punto == 3){
Inteligencia += 1;
}
if (punto == 4){
Constitucion += 1;
}
system("cls");
cout<<"Sus puntos actuales son: "<<endl;
cout<<endl;
cout<<"Fuerza = "<<Fuerza<<endl;
cout<<"Destreza = "<<Destreza<<endl;
cout<<"Inteligencia = "<<Inteligencia<<endl;
cout<<"Constitucion = "<<Constitucion<<endl;
cout<<endl;
cout<<"Utilize 1 para asignar un punto a fuerza"<<endl;
cout<<"Utilize 2 para asignar un punto a destreza"<<endl;
cout<<"Utilize 3 para asignar un punto a inteligencia"<<endl;
cout<<"Utilize 4 para asignar un punto a constitucion"<<endl;
cout<<endl;
cout<<"Usted tiene 2 puntos restantes"<<endl;
cin>>punto;
while( punto != 1 && punto != 2 && punto != 3 && punto != 4){
cout<<"Solo numeros del 1-4 estan permitidos"<<endl;
cin>>punto;
}
if (punto == 1){
Fuerza += 1;
}
if (punto == 2){
Destreza += 1;
}
if (punto == 3){
Inteligencia += 1;
}
if (punto == 4){
Constitucion += 1;
}
system("cls");
cout<<"Sus puntos actuales son: "<<endl;
cout<<endl;
cout<<"Fuerza = "<<Fuerza<<endl;
cout<<"Destreza = "<<Destreza<<endl;
cout<<"Inteligencia = "<<Inteligencia<<endl;
cout<<"Constitucion = "<<Constitucion<<endl;
cout<<endl;
cout<<"Utilize 1 para asignar un punto a fuerza"<<endl;
cout<<"Utilize 2 para asignar un punto a destreza"<<endl;
cout<<"Utilize 3 para asignar un punto a inteligencia"<<endl;
cout<<"Utilize 4 para asignar un punto a constitucion"<<endl;
cout<<endl;
cout<<"Usted tiene 1 punto restante"<<endl;
cin>>punto;
while( punto != 1 && punto != 2 && punto != 3 && punto != 4){
cout<<"Solo numeros del 1-4 estan permitidos"<<endl;
cin>>punto;
}
if (punto == 1){
Fuerza += 1;
}
if (punto == 2){
Destreza += 1;
}
if (punto == 3){
Inteligencia += 1;
}
if (punto == 4){
Constitucion += 1;
}
system("cls");
cout<<"Sus puntos son: "<<endl;
cout<<endl;
cout<<"Fuerza = "<<Fuerza<<endl;
cout<<"Destreza = "<<Destreza<<endl;
cout<<"Inteligencia = "<<Inteligencia<<endl;
cout<<"Constitucion = "<<Constitucion<<endl;
cout<<endl;
//variables finales
Nivel = 1;
Experiencia = 0;
Arma = 1;
Amuleto = 1;
Armadura = 1;
Vida = Constitucion+Fuerza;
Golpe = Fuerza + Arma;
Golpehechi = Inteligencia + Amuleto;
Defensa = Destreza + Armadura;
Mana = Destreza + Inteligencia;
system("PAUSE");
system("cls");
cout<<" Usted ha terminado de crear su personaje "<<endl;
cout<<endl;
cout<<" Esta es la ficha de su personaje: "<<endl;
cout<<endl;
cout<<endl;
cout<<"Nombre: "<<Nombre<<" "<<Titulo<<endl;
cout<<endl;
cout<<"Vida: "<<Vida<<endl;
cout<<"Defensa: "<<Defensa<<endl;
cout<<"Mana: "<<Mana<<endl;
cout<<endl;
cout<<"Nivel: "<<Nivel<<endl;
cout<<"Experiencia: "<<Experiencia<<endl;
cout<<endl;
cout<<"Golpe: "<<Golpe<<endl;
cout<<endl;
cout<<"Golpe con Hechizos: "<<Golpehechi<<endl;
cout<<endl;
cout<<"Atributos: "<<endl;
cout<<"Fuerza = "<<Fuerza<<endl;
cout<<"Destreza = "<<Destreza<<endl;
cout<<"Inteligencia = "<<Inteligencia<<endl;
cout<<"Constitucion = "<<Constitucion<<endl;
cout<<endl;
cout<<"Inventario: "<<endl;
cout<<Armainfo<<" +"<<Arma<<endl;
cout<<Ropa<<" +"<<Armadura<<endl;
cout<<Amuletoinfo<<" +"<<Amuleto<<endl;
cout<<endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}
Gracias por la ayuda!
No se si entendiste el código, si no lo hiciste, pídeme y te lo explico...
Lo que me gustaría guardar seria las //variables finales, ( están ubicadas antes de presentar la ficha del personaje ) y también, la fuerza, destreza, inteligencia y constitución Final que posee luego de asignar los 4 puntos...
Pero ahí veo un problema, verás:
Yo declare primero
Fuerza = 1; por ejemplo...
y luego suponete que el usuario le asigno 2 puntos a fuerza, por lo tanto quedó en 3;
Pero en el código arriba, sigue declarado en 1; por lo tanto, como hago para guardar el valor de fuerza, ¿en el valor en el que esta en ese momento?... ¿Me lograste entender?
Par hacer este programa tendrías que usar clases (una clase "personaje" por ejemplo) para guardar en fichero un objeto entero en bloque y recuperarlo también en bloque. Así vas a tener que guardar y recuperar cada dato de uno en uno. Nunca se hace así...
Pero bueno, si quieres, para que puedas hacer lo que pretendes en este programa, una solución sencilla sería guardar cada parámetro en una linea de un fichero de texto.
Pego más abajo el programa. La primera vez que lo ejecutas no verás que hace nada. Pero la siguiente vez que lo ejecutes recuperará del fichero, algunos datos (Nombre, Titulo, Vida y Nivel) de la ejecución anterior del programa, y te los presentará por pantalla. Si te fijas como está hecho podrás hacer lo mismo con los demás parámetros.
Espero que te sirva. No olvides finalizar la pregunta y puntuar correctamente.
Saludos y gracias,
Quepa Ríos
Profesor de Programación C++, Java, C#... Cursos de Programación en Madrid
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
// Fichero:
FILE *pf;
// Variables del personaje
char Nombre[200];
char Titulo[200];
string name();
int Vida;
int Nivel;
int Experiencia;
int Golpe;
int Golpehechi;
int Monedas;
int Fuerza;
int Destreza;
int Inteligencia;
int Constitucion;
int Defensa;
int Mana;
//Variables de Inventario
char Ropa[200];
int Arma;
char Armainfo[200];
int Armadura;
int Amuleto;
char Amuletoinfo[200];
strcpy(Ropa, "Ropaje de Campesino");
strcpy(Armainfo, "Horca de Campesino");
strcpy(Amuletoinfo, "Amuleto de aprendiz");
// Variables Globales
int crear;
int punto;
char continuar[10];
int Inventario;
if((pf=fopen("datosjuego.txt","r"))!=NULL){
fscanf(pf,"%s",Nombre);
fscanf(pf,"%s",Titulo);
fscanf(pf,"%d",&Vida);
fscanf(pf,"%d",&Nivel);//etc con los demas parametros que son todos int
cout<<"Se han recuperado de la ultima partida los siguientes parametros..."<<endl;
cout<<"Nombre: " << Nombre <<endl;
cout<<"Titulo: " << Titulo <<endl;
cout<<"Vida: " << Vida <<endl;
cout<<"Nivel: " << Nivel <<endl<<endl;;
//cerrar fichero:
fclose(pf);
}
cout<<"1 Para crear su personaje"<<endl;
cin >> crear;
while( crear != 1)
{
cout << "Solo Puede crear su personaje" << endl;
cin>>crear;
}
cin.ignore();
int creacion();{
cout << "Ingrese el nombre de su personaje" << endl;
gets(Nombre);
cout << "Ingrese un Titulo para su personaje" <<endl;
cout << " Ej: '' El cazador Oscuro '', '' El Guerrero Temido '' , Etc... "<< endl;
gets(Titulo);
cout<<endl;
cout<<" Usted empezara con 100 monedas"<< endl;
Monedas = 100;
cout<<endl;
cout<<endl;
cout<<" Ahora tiene que asignar sus puntos de habilidad"<< endl;
cout<<endl;
cout<<"Ingrese ''continuar'' cuando este listo..."<<endl;
cin>>continuar;
system("cls");
cout<<"Sus puntos actuales son: "<<endl;
cout<<"Fuerza = 1"<<endl;
cout<<"Destreza = 1"<<endl;
cout<<"inteligencia = 1"<<endl;
cout<<"Constitucion = 1"<<endl;
Fuerza = 1;
Inteligencia = 1;
Constitucion =1;
Destreza = 1;
cout<<endl;
cout<<"Utilize 1 para asignar un punto a fuerza"<<endl;
cout<<"Utilize 2 para asignar un punto a destreza"<<endl;
cout<<"Utilize 3 para asignar un punto a inteligencia"<<endl;
cout<<"Utilize 4 para asignar un punto a constitucion"<<endl;
cout<<endl;
cout<<"Tiene 4 puntos restantes"<<endl;
cin>>punto;
while( punto != 1 && punto != 2 && punto != 3 && punto != 4){
cout<<"Solo numeros del 1-4 estan permitidos"<<endl;
cin>>punto;
}
if (punto == 1){
Fuerza += 1;
}
if (punto == 2){
Destreza += 1;
}
if (punto == 3){
Inteligencia += 1;
}
if (punto == 4){
Constitucion += 1;
}
system("cls");
cout<<"Sus puntos actuales son: "<<endl;
cout<<endl;
cout<<"Fuerza = "<<Fuerza<<endl;
cout<<"Destreza = "<<Destreza<<endl;
cout<<"Inteligencia = "<<Inteligencia<<endl;
cout<<"Constitucion = "<<Constitucion<<endl;
cout<<endl;
cout<<"Utilize 1 para asignar un punto a fuerza"<<endl;
cout<<"Utilize 2 para asignar un punto a destreza"<<endl;
cout<<"Utilize 3 para asignar un punto a inteligencia"<<endl;
cout<<"Utilize 4 para asignar un punto a constitucion"<<endl;
cout<<endl;
cout<<"Usted tiene 3 puntos restantes"<<endl;
cin>>punto;
while( punto != 1 && punto != 2 && punto != 3 && punto != 4){
cout<<"Solo numeros del 1-4 estan permitidos"<<endl;
cin>>punto;
}
if (punto == 1){
Fuerza += 1;
}
if (punto == 2){
Destreza += 1;
}
if (punto == 3){
Inteligencia += 1;
}
if (punto == 4){
Constitucion += 1;
}
system("cls");
cout<<"Sus puntos actuales son: "<<endl;
cout<<endl;
cout<<"Fuerza = "<<Fuerza<<endl;
cout<<"Destreza = "<<Destreza<<endl;
cout<<"Inteligencia = "<<Inteligencia<<endl;
cout<<"Constitucion = "<<Constitucion<<endl;
cout<<endl;
cout<<"Utilize 1 para asignar un punto a fuerza"<<endl;
cout<<"Utilize 2 para asignar un punto a destreza"<<endl;
cout<<"Utilize 3 para asignar un punto a inteligencia"<<endl;
cout<<"Utilize 4 para asignar un punto a constitucion"<<endl;
cout<<endl;
cout<<"Usted tiene 2 puntos restantes"<<endl;
cin>>punto;
while( punto != 1 && punto != 2 && punto != 3 && punto != 4){
cout<<"Solo numeros del 1-4 estan permitidos"<<endl;
cin>>punto;
}
if (punto == 1){
Fuerza += 1;
}
if (punto == 2){
Destreza += 1;
}
if (punto == 3){
Inteligencia += 1;
}
if (punto == 4){
Constitucion += 1;
}
system("cls");
cout<<"Sus puntos actuales son: "<<endl;
cout<<endl;
cout<<"Fuerza = "<<Fuerza<<endl;
cout<<"Destreza = "<<Destreza<<endl;
cout<<"Inteligencia = "<<Inteligencia<<endl;
cout<<"Constitucion = "<<Constitucion<<endl;
cout<<endl;
cout<<"Utilize 1 para asignar un punto a fuerza"<<endl;
cout<<"Utilize 2 para asignar un punto a destreza"<<endl;
cout<<"Utilize 3 para asignar un punto a inteligencia"<<endl;
cout<<"Utilize 4 para asignar un punto a constitucion"<<endl;
cout<<endl;
cout<<"Usted tiene 1 punto restante"<<endl;
cin>>punto;
while( punto != 1 && punto != 2 && punto != 3 && punto != 4){
cout<<"Solo numeros del 1-4 estan permitidos"<<endl;
cin>>punto;
}
if (punto == 1){
Fuerza += 1;
}
if (punto == 2){
Destreza += 1;
}
if (punto == 3){
Inteligencia += 1;
}
if (punto == 4){
Constitucion += 1;
}
system("cls");
cout<<"Sus puntos son: "<<endl;
cout<<endl;
cout<<"Fuerza = "<<Fuerza<<endl;
cout<<"Destreza = "<<Destreza<<endl;
cout<<"Inteligencia = "<<Inteligencia<<endl;
cout<<"Constitucion = "<<Constitucion<<endl;
cout<<endl;
//variables finales
Nivel = 1;
Experiencia = 0;
Arma = 1;
Amuleto = 1;
Armadura = 1;
Vida = Constitucion+Fuerza;
Golpe = Fuerza + Arma;
Golpehechi = Inteligencia + Amuleto;
Defensa = Destreza + Armadura;
Mana = Destreza + Inteligencia;
system("PAUSE");
system("cls");
cout<<" Usted ha terminado de crear su personaje "<<endl;
cout<<endl;
cout<<" Esta es la ficha de su personaje: "<<endl;
cout<<endl;
cout<<endl;
cout<<"Nombre: "<<Nombre<<" "<<Titulo<<endl;
cout<<endl;
cout<<"Vida: "<<Vida<<endl;
cout<<"Defensa: "<<Defensa<<endl;
cout<<"Mana: "<<Mana<<endl;
cout<<endl;
cout<<"Nivel: "<<Nivel<<endl;
cout<<"Experiencia: "<<Experiencia<<endl;
cout<<endl;
cout<<"Golpe: "<<Golpe<<endl;
cout<<endl;
cout<<"Golpe con Hechizos: "<<Golpehechi<<endl;
cout<<endl;
cout<<"Atributos: "<<endl;
cout<<"Fuerza = "<<Fuerza<<endl;
cout<<"Destreza = "<<Destreza<<endl;
cout<<"Inteligencia = "<<Inteligencia<<endl;
cout<<"Constitucion = "<<Constitucion<<endl;
cout<<endl;
cout<<"Inventario: "<<endl;
cout<<Armainfo<<" +"<<Arma<<endl;
cout<<Ropa<<" +"<<Armadura<<endl;
cout<<Amuletoinfo<<" +"<<Amuleto<<endl;
cout<<endl;
if((pf=fopen("datosjuego.txt","w"))!=NULL){
fprintf(pf,"%s\n",Nombre);
fprintf(pf,"%s\n",Titulo);
fprintf(pf,"%d\n",Vida);
fprintf(pf,"%d\n",Nivel);//etc con los demas parametros que son todos int
}
}
system("PAUSE");
return EXIT_SUCCESS;
}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas