Ciao ragazzi mi sono messo un po su e ho riscritto il programma ora funziona a meraviglia- devo ancora controllare la funzione controllo_risultato, ma almeno adesso il programma esegue le estrazioni senza andare in over flow e senza che nelle tabelle dei giocatori compino numeri identici, il mio problema sta nel fatto che dopo che viene estratto un numero esso all' estrazione successiva sia in nel tabellone e sia nelle singole schede dei giocatori non viene sostituito dal numero 0, cosa che in realtà voglio mi aiutate?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
#define righe 3
#define colonne 5
#define maxvett 15
#define maxnome 10
#define PEDINE 90 //maxcontr
#define NUM_USERS 5
#define r 9
#define c 10
typedef struct
{
char scheda[righe][colonne];
char nome[maxnome];
bool ambo=false;
bool terno=false;
bool quaterna=false;
bool cinquina=false;
bool tombola=false;
}giocatore;
giocatore m_user[NUM_USERS]; /* uso l' array di struct per identificare l' utente */
void carica_scheda()
{
int i,j,y;
for(i=0;i<NUM_USERS;i++)
{
printf("Inserici il nome del %d giocatore\t",i+1);
gets(m_user[i].nome);
for(j=0;j<righe;j++)
{
for(y=0;y<colonne;y++)
{
m_user[i].scheda[j][y]=0;
}
}
}
system("cls");
}
void inizializza_scheda()
{
int i,col;
for(i=0;i<NUM_USERS;i++)
{
//carico la prima colonna con numeri compresi tra 1 e 9
col=rand()%8+1;
col++;
m_user[i].scheda[0][0]=col;
do
{
col=rand()%8+1;
col++;
}while(col==m_user[i].scheda[0][0]);
m_user[i].scheda[1][0]=col;
do
{
col=rand()%8+1;
col++;
}while(col==m_user[i].scheda[0][0] || col==m_user[i].scheda[1][0]);
m_user[i].scheda[2][0]=col;
//carico la seconda colonna con numeri compresi tra 10 e 29
col=rand()%(29-10)+10;;
col++;
m_user[i].scheda[0][1]=col;
do
{
col=rand()%(29-10)+10;;
col++;
}while(col==m_user[i].scheda[0][1]);
m_user[i].scheda[1][1]=col;
do
{
col=rand()%(29-10)+10;;
col++;
}while(col==m_user[i].scheda[0][1] || col==m_user[i].scheda[1][1]);
m_user[i].scheda[2][1]=col;
//carico la terza colonna con numeri compresi tra 30 e 59
col=rand()%(59-30)+30;
col++;
m_user[i].scheda[0][2]=col;
do
{
col=rand()%(59-30)+30;
col++;
}while(col==m_user[i].scheda[0][2]);
m_user[i].scheda[1][2]=col;
do
{
col=rand()%(59-30)+30;
col++;
}while(col==m_user[i].scheda[0][2] || col==m_user[i].scheda[1][2]);
m_user[i].scheda[2][2]=col;
//carico la quarta colonna con numeri compresi tra 60 e 79
col=rand()%(79-60)+60;
col++;
m_user[i].scheda[0][3]=col;
do
{
col=rand()%(79-60)+60;
col++;
}while(col==m_user[i].scheda[0][3]);
m_user[i].scheda[1][3]=col;
do
{
col=rand()%(79-60)+60;
col++;
}while(col==m_user[i].scheda[0][3] || col==m_user[i].scheda[1][3]);
m_user[i].scheda[2][3]=col;
//carico la quinta colonna con numeri compresi tra 80 e 90
col=rand()%(90-80)+80;
col++;
m_user[i].scheda[0][4]=col;
do
{
col=rand()%(90-80)+80;
col++;
}while(col==m_user[i].scheda[0][4]);
m_user[i].scheda[1][4]=col;
do
{
col=rand()%(90-80)+80;
col++;
}while(col==m_user[i].scheda[0][4] || col==m_user[i].scheda[1][4]);
m_user[i].scheda[2][4]=col;
}
}
int controllo_risultato()
{
//ciclo AMBO
int i,j,y,conta;
for(i=0;i<NUM_USERS;i++)
{
if(m_user[i].ambo==false)
{
conta=0;
for(j=0;j<righe;j++)
{
for(y=0;y<colonne;y++)
{
if(m_user[i].scheda[j][y]==0)
{
conta++;
}
}
}
if(conta==2)
{
m_user[i].ambo==true;
printf("Il giocatore %s ha fatto AMBO\n",m_user[i].ambo);
}
}
}
//ciclo TERNO
for(i=0;i<NUM_USERS;i++)
{
if(m_user[i].ambo==true && m_user[i].terno==false)
{
conta=0;
for(j=0;j<righe;j++)
{
for(y=0;y<colonne;y++)
{
if(m_user[i].scheda[j][y]==0)
{
conta++;
}
}
}
if(conta==3)
{
m_user[i].terno==true;
printf("Il giocatore %s ha fatto TERNO\n",m_user[i].terno);
}
}
}
//ciclo QUATERNA
for(i=0;i<NUM_USERS;i++)
{
if(m_user[i].ambo==true && m_user[i].terno==true && m_user[i].quaterna==false)
{
conta=0;
for(j=0;j<righe;j++)
{
for(y=0;y<colonne;y++)
{
if(m_user[i].scheda[j][y]==0)
{
conta++;
}
}
}
if(conta==4)
{
m_user[i].quaterna==true;
printf("Il giocatore %s ha fatto QUATERNA\n",m_user[i].quaterna);
}
}
}
//ciclo CINQUINA
for(i=0;i<NUM_USERS;i++)
{
if(m_user[i].ambo==true && m_user[i].terno==true && m_user[i].quaterna==true && m_user[i].cinquina==false)
{
conta=0;
for(j=0;j<righe;j++)
{
for(y=0;y<colonne;y++)
{
if(m_user[i].scheda[j][y]==0)
{
conta++;
}
}
}
if(conta==5)
{
m_user[i].cinquina==true;
printf("Il giocatore %s ha fatto CINQUINA\n",m_user[i].cinquina);
}
}
}
//ciclo TOMBOLA
for(i=0;i<NUM_USERS;i++)
{
if(m_user[i].ambo==true && m_user[i].terno==true && m_user[i].quaterna==true && m_user[i].cinquina==true && m_user[i].tombola==false)
{
conta=0;
for(j=0;j<righe;j++)
{
for(y=0;y<colonne;y++)
{
if(m_user[i].scheda[j][y]==0)
{
conta++;
}
}
}
if(conta==maxvett)
{
m_user[i].tombola==true;
return i;
}
}
}
}
void stampa_scheda()
{
int i,y,j;
for(i=0;i<NUM_USERS;i++)
{
printf("la scheda di %s e':\n",m_user[i].nome);
for(j=0;j<righe;j++)
{
for(y=0;y<colonne;y++)
{
printf("%d\t",m_user[i].scheda[j][y]);
}
printf("\n");
}
printf("\n");
}
}
void tombola_stampa()
{
printf("*********** ********** **** **** ********** ********** ** ** ***\n");
printf("*********** ********** ** ** ** ** ** ** ********** ** **** ***\n");
printf(" ** ** ** ** ** ** ** ** ** ** ** ** ** ** ***\n");
printf(" ** ** ** ** **** ** ** ** ** ** ** ** ** ***\n");
printf(" ** ** ** ** ** ********** ** ** ** ********** ***\n");
printf(" ** ** ** ** ** ** ** ** ** ** ** ** \n");
printf(" ** ********** ** ** ** ** ********** ********** ** ** ***\n");
printf(" ** ********** ** ** ********** ********** ********** ** ** ***\n");
system("color 20");
Sleep(100);
system("color 30");
Sleep(100);
system("color 50");
Sleep(100);
system("color 90");
Sleep(100);
system("color A0");
Sleep(100);
system("color B0");
Sleep(100);
system("color C0");
Sleep(100);
system("color D0");
Sleep(100);
system("color E0");
Sleep(100);
system("color 20");
Sleep(100);
system("color 30");
Sleep(100);
system("color 50");
Sleep(100);
system("color 90");
Sleep(100);
system("color A0");
Sleep(100);
system("color B0");
Sleep(100);
system("color C0");
Sleep(100);
system("color D0");
Sleep(100);
system("color E0");
Sleep(100);
system("color 0A");
}
int main()
{
int i,y,j,x,z=0,num,estratto,scelta,col,ind_vincitore=0; //y=c
int tabella[r][c];
int vett[maxvett];
int controllo[PEDINE];
bool trovato=false;
bool giauscito=false;
carica_scheda();
//INIZIO CARICAMENTO DELLA MATRICE DEI GIOCATORI
inizializza_scheda();
do
{
bool giauscito=false;
bool entrato=false;
srand(time(NULL));
//imposto il vettore di controllo a 0
for(x=0; x<PEDINE; x++)
{
controllo[x]=0;
}
//STAMPO LE CARTELLE
stampa_scheda();
//CARICO IL TABELLONE CON I NUMERI DA 1 A 90
num=1;
for (i=0; i<9; i++)
{
for (j=0; j<10; j++)
{
tabella[i][j]=num;
num++;
}
}
estratto=0;
//INIZIO GIOCO
do
{
system ("cls");
//sostituisco con uno 0 i numeri gia usciti
for(i=0;i<NUM_USERS;i++)
{
for(j=0;j<righe;j++)
{
for(y=0;y<colonne;y++)
{
if(m_user[i].scheda[j][y]==estratto)
{
m_user[i].scheda[j][y]==estratto;
}
}
}
}
ind_vincitore=controllo_risultato();
if(ind_vincitore!=0)
{
printf("Il Giocatore %s ha fatto \n\n",m_user[ind_vincitore]);
m_user[ind_vincitore].tombola=true;
tombola_stampa();
}
//STAMPO LE CARTELLE
stampa_scheda();
//STAMPO LA TABELLA
printf("TABELLA: \n\n");
for (j=0; j<r; j++)
{
for (y=0; y<c; y++)
{
printf("%d",tabella[j][y]);
printf("\t");
}
printf("\n");
}
system("pause");
printf("\n\n");
printf("Estrazione");
for(i=0;i<3;i++)
{
Sleep(100);
printf(".");
}
//controllo sull'estrazione
do
{
giauscito=true;
estratto=rand()%90+1;
for (j=0; j<r; j++)
{
for (y=0; y<c; y++)
{
if (tabella[j][y]==estratto)
{
giauscito=false;
}
}
}
}while(giauscito==true);
printf("\n");
printf("Numero estratto: %d\n\n\n",estratto);
system ("pause");
//sostituisco con un 0 i numeri gia estratti
for (j=0; j<r; j++)
{
for (y=0; y<c; y++)
{
if(tabella[j][y]==estratto)
{
tabella[j][y]=0;
}
}
}
for(j=0;j<righe;j++)
{
for(y=0;y<colonne;y++)
{
if(m_user[i].scheda[j][y]==estratto)
{
m_user[i].scheda[j][y]=0;
}
}
}
}while(m_user[ind_vincitore].tombola==true);
printf("Vuoi estrarre un numero 1 per SI altro valore per NO:\t");
scanf("%d",&scelta);
}while(scelta==1);
}