Risolti problemi di compatibilità e risolti alcuni bug

*Abilmente esclusa int mgetchar() dalla compilazione su Windows;
*void Sleep(int milliseconds) di windows.h aggiunta;
*Risolto un bug che provocava un ciclo infinito dopo che un char rimane
nella stdin.
*Aggiornato il README.md;
This commit is contained in:
Rnhmjoj 2012-11-21 01:07:30 +01:00
parent 09e63a2de0
commit f5630398bf
5 changed files with 66 additions and 45 deletions

View File

@ -12,16 +12,24 @@ Le mosse del computer sono pseudocasuali (livello facile) o calcolate usando l'a
L'output è a colori grazie alle sequenze di escape ANSI. L'output è a colori grazie alle sequenze di escape ANSI.
Per visualizzare decentemente il testo è necessario un terminale compatibile. Per visualizzare decentemente il testo è necessario un terminale compatibile.
Su Windows si può usare ANSIcon che ripristina il supporto al driver ANSI.SYS per le console Win32. Su Windows si può usare ANSIcon che ripristina il supporto al driver ANSI.SYS per le console Win32.
Link: http://github.com/adoxa/ansicon
Link: http://github.com/adoxa/ansicon ### Compilazione
### Installazione
Per compilare il programma su UNIX usa _make_. Per compilare il programma su UNIX usa _make_.
Su windows usa un compilatore qualisasi o _mingw32-make_ se hai MinGW.
Su windows usa un compilatore qualisasi o _make_ se hai MinGW Link: http://www.mingw.org
Link: http://www.mingw.org
### Istruzioni ### Istruzioni
Le istruzioni su come giocare sono cotenute nel programma stesso. Le istruzioni su come giocare sono cotenute nel programma stesso.
### Avvisi
Se provando a compilare ricevi avvisi del tipo:
warning: implicit declaration of function getch
warning: implicit declaration of function kbhit
oppure:
warning: implicit declaration of function mgetchar
è perchè stai compilando rispettivamente su UNIX o su Windows e queste funzioni vengono sostituite dalle loro controparti per quel sistema dato che non sono portabili. Anche se sono nel sorgente e nel file oggetto non verranno mai eseguite.

BIN
Tris in stile C Executable file

Binary file not shown.

35
main.c
View File

