Modifiche varie

*Migliorato il metodo per centrare il testo
*Reso il codice più leggibile
This commit is contained in:
Rnhmjoj 2013-10-08 16:54:41 +02:00
parent 48d5ff12f5
commit f516949334
2 changed files with 133 additions and 105 deletions

150
main.c
View File

@ -1,4 +1,5 @@
#include "tris.h" #include "tris.h"
int main (){ int main (){
int vittoria; int vittoria;
int difficolta; int difficolta;
@ -7,31 +8,39 @@ int main (){
do{ do{
giocatore=1,vittoria=0; giocatore=1,vittoria=0;
scelta=0, difficolta=0, mossa=0; scelta=0, difficolta=0, mossa=0;
/*Menu d'inizio*/ /*Menu d'inizio*/
system(clear); system(clear);
printf(SOTTOLINEATO GIALLO"\n Tris in stile C \n\n" RESET BIANCO); printf("\n%-64s%-70s%s\n\n", SOTTOLINEATO GIALLO, "Tris in stile C", RESET BIANCO);
printf(ROSSO" [1]"RESET BIANCO" Partita con 2 giocatori\n"); printf("\n%-53s%s%s %s\n", ROSSO, "[1]", BIANCO, "Partita con 2 giocatori");
printf(ROSSO" [2]"RESET BIANCO" Partita singolo giocatore\n"); printf("\n%-53s%s%s %s\n", ROSSO, "[2]", BIANCO, "Partita singolo giocatore");
if(!os) if(!os)
printf(ROSSO" [3]"RESET BIANCO" Modalit%c di input\n",133); printf("\n%-53s%s%s %s%c %s\n", ROSSO, "[3]", BIANCO, "Modalit", 133, "di input");
else else
printf(ROSSO" [3]"RESET BIANCO" Modalità di input \n"); printf("\n%-53s%s%s %s\n", ROSSO, "[3]", BIANCO, "Modalità di input");
printf(ROSSO" [4]"RESET BIANCO" Informazioni\n"); printf("\n%-53s%s%s %s\n", ROSSO, "[4]", BIANCO, "Informazioni");
printf(ROSSO" [5]"RESET BIANCO" Esci\n"); printf("\n%-53s%s%s %s\n", ROSSO, "[5]", BIANCO, "Esci");
scanf("\n%d",&scelta); scanf("\n%d",&scelta);
switch(scelta){ switch(scelta){
/*case per la partita con 2 giocatori*/ /*case per la partita con 2 giocatori*/
case 1:{ case 1:{
/*Vuota la tabella, pulisce lo schermo e la stampa*/ /*Vuota la tabella, pulisce lo schermo e la stampa*/
vuota(); vuota();
system(clear); system(clear);
stampa(); stampa();
/*ciclo che contiene la partita. Dura fino alla vittoria*/ /*ciclo che contiene la partita. Dura fino alla vittoria*/
do{ do{
/*Legge la mossa del giocatore*/ /*Legge la mossa del giocatore*/
leggimossa(); leggimossa();
system(clear); system(clear);
/*Conteggio delle mosse, assegnazione del simbolo alle coordinate scelte e stampa della tabella*/
/* conteggio delle mosse,
* assegnazione del simbolo alle coordinate scelte,
* stampa della tabella,
*/
mossa++; mossa++;
tabella[i][k]=giocatore; tabella[i][k]=giocatore;
stampa(); stampa();
@ -47,43 +56,46 @@ int main (){
giocatore=1; giocatore=1;
} }
while(!vittoria && mossa<M*M); while(!vittoria && mossa<M*M);
/*Stampa il risultato della partita, mette in pausa, rompe lo switch e ritorna al menu*/
if(controlla(1)==-1){ /*Stampa il risultato della partita,
printf(ROSSO " Pareggio.\n"); * mette in pausa,
* rompe lo switch,
* ritorna al menu
*/
if(controlla(1)==-1)
printf("%-34s%s\n", ROSSO, "Pareggio.");
else
printf("%-26s%s\n%-20s %d.\n\n", ROSSO, "Partita terminata.", "Ha vinto il giocatore", giocatore);
pausa(); pausa();
}
else{
printf(ROSSO " Partita terminata.\n Ha vinto il giocatore %d.\n\n",giocatore);
pausa();
}
break; break;
} }
/*Case che contiene la partita singolo giocatore*/ /*Case che contiene la partita singolo giocatore*/
case 2:{ case 2:{
vuota(); vuota();
/*ciclo per scegliere la difficolta del gioco*/ /*ciclo per scegliere la difficolta del gioco*/
system(clear);
do{ do{
system(clear);
if(!os) if(!os)
printf(SOTTOLINEATO GIALLO"\n Scegli la difficolt%c:\n\n"RESET BIANCO ,133); printf("\n%-60s%-75s%c%s:\n\n", SOTTOLINEATO GIALLO, "Scegli la difficolt", 133, RESET BIANCO);
else else
printf(SOTTOLINEATO GIALLO"\n Scegli la difficoltà: \n\n" RESET BIANCO); printf("\n%-60s%-75s%s\n\n", SOTTOLINEATO GIALLO, "Scegli la difficoltà:", RESET BIANCO);
printf(ROSSO" [1]"RESET BIANCO" Facile\n"); printf("%-60s%s%s %s\n", ROSSO, "[1]", BIANCO, "Facile");
printf(ROSSO" [2]"RESET BIANCO" Medio\n"); printf("%-60s%s%s %s\n", ROSSO, "[2]", BIANCO, "Medio");
printf(ROSSO" [3]"RESET BIANCO" Difficile\n"); printf("%-60s%s%s %s\n", ROSSO, "[3]", BIANCO, "Difficile");
getchar(); scanf("\n%d", &difficolta);
scanf("%d",&difficolta);
if(difficolta < 1 || difficolta > 3){ if(difficolta < 1 || difficolta > 3){
printf(GRASSETTO ROSSO"\n Scelta non valida.\n\n" RESET BIANCO); printf("\n%-62s%s%s\n\n", GRASSETTO ROSSO, "Scelta non valida.", RESET BIANCO);
aspetta(2); aspetta(2);
} }
}while(difficolta < 1 || difficolta > 3); }while(difficolta < 1 || difficolta > 3);
system(clear); system(clear);
stampa(); stampa();
/*Ciclo che contiene la partita fino alla vittoria o al pareggio*/ /*Ciclo che contiene la partita fino alla vittoria o al pareggio*/
do{ do{
/*Turno del giocatore umano*/ /*Turno del giocatore umano*/
if(giocatore==1){ if(giocatore==1){
leggimossa(); leggimossa();
@ -92,11 +104,13 @@ int main (){
stampa(); stampa();
aspetta(1); aspetta(1);
} }
/*Turno del computer*/ /*Turno del computer*/
else{ else{
system(clear); system(clear);
printf(ROSSO"\n Gioco io ora...\n" RESET BIANCO); printf("\n%-60s%s%s\n", ROSSO, "Gioco io ora...", RESET BIANCO);
spinner(1); spinner(1);
/*switch che contiene la mossa del computer in base alla difficolta scelta*/ /*switch che contiene la mossa del computer in base alla difficolta scelta*/
switch(difficolta){ switch(difficolta){
case 1:{ case 1:{
@ -112,14 +126,19 @@ int main (){
break; break;
} }
} }
printf( ROSSO "\n Ok, ho scelto.\n" RESET BIANCO); printf("\n%-60s%s%s\n", ROSSO, "Ok, ho scelto.", RESET BIANCO);
stampa(); stampa();
aspetta(1); aspetta(1);
system(clear); system(clear);
} }
/*Conteggio delle mosse, assegnazione del simbolo alle coordinate scelte e stampa della tabella*/
/*Conteggio delle mosse,
* assegnazione del simbolo alle coordinate scelte,
* stampa della tabella
*/
mossa++; mossa++;
stampa(); stampa();
/*Controlla se qualcuno ha vinto*/ /*Controlla se qualcuno ha vinto*/
if(controlla(1) || controlla(2)){ if(controlla(1) || controlla(2)){
vittoria=1; vittoria=1;
@ -137,47 +156,46 @@ int main (){
printf(ROSSO); printf(ROSSO);
/*Stampa il risultato della partita, mette in pausa, rompe lo switch e ritorna al menu*/ /*Stampa il risultato della partita, mette in pausa, rompe lo switch e ritorna al menu*/
if(controlla(1)==-1 && difficolta==1) if(controlla(1)==-1 && difficolta==1)
printf(" Pareggio, potevi fare di meglio.\n\n"); printf("%-45s%s", "", "Pareggio, potevi fare di meglio.");
else{ else{
if(controlla(1)==-1 && difficolta==2) if(controlla(1)==-1 && difficolta==2)
printf(" Pareggio, ci eri quasi, riprova...\n\n"); printf("%-45s%s", "", "Pareggio, ci eri quasi, riprova...");
else{ else{
if(controlla(1)==-1 && difficolta==3){ if(controlla(1)==-1 && difficolta==3){
if(!os) if(!os)
printf(" Pareggio, ti %c andata gi%c bene...\n\n",138,133); printf("%-45s%s %c %s%c %s", "", "Pareggio, ti", 138, "andata gi", 133, ", bene...");
else else
printf(" Pareggio, ti è andata già bene...\n\n"); printf("%-45s%s", "", "Pareggio, ti è andata già bene...");
} }
} }
} }
if(controlla(2) && difficolta==1) if(controlla(2) && difficolta==1)
printf(" Hai perso. Ti sei fatto battere da delle mosse pseudocasuali, complimenti.\n\n"); printf("%-25s%s", "", "Hai perso. Ti sei fatto battere da delle mosse pseudocasuali, complimenti.");
else{ else{
if(controlla(2) && difficolta==2) if(controlla(2) && difficolta==2)
printf(" Hai perso. Dai... lo potevi battere.\n\n"); printf("%-45s%s", "", "Hai perso. Dai... lo potevi battere.");
else{ else{
if(controlla(2) && difficolta==3) if(controlla(2) && difficolta==3)
printf(" Lo sai... non puoi battere il minimax.\n\n"); printf("%-45s%s", "", "Lo sai... non puoi battere il minimax.");
} }
} }
if(controlla(1) && difficolta==1)
printf(" Bravo, hai battuto uno che mette crocette a caso!\n\n");
if(controlla(1) && difficolta==1)
printf("%-38s%s", "", "Bravo, hai battuto uno che mette crocette a caso!");
else{ else{
if(controlla(1) && difficolta==2){ if(controlla(1) && difficolta==2){
if(!os) if(!os)
printf(" Bravo, non %c stato facile!\n\n",138); printf("%-48s%s %c %s", "", "Bravo, non", 138, "stato facile!");
else else
printf(" Bravo, non è stato facile!\n\n"); printf("%-48s%s", "", "Bravo, non è stato facile!");
} }
else{ else{
if(controlla(1) && difficolta==3){ if(controlla(1) && difficolta==3){
printf(" Impossibile!! Non hai vinto!!!\n"); printf("%-48s%s", "", "Impossibile!! Non hai vinto!!!");
if(!os) if(!os)
printf(" Sei vedi questo messaggio sicuramente c'%c qualcosa che non va.\n\n",138); printf("%-30s%s%c %s", "", "Sei vedi questo messaggio sicuramente c'",138, "qualcosa che non va.");
else else
printf(" Sei vedi questo messaggio sicuramente c'è qualcosa che non va.\n\n"); printf("%-30s%s", "", "Sei vedi questo messaggio sicuramente c'è qualcosa che non va.");
} }
} }
} }
@ -185,56 +203,60 @@ int main (){
break; break;
} }
case 3:{ case 3:{
/*Case per la scelta delle modalità di input*/ /*Case per la scelta delle modalità di input*/
system(clear); system(clear);
do{ do{
system(clear); system(clear);
printf("\n Vuoi usare il tastierino numerico o le coordinate"ROSSO"[T,C]"RESET BIANCO"?\n"); printf("%-34s %s%s%s%s%s\n", "", "Vuoi usare il tastierino numerico o le coordinate", ROSSO, "[T,C]", BIANCO, "?");
getchar();
scanf("\n%c",&a); scanf("\n%c",&a);
}while(a!='T' && a!='C' && a!='t' && a!='c'); }while(a!='T' && a!='C' && a!='t' && a!='c');
if(a=='T' || a=='t') if(a=='T' || a=='t')
tastierino=1; tastierino=1;
else else
tastierino=0; tastierino=0;
if(tastierino==1){ if(tastierino==1){
system(clear); system(clear);
printf(SOTTOLINEATO GIALLO"\n Istruzioni per giocare: \n\n" RESET BIANCO); printf("\n%-60s%-74s%s\n\n", SOTTOLINEATO GIALLO, "Istruzioni per giocare", RESET BIANCO);
printf(ROSSO"\n *"RESET BIANCO" Usa il tastierino come se fosse la tabella del tris.\n"); printf("\n%-40s%s%s %s\n", ROSSO, "*", BIANCO, "Usa il tastierino come se fosse la tabella del tris.");
if (!os) if (!os)
printf(ROSSO" *"RESET BIANCO" Ad esempio il tasto 5 %c il centro.\n",138); printf("\n%-40s%s%s %s %c %s\n" ,ROSSO, "*", BIANCO, "Ad esempio il tasto 5", 138, "il centro.");
else else
printf(ROSSO" *"RESET BIANCO" Ad esempio il tasto 5 è il centro.\n"); printf("\n%-40s%s%s %s\n", ROSSO, "*", BIANCO, "Ad esempio il tasto 5 è il centro.");
printf(ROSSO" *"RESET BIANCO" Divertiti.\n\n"); printf("\n%-40s%s%s %s\n\n", ROSSO, "*", BIANCO, "Divertiti.");
} }
else{ else{
system(clear); system(clear);
printf(SOTTOLINEATO GIALLO"\n Istruzioni per giocare: \n\n" RESET BIANCO); printf("\n%-60s%-74s%s\n\n", SOTTOLINEATO GIALLO, "Istruzioni per giocare", RESET BIANCO);
if(!os) if(!os)
printf(ROSSO" * "RESET BIANCO"Il tris %c contenuto in una tabella numerica:\n",138); printf("%-35s%s %s %s %c %s\n", ROSSO, "*", BIANCO, "Il tris", 138, "contenuto in una tabella numerica:");
else else
printf(ROSSO" * "RESET BIANCO"Il tris è contenuto in una tabella numerica:\n"); printf("%-35s%s %s%s\n", ROSSO, "*", BIANCO, "Il tris è contenuto in una tabella numerica:");
printf(" Le coordinata della mosssa vanno in indicate con: x,y.\n"); printf("%-37s%s\n","", "Le coordinata della mosssa vanno in indicate con: x,y.");
printf(" x sono le righe e y le colonne.\n\n"); printf("%-37s%s\n\n", "", "x sono le righe e y le colonne.");
printf(ROSSO" * "RESET BIANCO"Ricordati che stai parlando di un'array: quindi si conta da 0:\n"); printf("%-35s%s%s %s\n", ROSSO, "*", BIANCO, "Ricordati che stai parlando di un'array: quindi si conta da 0:");
if(!os) if(!os)
printf(" la casella nella 1%c riga nella 1%c colonna ha quindi coordinate 0,0.\n\n",248,248); printf("%-37s%c %s%c %s\n\n", "la casella nella 1", 248, "riga nella 1", 248, "colonna ha quindi coordinate 0,0.");
else else
printf(" la casella nella 1° riga nella 1° colonna ha quindi coordinate 0,0.\n\n"); printf("%-37s%s\n\n", "", "la casella nella 1° riga nella 1° colonna ha quindi coordinate 0,0.");
printf(ROSSO" * "RESET BIANCO"Divertiti.\n\n"); printf("%-35s%s %s%s\n\n", ROSSO, "*", BIANCO, "Divertiti.");
} }
pausa(); pausa();
break; break;
} }
case 4:{ case 4:{
/*About*/ /*About*/
system(clear); system(clear);
printf(SOTTOLINEATO GIALLO"\n Tris in stile C \n\n" RESET BIANCO); printf("\n%-64s%-70s%s\n\n", SOTTOLINEATO GIALLO, "Tris in stile C", RESET BIANCO);
if (!os) if (!os)
printf("\n Questo gioco %c stato sviluppato da Michele Guerini Rocco in una fredda notte \n di premiazioni e sistemato per l'intero anno successivo.\n\n",138); printf("%-28s%s %c %s\n%-28s%s\n\n", "", "Questo gioco", 138, "stato sviluppato da Michele Guerini Rocco in una fredda", "", "notte di premiazioni e sistemato per l'intero anno successivo.");
else else
printf("\n Questo gioco è stato sviluppato da Michele Guerini Rocco in una fredda notte \n di premiazioni e sistemato per l'intero anno successivo.\n\n"); printf("%-28s%s\n%-28s%s\n\n", "", "Questo gioco è stato sviluppato da Michele Guerini Rocco in una fredda", "", "notte di premiazioni e sistemato per l'intero anno successivo.");
pausa(); pausa();
break; break;
} }

22
tris.c
View File

@ -30,7 +30,7 @@ void stampa(){
int i,k; int i,k;
printf("\n\n\n"); printf("\n\n\n");
for(i=0;i<M;i++) { for(i=0;i<M;i++) {
printf(RESET" "); printf("%-60s", RESET);
for(k=0;k<M;k++) { for(k=0;k<M;k++) {
if(tabella[i][k]==1) if(tabella[i][k]==1)
printf(GIALLO" O "); printf(GIALLO" O ");
@ -59,22 +59,25 @@ void vuota() {
void leggimossa(){ void leggimossa(){
int tasto=0; int tasto=0;
fflush(stdin); fflush(stdin);
/*Se è attivo il tastierino*/ /*Se è attivo il tastierino*/
if(tastierino==1){ if(tastierino==1){
do{ do{
tasto=0; tasto=0;
fflush(stdin); fflush(stdin);
/*2 giocatori*/ /*2 giocatori*/
if(scelta==2) if(scelta==2)
printf(GIALLO" Fai la tua mossa:\n"RESET BIANCO); printf("%-59s%s%s\n", GIALLO, "Fai la tua mossa:", BIANCO);
else else
printf(GIALLO" Gioca il giocatore %d.\n Fai la tua mossa:\n"RESET BIANCO,giocatore); printf("%58s%s %d\n%-55s%s%s\n", GIALLO, "Gioca il giocatore", giocatore, "", "Fai la tua mossa:",BIANCO);
if(os) if(os)
tasto=mgetchar(); tasto=mgetchar();
else else
do{ do{
tasto=getch(); tasto=getch();
}while(kbhit()); }while(kbhit());
switch(tasto){ switch(tasto){
case 49:{ case 49:{
i=2; i=2;
@ -126,24 +129,27 @@ void leggimossa(){
if(tabella[i][k]==1 || tabella[i][k]==2 || i<0 || k<0 || i>=M || k>=M){ if(tabella[i][k]==1 || tabella[i][k]==2 || i<0 || k<0 || i>=M || k>=M){
system(clear); system(clear);
stampa(); stampa();
printf(GRASSETTO ROSSO"\n Mossa non valida,riprova.\n\n"RESET BIANCO); printf("%-59s%s%s\n\n", GRASSETTO ROSSO, "Mossa non valida, riprova.", RESET BIANCO);
} }
}while(tabella[i][k]==1 || tabella[i][k]==2 || i<0 || k<0 || i>=M || k>=M); }while(tabella[i][k]==1 || tabella[i][k]==2 || i<0 || k<0 || i>=M || k>=M);
} }
/*Mossa con coordinate*/ /*Mossa con coordinate*/
else{ else{
do{ do{
/*Giocatore singolo*/ /*Giocatore singolo*/
if(scelta==2) if(scelta==2)
printf(GIALLO" Tocca a te.\n Inserisci coordinate della mossa"ROSSO"[Riga,colonna]:\n" RESET BIANCO); printf("%-63s%s\n%-40s%s%s %s%s\n", GIALLO, "Tocca a te.", "", "Inserisci coordinate della mossa", ROSSO, "[Riga,colonna]:", BIANCO);
/*2 giocatori*/ /*2 giocatori*/
else else
printf(GIALLO" Gioca il giocatore %d.\n Inserisci coordinate della mossa"ROSSO"[Riga,colonna]:\n" RESET BIANCO,giocatore); printf("%-58s%s %d\n%-40s%s %s%s%s\n", GIALLO, "Gioca il giocatore", giocatore, "", "Inserisci coordinate della mossa", ROSSO, "[Riga,colonna]:", BIANCO);
scanf("%d,%d",&i,&k); scanf("%d,%d",&i,&k);
if(tabella[i][k]==1 || tabella[i][k]==2 || i<0 || k<0 || i>=M || k>=M){ if(tabella[i][k]==1 || tabella[i][k]==2 || i<0 || k<0 || i>=M || k>=M){
system(clear); system(clear);
stampa(); stampa();
printf(GRASSETTO ROSSO"\n\n Coordinate non valide,riprova.\n\n\n"RESET BIANCO); printf("\n\n%-56s%s%s\n\n\n", GRASSETTO ROSSO, "Coordinate non valide, riprova.", RESET BIANCO);
} }
}while(tabella[i][k]==1 || tabella[i][k]==2 || i<0 || k<0 || i>=M || k>=M); }while(tabella[i][k]==1 || tabella[i][k]==2 || i<0 || k<0 || i>=M || k>=M);
system(clear); system(clear);
@ -299,7 +305,7 @@ void aspetta(int t){
/*Caricamento stile Ajax*/ /*Caricamento stile Ajax*/
void spinner(int tempo) { void spinner(int tempo) {
char spinner[] = "/-\\|"; char spinner[] = "/-\\|";
printf(GIALLO"\n "); printf("\n%-66s", GIALLO);
for (int i=0; i<(tempo*10);i++){ for (int i=0; i<(tempo*10);i++){
putchar(spinner[i%4]); putchar(spinner[i%4]);
fflush(stdout); fflush(stdout);