07/09/09 21:44
Manu89
Ciao! Non ho visto una sezione per presentarmi, però vabbè, sono nuovo comunque!
Sono un niubbo della programmazione e quindi ho trovato questo sito per caso perchè volevo saperne di più... Vedo gente più giovane di me, qui, che fa delle cose devastanti ^^ e io rimango spiazzato. Vabbè.
Comunque, volevo chiedere un aiuto per un programma che ho scritto che realizza una versione virtuale del gioco di forza4. Il programma funziona perfettamente tranne che per una sola cosa: si presenta il problema del segmentation fault quando si verifica la vittoria per diagonali di un tipo. Per favore, aiutatemi! Vi posto il codice:
(ho messo in grassetto la parte critica, non c'è bisogno di leggersi tutto il codice, l'ho fatto solo per completezza)
Sono un niubbo della programmazione e quindi ho trovato questo sito per caso perchè volevo saperne di più... Vedo gente più giovane di me, qui, che fa delle cose devastanti ^^ e io rimango spiazzato. Vabbè.
Comunque, volevo chiedere un aiuto per un programma che ho scritto che realizza una versione virtuale del gioco di forza4. Il programma funziona perfettamente tranne che per una sola cosa: si presenta il problema del segmentation fault quando si verifica la vittoria per diagonali di un tipo. Per favore, aiutatemi! Vi posto il codice:
(ho messo in grassetto la parte critica, non c'è bisogno di leggersi tutto il codice, l'ho fatto solo per completezza)
#include <stdio.h> #define R 6 #define C 7 #define P1 '£' #define P2 'O' #define E ' ' char** generaTab(){ char **casella=(char**)malloc(sizeof(char*)*C); int i,j; for(i=0;i<C;i++){ casella[i]=(char*)malloc(sizeof(char)*R); for(j=0;j<C;j++) casella[i][j]=E; } return casella; } drawTab(char **casella){ int i,j; printf("\t\t"); for(i=0;i<=C*4;i++) printf("-"); printf("\n"); for(i=0;i<R;i++){ printf("\t\t"); for(j=0;j<C;j++) printf("| %c ",casella[i][j]); i!=R-1?printf("|\n\n"):printf("|\n"); } printf("\t\t"); for(i=0;i<=C*4;i++) printf("-"); printf("\n "); printf("\t\t "); for(j=1;j<=C;j++) printf(" %d ",j); printf("\n\n"); } int play(char** casella, char p){ int n; int i; char res='e'; do { do { scanf("%d",&n); if(n<1||n>C) printf("Metti un numero adeguato\n"); } while(n<1||n>C); for(i=R-1;i>=0;i--){ if(casella[i][n-1]==E){ casella[i][n-1]=p; res='o'; break; } } if(res=='e') printf("Colonna piena!\n"); } while(res=='e'); if(p==P1) i=2; if(p==P2) i=1; return i; } char check(char** casella){ int i; int j; int w; int k; for(i=R-1;i>=0;i--){ for(j=0;j<C-4;j++){ if(casella[i][j]!=E && casella[i][j]==casella[i][j+1] && casella[i][j+1]==casella[i][j+2] && casella[i][j+2]==casella[i][j+3]){ for(w=j;w<j+4;w++) casella[i][w]='W'; return casella[i][j]; } } } for(j=0;j<C;j++){ for(i=R-1;i>2;i--){ if(casella[i][j]!=E && casella[i][j]==casella[i-1][j] && casella[i-1][j]==casella[i-2][j] && casella[i-2][j]==casella[i-3][j]){ for(k=i;k>i-4;k--) casella[k][j]='W'; return casella[i][j]; } } } for(i=0;i<3;i++){ for(j=0;j<4;j++){ if(casella[i][j]!=E && casella[i][j]==casella[i+1][j+1] && casella[i+1][j+1]==casella[i+2][j+2] && casella[i+2][j+2]==casella[i+3][j+3]){ for(k=i,w=j;k<i+4,w<j+4;k++,w++) casella[k][w]='W'; return casella[i][j]; } } } [b]//qui si presenta l'errore for(j=0;j<4;j++){ for(i=R-1;i>2;i--){ if(casella[i][j]!=E && casella[i][j]==casella[i-1][j+1] && casella[i-1][j+1]==casella[i-2][j+2] && casella[i-2][j+2]==casella[i-3][j+3]){ //sembra che il problema sia qui, però non so dove for(k=i,w=j;k>i-4,w<j+4;k--,j++) casella[k][w]='W'; return casella[i][j]; } } }[/b] return 'o'; } int main(){ char **casella=generaTab(); drawTab(casella); int i=1; char res; while(i){ if(i==1){ printf("Turno Giocatore 1 (scegliere numero colonna): %c :",P1); i=play(casella,P1); } else if (i==2){ printf("Turno Giocatore 2 (scegliere numero colonna): %c :",P2); i=play(casella,P2); } res=check(casella); printf("\n"); drawTab(casella); if(res=='W' && i==2){ printf("Vince il giocatore 1!\n"); i=0; } if(res=='W' && i==1){ printf("Vince il giocatore 2!\n"); i=0; } } printf("\n\tGioco finito\n"); return 0; }
Ultima modifica effettuata da Manu89 08/09/09 13:41
aaa