@ -2,23 +2,23 @@
int main (){ int main (){
int vittoria; int vittoria;
int difficolta; int difficolta;
tastierino=0; tastierino=1;
a='a'; a='a';
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(SOTTOLINEATO GIALLO"\n Tris in stile C \n\n" RESET BIANCO);
printf(ROSSO" [1]"RESET BIANCO" Partita con 2 giocatori\n"); printf(ROSSO" [1]"RESET BIANCO" Partita con 2 giocatori\n");
printf(ROSSO" [2]"RESET BIANCO" Partita singolo giocatore\n"); printf(ROSSO" [2]"RESET BIANCO" Partita singolo giocatore\n");
if(!os) if(!os)
printf(ROSSO" [3]"RESET BIANCO" Modalit%c di input\n",133); printf(ROSSO" [3]"RESET BIANCO" Modalit%c di input\n",133);
else else
printf(ROSSO" [3]"RESET BIANCO" Modalità di input \n"); printf(ROSSO" [3]"RESET BIANCO" Modalità di input \n");
printf(ROSSO" [4]"RESET BIANCO" Informazioni\n"); printf(ROSSO" [4]"RESET BIANCO" Informazioni\n");
printf(ROSSO" [5]"RESET BIANCO" Esci\n"); printf(ROSSO" [5]"RESET BIANCO" Esci\n");
scanf("%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:{
@ -61,18 +61,24 @@ int main (){
/*Case che contiene la partita singolo giocatore*/ /*Case che contiene la partita singolo giocatore*/
case 2:{ case 2:{
vuota(); vuota();
system(clear);
/*ciclo per scegliere la difficolta del gioco*/ /*ciclo per scegliere la difficolta del gioco*/
system(clear);
do{ do{
if(!os) if(!os)
printf(SOTTOLINEATO GIALLO"\n Scegli la difficolt%c:\n\n"RESET BIANCO ,133); printf(SOTTOLINEATO GIALLO"\n Scegli la difficolt%c:\n\n"RESET BIANCO ,133);
else else
printf(SOTTOLINEATO GIALLO"\n Scegli la difficoltà: \n\n" RESET BIANCO); printf(SOTTOLINEATO GIALLO"\n Scegli la difficoltà: \n\n" RESET BIANCO);
printf(ROSSO" [1]"RESET BIANCO" Facile\n"); printf(ROSSO" [1]"RESET BIANCO" Facile\n");
printf(ROSSO" [2]"RESET BIANCO" Medio\n"); printf(ROSSO" [2]"RESET BIANCO" Medio\n");
printf(ROSSO" [3]"RESET BIANCO" Difficile\n"); scanf("%d",&difficolta); printf(ROSSO" [3]"RESET BIANCO" Difficile\n");
if(difficolta<1||difficolta>3) getchar();
scanf("%d",&difficolta);
if(difficolta<1||difficolta>3){
printf(GRASSETTO ROSSO"\n Scelta non valida.\n\n" RESET BIANCO); printf(GRASSETTO ROSSO"\n Scelta non valida.\n\n" RESET BIANCO);
aspetta(2);
}
}while(difficolta<1||difficolta>3); }while(difficolta<1||difficolta>3);
system(clear); system(clear);
stampa(); stampa();
@ -184,6 +190,7 @@ int main (){
do{ do{
system(clear); system(clear);
printf("\n Vuoi usare il tastierino numerico o le coordinate"ROSSO"[T,C]"RESET BIANCO"?\n"); printf("\n Vuoi usare il tastierino numerico o le coordinate"ROSSO"[T,C]"RESET BIANCO"?\n");
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')

41
tris.c
View File

@ -3,25 +3,26 @@
/*Funzioni*/ /*Funzioni*/
/*Legge dalla tastiera senza usare il buffer*/ /*Legge dalla tastiera senza usare il buffer*/
int mgetchar(){
char buf=0; UX int mgetchar(){
struct termios old={0}; UX char buf=0;
if(tcgetattr(0,&old)<0) UX struct termios old={0};
perror("tcsetattr()"); UX if(tcgetattr(0,&old)<0)
old.c_lflag&=~ICANON; UX perror("tcsetattr()");
old.c_lflag&=~ECHO; UX old.c_lflag&=~ICANON;
old.c_cc[VMIN]=1; UX old.c_lflag&=~ECHO;
old.c_cc[VTIME]=0; UX old.c_cc[VMIN]=1;
if(tcsetattr(0,TCSANOW,&old)<0) UX old.c_cc[VTIME]=0;
perror("tcsetattr ICANON"); UX if(tcsetattr(0,TCSANOW,&old)<0)
if(read(0,&buf,1)<0) UX perror("tcsetattr ICANON");
perror("read()"); UX if(read(0,&buf,1)<0)
old.c_lflag|=ICANON; UX perror("read()");
old.c_lflag|=ECHO; UX old.c_lflag|=ICANON;
if(tcsetattr(0,TCSADRAIN,&old)<0) UX old.c_lflag|=ECHO;
perror("tcsetattr ~ICANON"); UX if(tcsetattr(0,TCSADRAIN,&old)<0)
return (buf); UX perror("tcsetattr ~ICANON");
} UX return (buf);
UX}
/*Stampa la tabella del tris*/ /*Stampa la tabella del tris*/
void stampa(){ void stampa(){
@ -292,7 +293,7 @@ void spinner(int tempo) {
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);
usleep(200000); sleep(2000);
putchar('\b'); putchar('\b');
} }
printf(RESET); printf(RESET);

13
tris.h
View File

@ -26,18 +26,23 @@
/*Funzione specifiche degli os*/ /*Funzione specifiche degli os*/
#ifdef __WIN32__ #ifdef __WIN32__
#define os 0
#include <conio.h> #include <conio.h>
#include <windows.h>
#define os 0
#define clear "cls" #define clear "cls"
#define sleep(x) Sleep(x)
#define UX //
#else #else
#define os 1
#define clear "clear"
#include <termios.h> #include <termios.h>
#include <unistd.h> #include <unistd.h>
#define os 1
#define clear "clear"
#define sleep(x) usleep(x*100)
#define UX
int mgetchar(void); int mgetchar(void);
#endif #endif
/*Prototipi*/ /*Prototipi*/