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