Ciao a tutti, ho un bel problemino con un programma che devo fare x la scuola... in pratica devo programmare una parte del Monopoli. In pratica mi trovo con 2 file così strutturati:
---> giocatori.txt <---
Mario 30.23
Parco_della_Vittoria 10.23
Viale_dei_giardini 8.32
#
Gustavo 27.65
vicolo_Stretto 5.32
corso_Magellano 7.26
piazza_Giulio_Cesare
#
Roberta 32.43
corso_Raffaello 9.32
piazza_Dante 8.00
---> tabellone.txt <---
Partenza
Parco_della_Vittoria
corso_Magellano
piazza_Giulio_Cesare
viale_dei_Giardini
.....
Nel primo file sono presenti i nomi dei giocatori con a fianco i loro soldi, e di seguito tutti i terreni posseduti con relativo valore, mentre nel secondo file c'è l'elenco ordinato di tutte le vie del tabellone.
In pratica il gioco consiste "solo" nel far tirare 2 dadi (generendo un numero tra 1 e 12) e vedere in che casella finisce il giocatore. a questo punto se la casella è posseduta da un giocatore avversario si dovrà pagare il valore indicato. Ogni giocatore perde quando finisce i soldi. Il gioco termina quando resta un solo giocatore.
La fregatura è che devo per forza usare le liste.. su cui nn sono molto preparato... cmq ecco quello che sono riuscito a fare:
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define MAXGIOC 10
int dadi; /* Valore dei dadi */
int posizione[MAXGIOC]; /* Vettore posizione giocatori */
int n_caselle; /* Contatore caselle */
int n_giocatori; /* Contatore giocatori */
int i; /* Contatore for */
int ingioco[MAXGIOC]; /* Vettore stato dei giocatori */
int gioc_ingioco; /* Numero dei giocatori in gioco */
int gioc; /* Contatore for fioco */
int stato; /* Variabile statto fscanf */
float valore; /* Variabile valore dei terreni */
char via[20]; /* Stringa nomi vie */
char stringa[20]; /* Stringa nomi vie */
char nome_pro[20]; /* Stringa nome proprietario casella */
/* Lista tabellone */
struct casella_s
{
char via[20];
char nome[20];
float soldi;
struct casella_s*prossimo;
}casella;
casella *punttesta, *puntcorr; /* Puntatori */
casella recaux;
/* Lista giocatori */
struct giocatori_s
{
char nome[20];
float soldi;
struct giocatori_s*prossimo;
}giocatori;
giocatori *punttesta2, *puntcorr2, *giocatore; /* Puntatori */
main()
{
FILE*inp_file;
/* Caricamento Lista Tabellone */
fopen("tabellone.txt","r");
punttesta=NULL; /* Inizializza la lista */
for(stato=fscanf(inp_file, "%s", &recaux.via); stato!= EOF; fscanf(inp_file, "%s", &recaux.via))
{
/* Alloco spazio x un record */
puntcorr=(casella*) malloc (sizeof (casella));
(*puntcorr).via = recaux.via;
(*puntcorr).prossimo=punttesta;
punttesta=puntcorr;
n_caselle ++;
}
fclose(inp_file);
// Caricamento lista Giocatori
fopen("giocatori.txt","r");
punttesta2=NULL;
while (fscanf(inp_file, "%s", &stringa) != EOF)
{
/* Alloco spazio x record */
puntcorr2=(giocatori*) malloc (sizeof(giocatori));
/* Carico nella lista il nome e i soldi del giocatore */
(*puntcorr2).nome=fscanf(inp_file, "%s");
(*puntcorr2).soldi=fscanf(inp_file, "%f");
/* Finche non trovo # leggo le caselle possedute */
while (fscanf(inp_file, "%s") != '#')
{
/* Carico in 2 variabili il nome della casella e il suo valore */
fscanf(inp_file, "%s", &via);
fscanf(inp_file, "%f", &valore);
/* Cerco nella lista Tabellone la casella e scrivo nella lista nome del giocatore che */
/* la possiede e il relativo valore */
while(puntcorr!=NULL) && ((*puntcorr).via != via)
puntcorr=(*puntcorr).prossimo;
*puntcorr.nome = *puntcorr2.nome;
*puntcorr.soldi = valore;
}
(*puntcorr2).prossimo=punttesta2;
punttesta2=puntcorr2;
n_giocatori ++;
}
fclose(inp_file);
/* Mando all'inizio della lista anche il puntatore giocatre */
/* che serve per lavorare sui soldi del proprietario del terreno */
giocatore = puntcorr2;
/* ------------------------------------------------------------------------------------------------------------ */
/* Inizializzo il numero dei giocatori in gioco */
gioc_ingioco = n_giocatori;
/* Inizializzo lo stato dei giocatori */
for (i=1; i<= n_giocatori; i++)
{
ingioco[i] = 1;
}
/* Inizializzo la posizione dei giocatori */
for (i=1; i<= n_giocatori; i++)
{
posizione[i] = 0;
}
/* Inizio Gioco che termina se rimane solo un giocatore */
printf("\n\n INIZIO GIOCO");
while(gioc_ingioco != 1)
{
/* Mando all'inizio l'indice della lista dei giocatori */
puntcorr2 = punttesta2;
/* Ciclo turno di gioco */
for (gioc=1; gioc<=n_giocatori; gioc++)
{
if (ingioco[gioc] == 1)
{
/* Mando all'inizio il puntatore x il giocatore proprietario */
giocatore = punttesta2;
printf("\n\n Tocca a %s", (*puntcorr2).nome);
/* Tiro i dadi e incremento la posizione del giocatore */
dadi=rand(11)+1;
posizione[gioc] = posizione[gioc] + dadi;
/* Se arriva al fondo torna all'inizio */
if (posizione[gioc] >= n_caselle) posizione[gioc] = posizione[gioc] - n_caselle;
/* Vado all'inizio del Tabellone e scorro la lista fino alla casella voluta */
puntcorr = punttesta;
for (i=1; i<=dadi; i++)
{
puntcorr=(*puntcorr).prossimo;
}
printf("\n Tira i dadi e ottiene %d finendo in %s", dadi, (*puntcorr).via);
/* Guardo di chi è la casella e pago */
if ( (*puntcorr).nome == (*puntorr2).nome )
{
printf("\n La casella è sua, quindi non paga. Tocca al giocatore successivo");
printf("\n Soldi rimanenti: € %f", (*puntcorr2).soldi);
}
else if ( (*puntcorr).nome == '' )
{
printf("\n La casella non è di nessuno, quindi non paga. Tocca al giocatore successivo");
printf("\n Soldi rimanenti: € %f", (*puntcorr2).soldi);
}
else
{
nome_pro=(*puntcorr).nome;
/* Cerco il nome del proprietario della casella nella lista Giocatori */
giocatore = punttesta2;
while (giocatore != NULL) && ((*giocatore).nome != nome_pro)
giocatore=(*giocatore).prossimo;
/* Pago */
(*giocatore).soldi = (*giocatore).soldi + (*puntcorr).soldi;
(*puntcorr2).soldi = (*puntcorr2).soldi - (*puntcorr).soldi;
printf("\n Il giocatore paga € %f a %s. Tocca al giocatore successivo", (*puntcorr).soldi, (*giocatore).nome);
printf("\n Soldi rimanenti: € $f", (*puntcorr2).soldi);
/* Guardo se va in bancarotta */
if ((*puntcorr2).soldi <= 0 )
{
ingioco[gioc] = 0;
gioc_ingioco --;
printf("\n Il giocatore è in bancarotta, quindi è fuori");
}
}
} // Chiudo If
} //Chiudo for turno di gioco
} // Chiudo While, resta un solo giocatore
printf("\n\n FINE PARTITA! ");
printf("\n\n Vince %s con € %f", (*puntcorr2).nome,(*puntcorr2).soldi);
system("PAUSE");
return 0;
}
-- Scarica il file: www.bak86.altervista.org/mon.cpp --
Il problema è che mi da un pacco di errori senza senso... e non so xkè.... riuscite a darmi una mano???
Grazie a tutti... ciao ciao!