Salve ragazzi ....non riesco a capire bene una cosa..(ling C)... le variabili globali in questione : riga 25/26(mosse_a_disposizioneNinja/Ciccio), richiamate nella funzione alla riga 240 ,void gioca(), e modificate, poi richiamate ancora nelle funzioni alle righe 265 o 300(turno Ciccio(),turnoNinja() )....
quando le richiamo nelle righe 265/300 ritornano entrambe al valore 1 (come dichiarate inizialmente) ...per quale motivo ?
un'altra cosa .....se in una funzione dovessi decidere di ritornare al main (che non è in questo file) come dovrei fare?
qui vi lascio il pezzo di codice....
quando le richiamo nelle righe 265/300 ritornano entrambe al valore 1 (come dichiarate inizialmente) ...per quale motivo ?
un'altra cosa .....se in una funzione dovessi decidere di ritornare al main (che non è in questo file) come dovrei fare?
qui vi lascio il pezzo di codice....
C:
#include "gamelib.h"
static struct Cella *scacchiera = NULL ;
static struct Giocatore Ciccio;
static struct Giocatore Ninja ;
int lato ;
void alien();
void trap();
void crea_scacchiera();
void stampa_scacchiera();
void termina_creazione();
void muovi();
void usa_oggetto();
void turno_ninja();
void turno_ciccio();
void zaino();
static short int vittoriaNinja=0,vittoriaCiccio=0;
static unsigned int turni_passati=0;
static short int mosse_a_disposizione_Ninja=1;
static short int mosse_a_disposizione_Ciccio=1;
static int vita_ciccio=100;
static int scudo_ciccio=100;
static int vita_ninja=100;
static int scudo_ninja=100;
///la funzione termina_creazione permette di ritonrare al menu iniziale del gioco
void termina_creazione() {
}
void termina_gioco(){
printf("Ecco le statistiche delle partite:\n" );
printf("Vittorie di Ninja : %d\n Vittorie di Ciccio: %d \n ",vittoriaNinja,vittoriaCiccio );
exit(1);
}
void crea_mappa(){
int opzione;
do {
printf("\t Premi '1' per CREARE LA SCACCHIERA \n" );
printf("\t \n" );
printf("\t Premi '2' per STAMPARE LA SCACCHIERA \n" );
printf("\t \n" );
printf("\t Premi '3' per TORNARE INDIETRO \n" );
scanf("%d", &opzione );
switch (opzione) {
case 1:
crea_scacchiera();
break;
case 2:
stampa_scacchiera();
break;
case 3:
termina_creazione();
return ;
default:
printf("Opzione non valida..\n" );
break;
}
} while(opzione!=3);
}
void crea_scacchiera () {
printf("Immettere la lunghezza n di un lato della scacchiera: " );
scanf("%d", &lato );
mappa=lato*lato ;
righe=lato;
colonne=lato;
scacchiera=malloc(righe*colonne*sizeof(struct Cella));
printf("Grandezza Mappa => %d (%dX%d)\n\n",mappa,lato,lato);
printf("Ai fini della difficoltà del gioco dovrai inserire 3 probabilità la cui somma dovrà fare 100..... \n\n" );
do {
printf("\t Probabilità di trovare in una data cella una'TRAPPOLA':" );
scanf("%d", &trapp);
printf("\t Probabilità di trovare in una data cella un 'ALIENO' :" );
scanf("%d", &alie );
printf("\t Probabilità di trovare in una data cella 'NESSUN PERICOLO':");
scanf("%d", &ness_per );
if (ness_per +trapp+alie !=100) {
printf(" \n Ricorda la somma delle probabilità deve essere 100 \n " );
}
}
while( ness_per +trapp+alie !=100);
printf("\t \n Ora dovrai inserire 5 probabilità legate al ritrovamento o meno degli oggetti....." );
do {
printf("\n\n\t Probabilità di trovare in una data cella 'POZIONE':" );
scanf("%d", &pozio);
printf("\t Probabilità di trovare in una data cella un 'MEDIKIT' :" );
scanf("%d", &medik );
printf("\t Probabilità di trovare in una data cella 'MATERIALE':" );
scanf("%d", &mater);
printf("\t Probabilità di trovare in una data cella un 'COLPI LANCIARAZZI' :" );
scanf("%d", &colpilancia );
printf("\t Probabilità di trovare in una data cella 'NESSUN OGGETTO':" );
scanf("%d", &no_obj );
if (no_obj+pozio+medik+colpilancia+mater !=100) {
printf("Ricorda la somma delle probabilità deve essere 100" );
}
} while(no_obj+pozio+medik+colpilancia+mater !=100);
//inizializzo Tipo_pericolo
for ( i = 0; i < lato; i++) {
for ( j= 0; j <lato; j++) {
int prob1= rand()%100;
if (prob1<ness_per) {
scacchiera[i*lato+j].pericolo=nessun_pericolo;
} else if (ness_per<=prob1&&prob1<=ness_per+trapp) {
scacchiera[i*lato+j].pericolo=trappola;
} else if(prob1>=ness_per+trapp){
scacchiera[i*lato+j].pericolo=alieno;
}
}}
//inizializzo Tipo_oggetto
for ( i = 0; i < lato; i++) {
for ( j= 0; j <lato; j++) {
int prob2 =rand()%100;
if (prob2<no_obj) {
scacchiera[i*lato+j].oggetto=nessun_oggetto;
} else if (no_obj<=prob2&&prob2<no_obj+medik) {
scacchiera[i*lato+j].oggetto=medikit;
} else if (no_obj+medik<=prob2&&prob2<no_obj+medik +pozio)
scacchiera[i*lato+j].oggetto=pozione;
else if (no_obj+medik+pozio<=prob2&&prob2<no_obj +medik+pozio+mater)
scacchiera[i*lato+j].oggetto=materiale;
else if (no_obj+medik+pozio+mater<=prob2)
scacchiera[i*lato+j].oggetto=colpi_lanciarazzi;
}
}
Ciccio.x=rand()%lato;
Ciccio.y=rand()%lato;
Ninja.x=rand()%lato;
Ninja.y=rand()%lato;
printf("Ciccio.x=%d\n", Ciccio.x );
printf("Ciccio.y=%d\n", Ciccio.y );
printf("Ninja.x=%d\n", Ninja.x );
printf("Ninja.y=%d\n", Ninja.y);
Ninja.zaino[nessun_oggetto]=0;
Ciccio.zaino[nessun_oggetto]=0;
Ninja.zaino[medikit]=0;
Ciccio.zaino[medikit]=0;
Ninja.zaino[pozione]=0;
Ciccio.zaino[pozione]=0;
Ninja.zaino[materiale]=0;
Ciccio.zaino[materiale]=0;
Ninja.zaino[colpi_lanciarazzi]=0;
Ciccio.zaino[colpi_lanciarazzi]=0;
Ninja.stato=solo_vita;
Ciccio.stato=solo_vita;
printf("\n\n\nOk......la mappa è stata creata\n\n\n");
}
void stampa_scacchiera(){
if(scacchiera == NULL){
printf("Devi ancora creare la scacchiera!...\n ");
printf("\n ");}
printf("\n\n\n\n" );
int l, p ;
for ( l = 0; l < lato ; l++) {
for (p=0; p<lato ; p++) {
if ((scacchiera+l*p)->pericolo==nessun_pericolo) {
printf(" [1" );
} else if ((scacchiera+l*p)->pericolo==alieno) {
printf(" [2" );
} else if((scacchiera+l*p)->pericolo==trappola) {
printf(" [3" );
}///////////////////////////////////////////////////
if((scacchiera+l*p)->oggetto==nessun_oggetto) {
printf(",4]" );
} else if ((scacchiera+l*p)->oggetto==medikit) {
printf(",5]" );
} else if((scacchiera+l*p)->oggetto==pozione) {
printf(",6]" );
}
else if ((scacchiera+l*p)->oggetto==materiale) {
printf(",7]" );
} else if((scacchiera+l*p)->oggetto==colpi_lanciarazzi) {
printf(",8]" );
}
}
printf("\n" );
}
printf("\t\t\t \n\nLegenda :\n\n");
printf("\nNessun pericolo=1\nAlieno=2\nTrappola=3\nNessun Oggetto=4\nMedikit=5\nPozione=6\nMateriale=7\nColpi lanciarazzi=8\n\n\n\n" );
}
void gioca(){
if(scacchiera == NULL){
printf("Devi creare prima la mappa...\n\n\n ");
return ;
}
if (turni_passati==0) {
if (rand()%2==0) {
turno_ninja();
--mosse_a_disposizione_Ciccio;
} else {
turno_ciccio();
--mosse_a_disposizione_Ninja;
}
} else if (mosse_a_disposizione_Ninja==1) {
turno_ninja();
} else if(mosse_a_disposizione_Ciccio==1) {
turno_ciccio();
}
}
void turno_ciccio(){
printf("%d\n",mosse_a_disposizione_Ninja );
printf("%d\n",mosse_a_disposizione_Ciccio );
if (mosse_a_disposizione_Ciccio==0) {
turni_passati=turni_passati+0.5;
++mosse_a_disposizione_Ninja;
gioca();
}
int scl;
printf("\n\n\nCiccio è il tuo turno ! \n Scegli cosa fare!\n\n\n\n");
do{
printf("\t Premi '1' per MUOVERTI \n" );
printf("\t \n" );
printf("\t Premi '2' per USARE UN OGGETTO \n" );
printf("\t \n" );
scanf("%d" ,&scl);
if(scl < 0 || scl > 2){
printf("Errore hai inserito un valore non valido\n");
}
switch(scl)
{
case 1: muovi();
break;
case 2: usa_oggetto();
break;
}
}while( scl != 0);
}
void turno_ninja(){
printf("%d\n",mosse_a_disposizione_Ninja );
printf("%d\n",mosse_a_disposizione_Ciccio );
if (mosse_a_disposizione_Ninja==0) {
turni_passati=turni_passati+0.5;
++mosse_a_disposizione_Ciccio;
gioca();
}
int scl;
printf("\n\n\nNinja è il tuo turno ! \n Scegli cosa fare!\n\n\n\n");
do{
printf("\t Premi '1' per MUOVERTI \n" );
printf("\t \n" );
printf("\t Premi '2' per USARE UN OGGETTO \n" );
printf("\t \n" );
scanf("%d" ,&scl);
if(scl < 0 || scl > 2){
printf("Errore hai inserito un valore non valido\n");
}
switch(scl)
{
case 1: muovi();
break;
case 2: usa_oggetto();
break;
}
Ultima modifica: