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:
parent
09e63a2de0
commit
f5630398bf
22
README.md
22
README.md
@ -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
BIN
Tris in stile C
Executable file
Binary file not shown.
35
main.c
35
main.c
@ -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
41
tris.c
@ -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
13
tris.h
@ -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*/
|
||||||
|
Loading…
Reference in New Issue
Block a user