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]);
}
}
}