Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Salvataggi e caricamenti?
Forum - C/C++ - Salvataggi e caricamenti?

Avatar
Djot (Normal User)
Rookie


Messaggi: 28
Iscritto: 14/02/2017

Segnala al moderatore
Postato alle 15:50
Martedì, 23/05/2017
Salve a tutti , per motivi didattici sto svolgendo un progetto in C++ che consiste nella creazione di un semplice gioco (Molto semplice , senza librerie grafiche e che funzioni tramite terminale) tuttavia sto riscontrando vari problemi per permettere al giocatore di salvare e caricare una partita , non ho davvero idea di come permettere tale azione , potete darmi qualche consiglio?

PM Quote
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 16:12
Martedì, 23/05/2017
Testo quotato

Postato originariamente da Djot:

Salve a tutti , per motivi didattici sto svolgendo un progetto in C++ che consiste nella creazione di un semplice gioco (Molto semplice , senza librerie grafiche e che funzioni tramite terminale) tuttavia sto riscontrando vari problemi per permettere al giocatore di salvare e caricare una partita , non ho davvero idea di come permettere tale azione , potete darmi qualche consiglio?



Tipo? in che mod salvi la partita?

PM Quote
Avatar
Djot (Normal User)
Rookie


Messaggi: 28
Iscritto: 14/02/2017

Segnala al moderatore
Postato alle 16:20
Martedì, 23/05/2017
Intendo proprio il concetto di salvare e caricare una partita

PM Quote
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 16:57
Martedì, 23/05/2017
Testo quotato

Postato originariamente da Djot:

Intendo proprio il concetto di salvare e caricare una partita


Almeno fai vedere qualche riga di codice.
Usi struct?

PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 17:04
Martedì, 23/05/2017
Impara ad usare i file (fopen, fwrite, fclose, fread).
Salvare significa che puoi ricaricare il gioco, quindi devi salvare tutte le variabili che rappresentano lo stato del gioco all'istante del salvataggio.

Quindi quello che dovresti fare è
1) incapsulare tutte le variabili necessarie a rappresentare il gioco in una struct (ma non di più, non serve a niente).
2) Scrivere questa struttura sul file in maniera binaria (opzione 'b' su fopen)
3) se ci sono puntatori nella struttura si riferiscono a memoria che in caricamento successivo potrebbe non essere più valida, quindi se hai puntatori nella struttura il discorso si complica perché devi decidere anche come salvare i dati memorizzati. Dipende da che gioco  è.

La parte di caricamento la fai sempre in modo binario con fread. Sia per il salvataggio che il caricamento devi usare i puntatori perché devi trattare lo stato come un void* per passarlo a fopen.

PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 699
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 23:23
Martedì, 23/05/2017
Anni fa misi insieme un programmino per tenere la contabilità di casa, creandolo con CodeWarrior in System 7 di Apple. Quel programma salvava i dati in formato binario, compresi diversi valori (che rappresentavano le spese e le entrate) in virgola mobile, double. Tutto ha funzionato a dovere per anni, con salvataggi e caricamenti che andavano alla grande, finché un bel giorno ho provato a "portare" quel programma in ambiente Windows... DISASTRO!!! Tutti i valori in virgola mobile risultavano illeggibili, perché salvati secondo lo standard tipico che impiegava System 7 sui computer con processore Motorola 68040, diverso da quello che impiega Windows sui processori che gli sono propri. Per recuperare i dati contenuti nei file salvati su Apple occorrerebbe predisporre un apposito programma di conversione, ma non è così semplice come sembra (non per me, almeno).

Morale della storia: da allora salvo sempre in formato testuale, un po' più macchinoso ma almeno non mi riserva sorprese (fino ad ora, ché sicuramente se ne inventeranno qualcun'altra per mischiare ulteriormente le carte).


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:24
Mercoledì, 24/05/2017
Per questioni di velocità di scrittura/lettura è meglio utilizzare il formato binario.

Per piccole quantità di dati può anche andare bene il formato testo ma questo "espone" il file a modifiche semplici che possono falsare il gioco.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote