Tris in C

di il
1 risposte

Tris in C

Buonasera ragazzi, ho creato il mio primo tris in c e viene compilato senza errori, solo che all'esecuzione del programma dopo un po' crasha. Qualcuno sa spiegarmi il motivo? Ho sentito dire che dovrei riallocare bene la memoria..cosa significa? e come posso applicarlo al mio programma? Confido nella vostra immediatezza, dato che domani devo consegnare il programma al mio professore.
#include <stdio.h>
#include <stdlib.h>
#define croce            88
#define pallino         254
#define angolo          206
#define verticale       186
#define orizzontale     205
#define win             101
#define lose            102
#define MAXBUFFER 255

typedef enum {
   StatusPlaying,
   StatusStopped,
   StatusVictory,
   StatusFailed,              
} GameStatus;

int Excel[25][80];
int riga;
int colonna;
int coordinate;
int n;
int i;
int Tris[9]={0,0,0,0,0,0,0,0,0};
int speedgame=2500;
void Menu();
void Grafica();
void gioco();
void player();
void enemy();
void punteggio(GameStatus *gameStatus);
void print();



int main()
{
    Menu();
    gioco();
    getch();
    return 0;
}   
    void Menu() {
         FILE *fLogo;
     
         char f_Logo[]="logo.txt";
         char fLogoString[MAXBUFFER]={};
     
         fLogo=fopen(f_Logo,"r");
 
         while (fgets(fLogoString,MAXBUFFER,fLogo)!=NULL) {
         printf("%s",fLogoString);     
         }
         fflush(fLogo);
         printf("\n\nBENVENUTO NEL GIOCO TRIS.\n");
         printf("Per iniziare a giocare, premi il tasto Enter.");
         getch();
         system("CLS");
         Grafica();
         
         }
    void Grafica() {
         
         for(riga=4;riga<8;riga++) Excel[riga][30]=verticale;   //colonna
         for(riga=4;riga<8;riga++) Excel[riga][40]=verticale;   //colonna     
         for(riga=9;riga<13;riga++) Excel[riga][30]=verticale;   //colonna
         for(riga=9;riga<13;riga++) Excel[riga][40]=verticale;   //colonna
         for(riga=14;riga<18;riga++) Excel[riga][30]=verticale;   //colonna
         for(riga=14;riga<18;riga++) Excel[riga][40]=verticale;   //colonna
         for(colonna=23;colonna<30;colonna++) Excel[8][colonna]=orizzontale;   //riga
         for(colonna=31;colonna<40;colonna++) Excel[8][colonna]=orizzontale;   //riga
         for(colonna=41;colonna<48;colonna++) Excel[8][colonna]=orizzontale;   //riga
         for(colonna=23;colonna<30;colonna++) Excel[13][colonna]=orizzontale;   //riga
         for(colonna=31;colonna<40;colonna++) Excel[13][colonna]=orizzontale;   //riga
         for(colonna=41;colonna<48;colonna++) Excel[13][colonna]=orizzontale;   //riga
         Excel[8][30]=angolo;    //angolo
         Excel[8][40]=angolo;    //angolo
         Excel[13][30]=angolo;    //angolo
         Excel[13][40]=angolo;    //angolo
         Excel[5][25]='1';       
         Excel[5][35]='2';       
         Excel[5][45]='3';       
         Excel[11][25]='4';       
         Excel[11][35]='5';       
         Excel[11][45]='6';
         Excel[16][25]='7';
         Excel[16][35]='8';
         Excel[16][45]='9';     
         }
    void gioco() {
         
         GameStatus gameStatus = StatusPlaying;
         
    while(gameStatus==StatusPlaying) {
         print();
         player();
         enemy();
         punteggio(&gameStatus);
         
         if(gameStatus==StatusVictory) {
             system("CLS");                          
             printf("Vittoria!");
             sleep(speedgame);
             exit(0); 
             }
         else if(gameStatus==StatusFailed) {
              system("CLS");
              printf("Sconfitta!");
              sleep(speedgame);
              exit(0);                              
         }
         system("CLS");
         
    } //chiudo for
    }
    void punteggio(GameStatus *gameStatus) {
         int status;
         char caract[]={croce,pallino};
         int score[]={win,lose};
         int c;
         
         for(c=0;c<2;c++) {
         if(Tris[1]==caract[c]&&Tris[4]==caract[c]&&Tris[7]==caract[c]) status=score[c];  //1 vert.
         else if(Tris[1]==caract[c]&&Tris[2]==caract[c]&&Tris[3]==caract[c]) status=score[c]; //1 orizz
         
         else if(Tris[2]==caract[c]&&Tris[5]==caract[c]&&Tris[8]==caract[c]) status=score[c];  //2 vert
         else if(Tris[4]==caract[c]&&Tris[5]==caract[c]&&Tris[6]==caract[c]) status=score[c]; //2 orizz
         
         else if(Tris[3]==caract[c]&&Tris[6]==caract[c]&&Tris[9]==caract[c]) status=score[c];   //3 vert
         else if(Tris[7]==caract[c]&&Tris[8]==caract[c]&&Tris[9]==caract[c]) status=score[c];  //3 orizz
         else if(Tris[1]==caract[c]&&Tris[5]==caract[c]&&Tris[9]==caract[c]) status=score[c]; //1 obliquo
         else if(Tris[7]==caract[c]&&Tris[5]==caract[c]&&Tris[3]==caract[c]) status=score[c]; //2 obliquo
         }
         
         switch(status) {
                  case win: 
                            *gameStatus = StatusVictory;
                            break;
                  case lose: 
                             *gameStatus = StatusFailed;
                             break;
                  default:
                             break;
         }
}
    void player() {
         printf("Per giocare indica le coordinate del blocco in cui vuoi mettere la x:\n");
         scanf("%d",&coordinate);
         if(Tris[coordinate]==pallino || Tris[coordinate]==croce) {
                                 printf("E' gia occupata quella postazione!\n");
                                 sleep(1500);
                                 system("CLS");
                                 print();
                                 }
         Tris[coordinate]=croce;
         if(coordinate<1 || coordinate>9) { printf("Errore inserimento coordinate\nPremi enter per continuare e reinserire\n");
                                            getch();
                                            gioco(); 
                                            }
         }
    void enemy() {
         srand(time(NULL));
         i=rand();
         i=i%9;
         if(Tris[i]==croce || Tris[i]==pallino) enemy();
         Tris[i]=pallino;
         }     
         
      
    void print() {
         Excel[5][25]=Tris[1];
         Excel[5][35]=Tris[2];
         Excel[5][45]=Tris[3];
         Excel[11][25]=Tris[4];
         Excel[11][35]=Tris[5];
         Excel[11][45]=Tris[6];
         Excel[16][25]=Tris[7];
         Excel[16][35]=Tris[8];
         Excel[16][45]=Tris[9];
         
         for(riga=0;riga<25;riga++) {
             for(colonna=0;colonna<80;colonna++) {
                 printf("%c",Excel[riga][colonna]);
                 }
             }
         }
         

1 Risposte

  • Re: Tris in C

    Se non indichi di che errore si tratta sara un pò difficile che ti si possa aiutare.
Devi accedere o registrarti per scrivere nel forum
1 risposte