#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include<time.h>
//definisco il tipo String
typedef char String[20];
//definisco il tipo coppia
typedef struct {
String nome_coppia;
int punteggio;
int punti_totali;
int scontri[4];
} coppia;
//definisco la funzione random che preso in input un limite genera un numero random di massimo limite
int randNum(int limite) {
return rand()%limite;
}
//Setta i colori
void setcolor(unsigned short color)
{
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hCon,color);
}
void printTitle(){
setcolor(42);
printf("BBBBBBBBBB UU UU RRRRRRRRR RRRRRRRRR AAA CCCCCCCCC OOOOOOOOO");
printf("BBBBBBBBBBB UU UU RRRRRRRRRR RRRRRRRRRR AA AA CCCCCCCCC OOOOOOOOO");
printf("BB BBB UU UU RR RR RR RR AA AA CC OO OO");
printf("BB BBB UU UU RR RR RR RR AA AA CC OO OO");
printf("BB BB UU UU RR R RR R AA AA CC OO OO");
printf("BB B UU UU RR R RR R AA AA CC OO OO");
printf("BBBBBBBBB UU UU RRRRRRRRR RRRRRRRRR AAAAAAAAAAA CC OO OO");
printf("BB B UU UU RR R RR R AA AA CC OO OO");
printf("BB BB UU UU RR RR RR RR AA AA CC OO OO");
printf("BB BBB UU UU RR R RR R AA AA CC OO OO");
printf("BB BBB UU UU RR RR RR RR AA AA CC OO OO");
printf("BBBBBBBBBBB UU UU RR R RR R AA AA CCCCCCCCC OOOOOOOOO");
printf("BBBBBBBBBB UUUUUUUU RR RR RR RR AA AA CCCCCCCCC OOOOOOOOO");
printf("--------------------------------------------------------------------------------");
printf("********************************************************************************");
printf("--------------------------------------------------------------------------------");
setcolor(44);
printf(" GESTIONE PUNTEGGI TORNEO. \n\n");
setcolor(47);
}
void salva(coppia* partecipanti, coppia* tabellone, int num_partecipanti, String nome_partita, int num_partita) {
FILE* scrittura;
if(!(scrittura=fopen(nome_partita,"w"))){
exit(1);
}
int i=0;
fprintf(scrittura, "%-3d", num_partecipanti);
fprintf(scrittura, "%d", num_partita);
for(i=0; i<num_partecipanti; i++){
fprintf(scrittura, "%-20s", partecipanti[i].nome_coppia);
fprintf(scrittura, "%-4d", partecipanti[i].punteggio);
fprintf(scrittura, "%-6d", partecipanti[i].punti_totali);
fprintf(scrittura, "%-3d%-3d%-3d%-3d", partecipanti[i].scontri[0], partecipanti[i].scontri[1], partecipanti[i].scontri[2], partecipanti[i].scontri[3]);
}
for(i=0; i<num_partecipanti; i++){
fprintf(scrittura, "%-20s", tabellone[i].nome_coppia);
fprintf(scrittura, "%-4d", tabellone[i].punteggio);
fprintf(scrittura, "%-6d", tabellone[i].punti_totali);
fprintf(scrittura, "%-3d%-3d%-3d%-3d", tabellone[i].scontri[0], tabellone[i].scontri[1], tabellone[i].scontri[2], tabellone[i].scontri[3]);
}
fclose(scrittura);
}
void trim(String nome){
int i=0;
while(nome[i]!=' '){
nome[i]=nome[i];
break;
}
}
//definisco la funzione equals che prese in input due String controlla se sono uguali
int equals(String stringa1, String stringa2) {
int i = 0;
while (stringa1[i] != 0) {
i++;
}
int j = 0;
while (stringa2[j] != 0) {
j++;
}
if (i == j) {
i = 0;
while (stringa1[i] == stringa2[i] && i < j) {
i++;
}
if (i == j) {
return 1;
} else {
return 0;
}
}
return 0;
}
//sorteggia le varie coppie per la prima partita.
void sorteggia_coppie(coppia* partecipanti, int numero_coppie, coppia* tabellone) {
int controllo[numero_coppie];
int i = 0;
for (i = 0; i < numero_coppie; i++) {
controllo[i] = 0;
}
int j = 0;
for (i = 0; i < numero_coppie; i++) {
int caso = randNum(numero_coppie);
while (controllo[caso] == 1) {
caso = randNum(numero_coppie);
}
tabellone[i] = partecipanti[caso];
controllo[caso] = 1;
}
}
//assegna i punteggi e i punti alle squadre
void assegna_punteggi(coppia* squadra1, coppia* squadra2, int punti_squadra1, int punti_squadra2) {
int punti_squadra_max;
int punti_squadra_min;
coppia* squadra_max;
coppia* squadra_min;
coppia max;
coppia min;
if (punti_squadra1 > punti_squadra2) {
punti_squadra_max = punti_squadra1;
squadra_max = squadra1;
punti_squadra_min = punti_squadra2;
squadra_min = squadra2;
} else {
punti_squadra_max = punti_squadra2;
squadra_max = squadra2;
punti_squadra_min = punti_squadra1;
squadra_min = squadra1;
}
max = *squadra_max;
min = *squadra_min;
if (punti_squadra_max - punti_squadra_min <= 50) {
max.punteggio = max.punteggio + 10;
min.punteggio = min.punteggio + 10;
} else if (punti_squadra_max - punti_squadra_min <= 150) {
max.punteggio = max.punteggio + 11;
min.punteggio = min.punteggio + 9;
} else if (punti_squadra_max - punti_squadra_min <= 250) {
max.punteggio = max.punteggio + 12;
min.punteggio = min.punteggio + 8;
} else if (punti_squadra_max - punti_squadra_min <= 350) {
max.punteggio = max.punteggio + 13;
min.punteggio = min.punteggio + 7;
} else if (punti_squadra_max - punti_squadra_min <= 500) {
max.punteggio = max.punteggio + 14;
min.punteggio = min.punteggio + 6;
} else if (punti_squadra_max - punti_squadra_min <= 650) {
max.punteggio = max.punteggio + 15;
min.punteggio = min.punteggio + 5;
} else if (punti_squadra_max - punti_squadra_min <= 850) {
max.punteggio = max.punteggio + 16;
min.punteggio = min.punteggio + 4;
} else if (punti_squadra_max - punti_squadra_min <= 1050) {
max.punteggio = max.punteggio + 17;
min.punteggio = min.punteggio + 3;
} else if (punti_squadra_max - punti_squadra_min <= 1250) {
max.punteggio = max.punteggio + 18;
min.punteggio = min.punteggio + 2;
} else if (punti_squadra_max - punti_squadra_min <= 1500) {
max.punteggio = max.punteggio + 19;
min.punteggio = min.punteggio + 1;
} else {
max.punteggio = max.punteggio + 20;
min.punteggio = min.punteggio + 0;
}
*squadra_max = max;
*squadra_min = min;
}
//ritorna l'id della coppia con nome nome_coppia
int id_coppia(coppia* partecipanti, String nome_coppia, int numero_coppie) {
int i = 0;
for (i = 0; i < numero_coppie; i++) {
if (equals(partecipanti[i].nome_coppia, nome_coppia)) {
return i;
}
}
return -1;
}
//richiede l'inserimento dei punteggi all'utente
void inserisci_punteggi(coppia* tabellone, int numero_coppie, coppia* partecipanti, int id) {
setcolor(46);
printf("\nELENCO DELLE SFIDE\n\n");
setcolor(47);
int i = 0;
if (id < 3) {
for (i = 0; i < numero_coppie; i = i + 2) {
int n = i + 1;
//controlla, solo le prime tre partite, che due coppie non abbiano già giocato
while (controlla_sfida(tabellone[i], id_coppia(partecipanti, tabellone[i + 1].nome_coppia, numero_coppie)) == 0) {
coppia aux = tabellone[i + 1];
tabellone[i + 1] = tabellone[n + 1];
tabellone[n + 1] = aux;
n++;
}
}
}
for (i = 0; i < numero_coppie; i = i + 2) {
printf("%s vs %s\n\n", tabellone
[i
].
nome_coppia, tabellone
[i
+ 1
].
nome_coppia);
}
setcolor(46);
printf("INSERIMENTO PUNTEGGI SFIDE\n\n");
setcolor(47);
for (i = 0; i < numero_coppie; i = i + 2) {
int punti_squadra1;
int punti_squadra2;
printf("Inserimento punteggi della sfida %s vs %s", tabellone
[i
].
nome_coppia, tabellone
[i
+ 1
].
nome_coppia);
printf("\n\nInserire punteggio della squadra %s: ", tabellone
[i
].
nome_coppia);
tabellone[i].scontri[id] = id_coppia(partecipanti, tabellone[i + 1].nome_coppia, numero_coppie);
tabellone[i + 1].scontri[id] = id_coppia(partecipanti, tabellone[i].nome_coppia, numero_coppie);
scanf("%d", &punti_squadra1);
tabellone[i].punti_totali = tabellone[i].punti_totali + punti_squadra1;
printf("\n\nInserire punteggio della squadra %s: ", tabellone
[i
+ 1
].
nome_coppia);
scanf("%d", &punti_squadra2);
tabellone[i + 1].punti_totali = tabellone[i + 1].punti_totali + punti_squadra1;
assegna_punteggi(&tabellone[i], &tabellone[i + 1], punti_squadra1, punti_squadra2);
}
}
//ritorna 0 se la coppia ha già sfidato l'id e 1 se non lo ha fatto
int controlla_sfida(coppia partecipanti, int id) {
int i = 0;
for (i = 0; i < 4; i++) {
if (partecipanti.scontri[i] == id) {
return 0;
}
}
return 1;
}
//stampa la classifica e riorganizza il tabellone
void stampa_classifica(coppia* tabellone, int numero_coppie) {
int i = 0;
int j = 0;
for (i = 0; i < numero_coppie; i++) {
for (j = 0; j < numero_coppie; j++) {
if (tabellone[i].punteggio > tabellone[j].punteggio) {
coppia aux = tabellone[j];
tabellone[j] = tabellone[i];
tabellone[i] = aux;
}
}
}
for (i = 0; i < numero_coppie; i++) {
for (j = 0; j < numero_coppie; j++) {
if (tabellone[i].punteggio == tabellone[j].punteggio) {
if (tabellone[i].punti_totali > tabellone[j].punti_totali) {
coppia aux = tabellone[j];
tabellone[j] = tabellone[i];
tabellone[i] = aux;
}
}
}
}
system("cls");
printTitle();
setcolor(46);
setcolor(47);
for (i = 0; i < numero_coppie; i++) {
printf("%s - %d\n", tabellone
[i
].
nome_coppia, tabellone
[i
].
punteggio);
}
}
void carica(String nome_partita){
FILE* lettura;
if(!(lettura=fopen(nome_partita,"r"))){
exit(1);
}
String nome;
int numero_coppie;
fscanf(lettura,"%3d", &numero_coppie);
int num_partita;
fscanf(lettura, "%d", &num_partita);
coppia tabellone[numero_coppie];
coppia partecipanti[numero_coppie];
int i=0;
for(i=0; i<numero_coppie; i++){
fscanf(lettura,"%20s", &partecipanti[i].nome_coppia);
trim(nome);
int punteggio;
fscanf(lettura,"%4d",&punteggio);
int punti_totali;
fscanf(lettura,"%6d",&punti_totali);
int scontri[4];
fscanf(lettura,"%3d%3d%3d%3d",&scontri[0],&scontri[1],&scontri[2],&scontri[3]);
partecipanti[i].punteggio=punteggio;
partecipanti[i].punti_totali=punti_totali;
int j=0;
for(j=0; j<4; j++){
partecipanti[i].scontri[j]=scontri[j];
}
}
for(i=0; i<numero_coppie; i++){
fscanf(lettura,"%20s", &tabellone[i].nome_coppia);
trim(nome);
int punteggio;
fscanf(lettura,"%4d",&punteggio);
int punti_totali;
fscanf(lettura,"%6d",&punti_totali);
int scontri[4];
fscanf(lettura,"%3d%3d%3d%3d",&scontri[0],&scontri[1],&scontri[2],&scontri[3]);
tabellone[i].punteggio=punteggio;
tabellone[i].punti_totali=punti_totali;
int j=0;
for(j=0; j<4; j++){
tabellone[i].scontri[j]=scontri[j];
}
}
for (i = num_partita; i < 3; i++) {
inserisci_punteggi(tabellone, numero_coppie, partecipanti, (i + 1));
stampa_classifica(tabellone, numero_coppie);
salva(partecipanti,tabellone, numero_coppie, nome_partita, (i+1));
}
}
int main(int argc, char *argv[]) {
system("color 2f");
system("title Burraco, gestione punteggi torneo!");
srand(time(NULL));
int numero_coppie;
int i = 0;
char caricare;
printTitle();
printf("Vuoi caricare un torneo salvato? s/n: ");
scanf("%s", &caricare);
system("cls");
printTitle();
if(caricare=='n'){
String nome_partita;
printf("Inserire il nome della partita (per il salvataggio): ");
scanf("%s", nome_partita);
system("cls");
printTitle();
printf("Inserire numero di coppie partecipanti (multiplo di 4): ");
scanf("%d", &numero_coppie);
while (numero_coppie % 4 != 0) {
system("cls");
printTitle();
printf("ERROR: il numero inserito deve essere muliplo di 4\n");
printf("\nInserire numero di coppie partecipanti (multiplo di 4): ");
scanf("%d", &numero_coppie);
}
coppia partecipanti[numero_coppie];
i=0;
while(i<numero_coppie) {
printf("\nInserire nome della %d coppia: ", (i
+ 1
));
scanf("%s", partecipanti[i].nome_coppia);
partecipanti[i].punteggio = 0;
partecipanti[i].punti_totali = 0;
partecipanti[i].scontri[0]=numero_coppie;
partecipanti[i].scontri[1]=numero_coppie;
partecipanti[i].scontri[2]=numero_coppie;
partecipanti[i].scontri[3]=numero_coppie;
i++;
}
system("cls");
printTitle();
coppia tabellone[numero_coppie];
sorteggia_coppie(partecipanti, numero_coppie, tabellone);
inserisci_punteggi(tabellone, numero_coppie, partecipanti, 0);
stampa_classifica(tabellone, numero_coppie);
salva(partecipanti,tabellone, numero_coppie, nome_partita, 0);
for (i = 0; i < 3; i++) {
inserisci_punteggi(tabellone, numero_coppie, partecipanti, (i + 1));
stampa_classifica(tabellone, numero_coppie);
salva(partecipanti,tabellone, numero_coppie, nome_partita, (i+1));
}
}else{
String nome_partita;
printf("Nome della partita che si vuole caricare: ");
scanf("%s",&nome_partita);
system("cls");
printTitle();
carica(nome_partita);
}
system("PAUSE");
return 0;
}