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.
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.
Link: http://github.com/adoxa/ansicon
Link: http://github.com/adoxa/ansicon
### Installazione
### Compilazione
Per compilare il programma su UNIX usa _make_.
Su windows usa un compilatore qualisasi o _make_ se hai MinGW
Link: http://www.mingw.org
Su windows usa un compilatore qualisasi o _mingw32-make_ se hai MinGW.
Link: http://www.mingw.org
### Istruzioni
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 vittoria;
int difficolta;
tastierino=0;
tastierino=1;
a='a';
do{
giocatore=1,vittoria=0;
scelta=0,difficolta=0,mossa=0;
/*Menu d'inizio*/
system(clear);
printf(SOTTOLINEATO GIALLO"\n Tris in stile C \n\n" RESET BIANCO);
printf(ROSSO" [1]"RESET BIANCO" Partita con 2 giocatori\n");
printf(ROSSO" [2]"RESET BIANCO" Partita singolo giocatore\n");
if(!os)
printf(ROSSO" [3]"RESET BIANCO" Modalit%c di input\n",133);
else
printf(ROSSO" [3]"RESET BIANCO" Modalità di input \n");
printf(ROSSO" [4]"RESET BIANCO" Informazioni\n");
printf(ROSSO" [5]"RESET BIANCO" Esci\n");
scanf("%d",&scelta);
printf(SOTTOLINEATO GIALLO"\n Tris in stile C \n\n" RESET BIANCO);
printf(ROSSO" [1]"RESET BIANCO" Partita con 2 giocatori\n");
printf(ROSSO" [2]"RESET BIANCO" Partita singolo giocatore\n");
if(!os)
printf(ROSSO" [3]"RESET BIANCO" Modalit%c di input\n",133);
else
printf(ROSSO" [3]"RESET BIANCO" Modalità di input \n");
printf(ROSSO" [4]"RESET BIANCO" Informazioni\n");
printf(ROSSO" [5]"RESET BIANCO" Esci\n");
scanf("\n%d",&scelta);
switch(scelta){
/*case per la partita con 2 giocatori*/
case 1:{
@ -61,18 +61,24 @@ int main (){
/*Case che contiene la partita singolo giocatore*/
case 2:{
vuota();
system(clear);
/*ciclo per scegliere la difficolta del gioco*/
system(clear);
do{
if(!os)
printf(SOTTOLINEATO GIALLO"\n Scegli la difficolt%c:\n\n"RESET BIANCO ,133);
else
printf(SOTTOLINEATO GIALLO"\n Scegli la difficoltà: \n\n" RESET BIANCO);
printf(ROSSO" [1]"RESET BIANCO" Facile\n");
printf(ROSSO" [2]"RESET BIANCO" Medio\n");
printf(ROSSO" [3]"RESET BIANCO" Difficile\n"); scanf("%d",&difficolta);
if(difficolta<1||difficolta>3)
printf(ROSSO" [3]"RESET BIANCO" Difficile\n");
getchar();
scanf("%d",&difficolta);
if(difficolta<1||difficolta>3){
printf(GRASSETTO ROSSO"\n Scelta non valida.\n\n" RESET BIANCO);
aspetta(2);
}
}while(difficolta<1||difficolta>3);
system(clear);
stampa();
@ -184,6 +190,7 @@ int main (){
do{
system(clear);
printf("\n Vuoi usare il tastierino numerico o le coordinate"ROSSO"[T,C]"RESET BIANCO"?\n");
getchar();
scanf("\n%c",&a);
}while(a!='T' && a!='C' && a!='t' && a!='c');
if(a=='T'||a=='t')

41
tris.c
View File

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

13
tris.h
View File

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