Risiko

di il
3 risposte

Risiko

Buonasera ragazzi, mi sono appena iscritto.
Sto svolgendo un progetto universitario, la creazione del gioco risiko in c.
Solo che mi sorge un problema, come suddividere i territori ai vari giocatori, vi chiedo aiuti, spunti e idee, ringrazio in anticipo chi vorrà aiutarmi.
questo è il sorgente che ho scritto fin ora
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

int Menu();
void Risiko();
int NumeroGiocatori();
int NumeroArmate();
void CarteObbiettivo();
int Estrazione();
int PrimoAdIniziare();

void Risiko(){									//FUNZIONANTE
printf("*********     ++     sssssssss     ii     kk    kk     ooooooooooo\n"
"*********     ++     sssssssss     ii     kk   kk      ooooooooooo\n"
"**     **     ++     ss            ii     kk  kk       oo       oo\n"
"**     **     ++     ss            ii     kk kk        oo       oo\n"
"*********     ++     sssssssss     ii     kkkk         oo       oo\n"
"*********     ++     sssssssss     ii     kkk          oo       oo\n"
"*** *         ++            ss     ii     kk kk        oo       oo\n"
"**  **        ++            ss     ii     kk  kk       oo       oo\n"
"**    **      ++     sssssssss     ii     kk   kk      ooooooooooo\n"
"**     **     ++     sssssssss     ii     kk    kk     ooooooooooo\n");
}
//struttura giocatore
typedef struct {
	char nome[20];
	char colore[20];
	int num_armate;
	char carta_obbiettivo[60];
	int matricola;
}giocatori;
int main(){
	int matricola=0; //numero univoco per identificare il giocatore
	int i=0; //contatore di lavoro
	int scelta; //variabile che indica la scelta effettuata nel menu scelta
	int numero_giocatori; // indica quanti giocatori stanno giocando
	int numero_armate;
	char carta[60];
	int primoadiniziare;
	int z=0; //condizione per uscire fuori dal primo ciclo
	int v=0; //condizione per uscire dal secondo ciclo
	giocatori giocatore[6];
	Risiko();
	scelta=Menu();
	numero_giocatori=NumeroGiocatori();
	numero_armate=NumeroArmate();
	while (i<numero_giocatori){
		printf("Inserisci il nome del giocatore n. %d\n", i+1);
		scanf("%s", &giocatore[i].nome);
		printf("Scegli il colore del giocatore n. %d\n", i+1);
		scanf("%s", giocatore[i].colore);
		giocatore[i].num_armate=numero_armate;
		CarteObbiettivo(giocatore[i].carta_obbiettivo);
		puts(giocatore[i].carta_obbiettivo);
		giocatore[i].matricola=matricola,
		i++;
		matricola++;
	}
	i=0;
	while (z<1){ //condizione per uscire fuori dal primo ciclo
		primoadiniziare=Estrazione();
		if (primoadiniziare>matricola){
			primoadiniziare=Estrazione();
		}
		else{
		while (v<1)
			if (primoadiniziare==giocatore[i].matricola){
				printf("\nIl giocatore che inizia per primo è: %s", giocatore[i].nome);
				v=1;
				z=1;
			}
			else {
				i++;
			}
		}
	}
}

int Menu(){								//FUNZIONANTE
	int scelta;
	printf("\n\n\n\n\n\nSeleziona una delle opzioni:\n1)Gioca");
	scanf("%d", &scelta);
	return scelta;
}

int NumeroGiocatori(){				//FUNZIONANTE
	int numerogiocatori;
	puts("Inserisci il numero dei giocatori, un minimo di 3, un massimo di 6");
	scanf("%d", &numerogiocatori);
	return numerogiocatori;
}

int NumeroArmate(){					//FUNZIONANTE
	int numeroarmate;
	printf("\nScegli con quante armate vuoi giocare:\n1)20\n2)25\n3)30\n4)35\n");
	scanf("%d", &numeroarmate);
	if (numeroarmate==1){
		return 20;
	}
	else if (numeroarmate==2){
		return 25;
	}
	else if (numeroarmate==3){
		return 30;
	}
	else if (numeroarmate==4){
		return 35;
	}
	//return 0;
}

void CarteObbiettivo(char carta[]){ //il numero 6 corrisponde alle carte obbiettivo presenti nel gioco		//FUNZIONANTE
	int random;
	int lunghezza=0;
	int i=0;
	random=Estrazione();
	char carta1[30]="Conquistare24territori";
	char carta2[35]="ConquistareilNordAmericael'Africa";
	char carta3[40]="ConquistareilNordAmericael'Oceania";
	char carta4[40]="Conquistarel'AsiaeilSud America";
	char carta5[40]="Conquistarel'Asiael'Africa";
	char carta6[60]="Distruggerecompletamentetuttelearmatediuncolore";
	if (random==1){
		lunghezza=strlen(carta1);
		while(i<lunghezza){
			carta[i]=carta1[i];
			i++;
		}
	}
	else if(random==2){
		lunghezza=strlen(carta2);
				while(i<lunghezza){
					carta[i]=carta2[i];
					i++;
				}
			}
	else if (random==3){
		lunghezza=strlen(carta3);
						while(i<lunghezza){
							carta[i]=carta3[i];
							i++;
						}
	}
	else if (random==4){
			lunghezza=strlen(carta4);
							while(i<lunghezza){
								carta[i]=carta4[i];
								i++;
							}
		}
	else if (random==5){
			lunghezza=strlen(carta5);
							while(i<lunghezza){
								carta[i]=carta5[i];
								i++;
							}
		}
	else if (random==6){
			lunghezza=strlen(carta6);
							while(i<lunghezza){
								carta[i]=carta6[i];
								i++;
							}
		}
	//puts(carta);
	}

int Estrazione(){					//FUNZIONANTE
	int random;
	srand(time(0));
	random=1+rand()%6;
	return random;
}

int PrimoAdIniziare(){				//FUNZIONATE
	int random;
		srand(time(0));
		random=1+rand()%6;
		return random;
}







3 Risposte

  • Re: Risiko

    Ciao, capisco che può sembrare un po' triste come cosa, ma non ho mai giocato a risiko!

    Quindi affinché possa aiutarti dovresti spiegarmi più in generale, e in termini logico-informatici, cosa intendi con suddividere i territori ai vari giocatori!
  • Re: Risiko

    Questo è il link dei territori del gioco:


    Supponiamo che stiamo giocando in 3:
    io sono il primo, è il mio turno, scelgo di impossessarmi dell' africa del nord, turno finito.
    Tocca a te, tu scegli il Perù...
    Il terzo giocatore sceglie un altro territorio,
    Tocca di nuovo a me, prendo...


    Inoltre dovremmo anche scegliere anche quante armate disporre su ogni territorio, e riguardo a questo un' idea ce l' ho..
  • Re: Risiko

    Per quanto riguarda la suddivisione dei territori potresti utilizzare due array di dimensione n:
    - un array u di stringhe contenente i nomi degli n territori;
    - un array v di interi inizializzato a 0.

    Nel momento in cui il giocatore x si impossessa di u[j] allora assegneremo a v[j] il valore x.
    In questo modo il valore di v[j] ci dirà se il generico territorio u[j] è stato conquistato o meno e nel caso da quale giocatore.

    Ovviamente non sapendo come funziona il gioco non saprei dirti se questo approccio faccia al caso tuo.
Devi accedere o registrarti per scrivere nel forum
3 risposte