Mini gioco per la scuola (mano di briscola)

di il
3 risposte

Mini gioco per la scuola (mano di briscola)

Buongiorno a tutti,
Sono nuovo e avrei un problema con un "mini gioco".Il gioco consiste nel pescare le carte da briscola, dopo di che ogni carta ha un valore:asso=10, fante=2, cavallo=3, re=4.
Il programma è funzionante inizialmente, ma stranamente dopo un po di volte che si pesca la carta il programma si blocca(credo in un ciclo infinito).
Attendo risposta chiunque sia disponibile ad aiutarmi. in basso metto a disposizione il codice.
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
#include <time.h>

int main(){
	//inizializzazione di due vettri(numero della carta e seme);
	char s[][9]={"ori","spade","bastoni","coppe"},
		 c[][9]={"asso","due","tre","quattro","cinque","sei","sette","fante","cavallo","re"};
	
	int c_p[40];
	int i,n_c,n_s,j;
	int g1=0,g2=0,err=0;
	srand(time(NULL));
	
	for(i=0;i<40;i++){
		
		//scelta carta giocatore 1
		do{
			err=0;
			n_c=rand()%10;
			n_s=rand()%4;
			//controllo le carte che non siano già state pescate
			for(j=0;j<40;j++){
				if(n_c+n_s == c_p[j]){
					err=1;
					break;
				}
			}
		}while(err==1);
		c_p[i]=n_s+n_c;

		printf("Hai pescato: %s di %s\n",c[n_c],s[n_s]);
		switch(n_c){
			case 0:
				g1+=10;
				break;
			case 7:
				g1+=2;
				break;
			case 8:
				g1+=3;
				break;
			case 9:
				g1+=4;
				break;
		}
		
		//scelata carta giocatore 2

			do{
			err=0;
			n_c=rand()%10;
			n_s=rand()%4;
			//controllo le carte che non siano già state pescate
			for(j=0;j<40;j++){
				if(n_c+n_s == c_p[j]){
					err=1;
					break;
				}
			}
		}while(err==1);
		i++;
		c_p[i]=n_s+n_c;

		printf("Ha pescato: %s di %s\n",c[n_c],s[n_s]);
		switch(n_c){
			case 0:
				g2+=10;
				break;
			case 7:
				g2+=2;
				break;
			case 8:
				g2+=3;
				break;
			case 9:
				g2+=4;
				break;
		}
		getch();
		system("cls");
		printf("Punteggio:G1\tG2\n");
		printf("          %d\t%d\n\n",g1,g2);
		printf("Premere un tasto per pescare la prossima carta:");
		getch();
		system("cls");
		
	}
	system("pause");
}


Grazie

3 Risposte

  • Re: Mini gioco per la scuola (mano di briscola)

    Perchè non generi l intero mazzo con tutte le carte e poi lo scorri in avanti? risparmieresti molti controlli. se riuscissi a darmi una documentazione potrei esserti più d aiuto
  • Re: Mini gioco per la scuola (mano di briscola)

    Queste sono le istruzioni del gioco esatte:

    Vogliamo simulare un semplice gioco che distribuisca le 40 carte del mazzo a due giocatori (giocatore 1 e giocatore 2).
    Supponendo che l'Asso valga 10 punti, il Fante 2 punti, il Cavallo 3 e il Re 4, vince il giocatore che totalizza il punteggio maggiore.
    Possiamo rappresentare un mazzo con un vettore di 40 elementi.
    Dall'indice possiamo stabilire qual è la carta corrispondente: ad esempio, possiamo pensare che l'elemento di indice 0 sia l'Asso di Ori, quello di indice 2 sia il 2 di Ori, quello di indice 21 sia il 2 di bastoni, ecc...
    Il contenuto di ciascun elemento sia il numero del giocatore che possiede quella carta. Quindi se l'elemento di indice 0 contiene il valore 2 significa che il secondo giocatore ha l'Asso di Ori.

    Grazie per avermi risposto
  • Re: Mini gioco per la scuola (mano di briscola)

    Allora io in via preliminare farei in questa maniera:
    1)Creo una semplice struttura carta contenente campi seme, valore, punteggio della carta (es. Ori,Asso,10);(piuttosto che usare i due array a due dimensioni di caratteri ("Array di stringhe");
    2)Creo un array statico di 40 strutture carta, lo chiamo mazzo;
    3)Creo una funzione per generare il mazzo, in quella maniera fornita nella descrizione qui sopra("Dall indice possiamo stabilire quale sia la carta corrispondente ecc ecc";
    Fin qui ci sei?
    Comunque non mi è chiarissimo l ultimo punto :"Il contenuto di ciascun elemento sia il numero del giocatore che possiede quella carta";
    In più hai uno pseudocodice? Sarebbe utile a rendere più chiara l' idea di come il tuo programma dovrebbe funzionare. Dopodichè posso aiutarti a scovare l'errore.
Devi accedere o registrarti per scrivere nel forum
3 risposte