Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <stdbool.h>
- #include <stdio.h>
- #include <string.h>
- #include <stdarg.h>
- #include <errno.h>
- #include <signal.h>
- #include <time.h>
- #define PIPE_IN "ticPipeIn"
- #define PIPE_OUT "ticPipeOut"
- //funzione che rimuove le pipe
- void chiuditutto(){
- unlink(PIPE_IN);
- unlink(PIPE_OUT);
- exit(1);
- }
- //azzera tutto l'array delle occorrenze
- void azzera(int arr[3][3]){
- int i,j;
- for(i=0;i<3;i++)for(j=0;j<3;j++)arr[i][j]=0;
- }
- int main(){
- int positions[3][3]; //L'array positions funge da vettore delle occorrenze delle mosse
- //file descriptor associati alle pipe
- int fdin, fdout;
- //contatori per i cicli
- int i,j,k;
- //qui mi vado a salvare le posizioni temporanee lette e da scrivere su pipe
- int x,y;
- int mossa=0,turno=1;
- int partitevinte=0;
- char leggi[100],carat,newpos[8],useless[3],temp[3],message[100];
- //se premo ctrl+c chiudo le pipe
- signal(SIGINT,chiuditutto);
- //creo le pipe con nome a meno che non esistano già
- mkfifo(PIPE_IN,0666); mkfifo(PIPE_OUT,0666);
- /* APRO LE PIPE e gli assegno un file descriptor, gestisco eventuali errori */
- if ( (fdin = open (PIPE_IN,O_WRONLY)) < 0 ) { // apre la pipe in lettura
- perror("errore apertura pipe");
- exit(1);
- }
- if ( (fdout = open (PIPE_OUT,O_RDONLY)) < 0 ) { // apre la pipe in scrittura
- perror("errore apertura pipe");
- exit(1);
- }
- //scrivo g per iniziare la partita
- write (fdin,"g",1);
- //azzero vettore occorrenze
- azzera(positions);
- //ciclop fintanto che non ho contato 100 vittorie, o finché la read non fallisce
- while((partitevinte<100)&&(read(fdout,&carat,1))){
- if(carat=='$'){ //hai perso!
- azzera(positions);
- write (fdin,"g",1);
- continue;
- }
- else if(carat=='&'){//la partita prosegue e tocca a me
- //cerca posizione libera
- for(j=0;j<3;j++)for(k=0;k<3;k++){
- //se trovi la posizione libera...
- if((positions[j][k]==0)&&(!mossa)){
- sprintf(newpos,"%d,%d#",j,k);
- //segno la mossa che ho fatto nel vettore positions
- positions[j][k]=1;
- //invio alla pipe la mossa salvata in newpos
- write (fdin,newpos,4);
- mossa=1;
- }
- }
- mossa=0;
- read(fdout,&carat,1);
- //mi aspetto & oppure vittoria cioè $
- if(carat=='$'){//vinta la partita con la mia mossa
- partitevinte++;
- azzera(positions);
- write (fdin,"g",1);
- }
- }
- else {
- //salva la x
- //converto char carat in stringa temp
- sprintf(temp,"%c",carat);
- //salvo in x l'intero
- x=atoi(temp);
- //consumo la ','
- read(fdout,&carat,1);
- //salvo la y
- read(fdout,&carat,1);
- sprintf(temp,"%c",carat);
- //salvo in y l'intero
- y=atoi(temp);
- //segna posizione occupata nel vettore delle occorrenze
- positions[x][y]=1;
- //consumo il #
- read(fdout,&carat,1);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement