Sistemata al codice e supporto alla tabella di qualunque dimensione
*Ora funziona con una tabella di qualunque grandezza. Il lato della matrice quadrata è definito con #define M 3. Anche se la tabella è più grande per vincere basta comunque fare un tris; *Sistemati alcuni bug minori; *Reso il codice più pulito;
This commit is contained in:
parent
d9b13c8c25
commit
17aa812f23
12
main.c
12
main.c
@ -8,14 +8,14 @@ int main (){
|
|||||||
/*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("%d",&scelta);
|
||||||
switch(scelta){
|
switch(scelta){
|
||||||
/*case per la partita con 2 giocatori*/
|
/*case per la partita con 2 giocatori*/
|
||||||
|
59
tris.h
Normal file → Executable file
59
tris.h
Normal file → Executable file
@ -38,22 +38,22 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
int mgetchar(void);
|
int mgetchar(void);
|
||||||
int mgetchar(){
|
int mgetchar(){
|
||||||
char buf = 0;
|
char buf=0;
|
||||||
struct termios old = {0};
|
struct termios old={0};
|
||||||
if (tcgetattr(0, &old) < 0)
|
if(tcgetattr(0,&old)<0)
|
||||||
perror("tcsetattr()");
|
perror("tcsetattr()");
|
||||||
old.c_lflag &= ~ICANON;
|
old.c_lflag&=~ICANON;
|
||||||
old.c_lflag &= ~ECHO;
|
old.c_lflag&=~ECHO;
|
||||||
old.c_cc[VMIN] = 1;
|
old.c_cc[VMIN]=1;
|
||||||
old.c_cc[VTIME] = 0;
|
old.c_cc[VTIME]=0;
|
||||||
if (tcsetattr(0, TCSANOW, &old) < 0)
|
if(tcsetattr(0,TCSANOW,&old)<0)
|
||||||
perror("tcsetattr ICANON");
|
perror("tcsetattr ICANON");
|
||||||
if (read(0, &buf, 1) < 0)
|
if(read(0,&buf,1)<0)
|
||||||
perror ("read()");
|
perror("read()");
|
||||||
old.c_lflag |= ICANON;
|
old.c_lflag|=ICANON;
|
||||||
old.c_lflag |= ECHO;
|
old.c_lflag|=ECHO;
|
||||||
if (tcsetattr(0, TCSADRAIN, &old) < 0)
|
if(tcsetattr(0,TCSADRAIN,&old)<0)
|
||||||
perror ("tcsetattr ~ICANON");
|
perror("tcsetattr ~ICANON");
|
||||||
return (buf);
|
return (buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,7 +78,7 @@
|
|||||||
int i,k;
|
int i,k;
|
||||||
int giocatore,scelta,mossa;
|
int giocatore,scelta,mossa;
|
||||||
int tabella[M][M];
|
int tabella[M][M];
|
||||||
int tastierino=1;
|
int tastierino=0;
|
||||||
|
|
||||||
/*Funzioni*/
|
/*Funzioni*/
|
||||||
void stampa(){
|
void stampa(){
|
||||||
@ -86,7 +86,7 @@
|
|||||||
printf("\n\n\n");
|
printf("\n\n\n");
|
||||||
for(i=0;i<M;i++) {
|
for(i=0;i<M;i++) {
|
||||||
printf(RESET" ");
|
printf(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 ");
|
||||||
else {
|
else {
|
||||||
@ -102,42 +102,43 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
int controlla(int giocatore){
|
int controlla(int giocatore){
|
||||||
if(tabella[0][0]==giocatore&&tabella[1][1]==giocatore&&tabella[2][2]==giocatore)
|
for(i=0;i<M;i++){
|
||||||
|
if(tabella[i][i]==giocatore&&tabella[i+1][i+1]==giocatore&&tabella[i+2][i+2]==giocatore)
|
||||||
return 1;
|
return 1;
|
||||||
if(tabella[2][0]==giocatore&&tabella[1][1]==giocatore&&tabella[0][2]==giocatore)
|
if(tabella[i+2][i]==giocatore&&tabella[i+1][i+1]==giocatore&&tabella[i][i+2]==giocatore)
|
||||||
return 1;
|
return 1;
|
||||||
for(i=0;i<3;i++){
|
}
|
||||||
if(tabella[i][0]==giocatore&&tabella[i][1]==giocatore&&tabella[i][2]==giocatore)
|
for(i=0;i<M;i++){
|
||||||
|
for(k=0;k<M;k++)
|
||||||
|
if(tabella[i][k]==giocatore&&tabella[i][k+1]==giocatore&&tabella[i][k+2]==giocatore)
|
||||||
return 1;
|
return 1;
|
||||||
if(tabella[0][i]==giocatore&&tabella[1][i]==giocatore&&tabella[2][i]==giocatore)
|
for(k=0;k<M;k++)
|
||||||
|
if(tabella[k][i]==giocatore&&tabella[k+1][i]==giocatore&&tabella[k+2][i]==giocatore)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int minimax(int giocatore, int profondita){
|
int minimax(int giocatore, int profondita){
|
||||||
|
|
||||||
if(controlla(2))
|
if(controlla(2))
|
||||||
return INT_MAX;
|
return INT_MAX;
|
||||||
if(mossa==M*M)
|
if(mossa==M*M)
|
||||||
return 0;
|
return 0;
|
||||||
int res, tmp;
|
int res,tmp;
|
||||||
if(giocatore==1){
|
if(giocatore==1){
|
||||||
res=1;
|
res=1;
|
||||||
for(i=0;i<M;i++){
|
for(i=0;i<M;i++){
|
||||||
for(k=0;k<M;k++){
|
for(k=0;k<M;k++){
|
||||||
if(!tabella[i][k]){
|
if(!tabella[i][k]){
|
||||||
tabella[i][k]=1;
|
tabella[i][k]=1;
|
||||||
if(controlla(1)){
|
if(controlla(1)&&!profondita==20){
|
||||||
if(profondita==20){
|
|
||||||
tabella[i][k]=0;
|
tabella[i][k]=0;
|
||||||
return INT_MIN;
|
return INT_MIN;
|
||||||
}
|
}
|
||||||
|
else if((tmp=minimax(2,profondita-1))<res)
|
||||||
|
res=tmp;
|
||||||
else
|
else
|
||||||
res-=2;
|
res-=2;
|
||||||
}
|
|
||||||
else if((tmp=minimax(2, profondita - 1))<res)
|
|
||||||
res=tmp;
|
|
||||||
tabella[i][k]=0;
|
tabella[i][k]=0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -151,7 +152,7 @@
|
|||||||
tabella[i][k]=2;
|
tabella[i][k]=2;
|
||||||
if(controlla(2))
|
if(controlla(2))
|
||||||
res+=2;
|
res+=2;
|
||||||
else if((tmp=minimax(1, profondita - 1))>res)
|
else if((tmp=minimax(1,profondita-1))>res)
|
||||||
res=tmp;
|
res=tmp;
|
||||||
tabella[i][k]=0;
|
tabella[i][k]=0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user