::::Dani83::::
30-12-2005, 18:09
ahmm.... come si passa una matrice ad una struttura? scusate se stresso ma ho cercato su google e sul manuale che ho ma nn ho trovato nulla :(
se la passo così:
nuovoElemento->Piano1S = Piano1;
mi dice:
error C2440: '=' : cannot convert from 'int [][16]' to 'int [16][16]'
devo passargliela tramite un doppio puntatore? :fagiano:
vi posto il codice ma sono quasi 700righe... mi basterebbe sapere la teoria...credo :D
(l'errore è nelle righe rosse in fondo al codice..)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct cella
{
char sceltaRigaColonna;
char sceltaRigaS;
char sceltaLatoS;
char sceltaColonnaS;
char sceltaVersoS;
int counterS;
int Piano1S[16][16];
int Piano2S[16][16];
struct cella *next;
};
//struct cella* pop(struct cella **t);
void salvataggioMosse(struct cella **t, char scelta1,char sceltaRiga1,char sceltaLato1,char sceltaColonna1,char sceltaVerso1,int counter1,int Piano1[16][16],int Piano2[16][16]);
void stampaMosse(struct cella *t);
void annullaMossa(struct cella **t);
int mossa=0;
//** Partita guidata **//
//Riga 1, 1 volta a sinistra
//Riga 3, 1 volta a destra
//Colonna 4, 1 volta in alto
//Colonna 3, 1 volta in alto
//struct cella
//{
// double secondi;
// struct cella *next;
//};
void guida(); //guida
void gioca(); //gioca
void menu(); //menù inziale
void palline();
void inserireNomiGiocatori(char giocatori[2][10]);
void inizioGioco();
void stampaTavoloDaGioco(int Tavolo1[16][16],int *pallinerosse1,int *pallineblu1);
void controlloVittoria(int pallinerosse1, int pallineblu1, char giocatori[2][10],int *gioca1);
void puliziaTavolo(int Tavolo1[16][16]);
void stampaLista();
void spostaRiga(int Piano1[16][16], int counter_Righe1[16],int *sceltaRiga,int *sceltaLato);
void spostaColonna(int Piano2[16][16], int counter_Colonne1[16],int *sceltaColonna,int *sceltaVerso);
void controlloBuchi(int Piano1[16][16], int Piano2[16][16], int Tavolo1[16][16]);
/* Variabili di controllo menù */
//int controllomenu = 1;
//int controllomenu2= 1;
int stampalista = 0;
int i,j=0;
int main ()
{
char m; // switch menù iniziale
do
{
system("cls");
printf("+------------------------------------------------------------------------------+");
printf("| |");
printf("| TENDI LA TRAPPOLA |");
printf("| |");
printf("+------------------------------------------------------------------------------+\n\n\n\n");
printf(" +---------------------------------------------------------+\n");
printf(" | Per la Guida premi \"G\" |\n");
printf(" +---------------------------------------------------------+\n");
printf(" | Per Iniziare una partita premi \"I\" |\n");
printf(" +---------------------------------------------------------+\n");
printf(" | Per Uscire premi \"E\" |\n");
printf(" +---------------------------------------------------------+\n\n\n");
printf(" Cosa vuoi fare? ");
fflush(stdin);
//m = getch(); mah...
scanf("%1c",&m);
switch (m) //switch per scegliere le opzioni del menù
{
case 'g':
case 'G':
fflush(stdin);
guida();
break;
case 'i':
case 'I':
inizioGioco();
break;
case 'e':
case 'E':
system("cls");
printf("Grazie di aver giocato con noi\n\n\n");
exit(0);
default:
printf("\nHai sbagliato a digitare, presta maggiore attenzione alle scritte \n\n\n");
system("pause");
system("cls");
}
} //fine do
while(1);
}
void inizioGioco()
{
char player[2][10];
int pallinerosse=0;
int pallineblu=0;
int Piano_1[16][16]={
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0},
{0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0},
{0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0},
{0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0},
{0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0},
{0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0},
{0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0},
{0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
int Piano_2[16][16] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0},
{0,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0},
{0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0},
{0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0},
{0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}};
int Tavolo[16][16] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,3,1,1,1,1,1,1,1,0,0,0,0},
{0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0},
{0,0,0,0,1,5,1,3,1,1,1,1,0,0,0,0},
{0,0,0,0,1,1,1,1,5,1,1,1,0,0,0,0},
{0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0},
{0,0,0,0,1,1,3,1,5,1,1,1,0,0,0,0},
{0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0},
{0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
};
struct cella *testa;
testa = NULL;
int rigaScelta=0;
int latoScelto=0;
int colonnaScelta=0;
int versoScelto=0;
int counter=0; //serve per decidere il giocatore,e tiene il conto delle mosse vere e proprie
/***** Counter # mosse sx(--), dx(++), up(++), dw(--) *****/
int counter_Righe[16] ={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int counter_Colonne[16] ={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int scelta=0;
int gioca=1;
inserireNomiGiocatori(player);
//credo debba iniziare il ciclo
while(gioca)
{
rigaScelta=0;
latoScelto=0;
colonnaScelta=0;
versoScelto=0;
mossa=0;
pallinerosse=0;
pallineblu=0;
stampaTavoloDaGioco(Tavolo, &pallinerosse, &pallineblu);
controlloVittoria(pallinerosse, pallineblu, player, &gioca);
if (gioca==0) //ho dovuto aggiungere altrimenti andava avanti
return;
puliziaTavolo(Tavolo);
if (stampalista == 1)
stampaLista();
/* INIZIO DEL GIOCO */
printf("\n\t\t\tTurno di ");
if (counter % 2!=0) printf("%s",player[1]);
else printf("%s", player[0]);
//time(&start);
fflush(stdin);
printf("\n\npremi \"E\" per uscire, \"G\" per la guida, \"A\" per annullare e \"L\" per la legenda.");
printf("\nVuoi spostare una riga o una colonna? ");
printf("\nPer spostare una riga premi \"R\"\n");
printf("Per spostare una colonna premi \"C\"\n");
printf("Scelta: ");
scanf("%1c",&scelta);
switch(scelta)
{
case 'R':
case 'r':
spostaRiga(Piano_1, counter_Righe, &rigaScelta, &latoScelto);
break;
case 'C':
case 'c':
spostaColonna(Piano_2, counter_Colonne, &colonnaScelta, &versoScelto);
break;
case 'e':
case 'E':
system("cls");
printf("Grazie di aver giocato con noi\n\n\n");
exit(0);
break;
case 'l':
case 'L':
system("cls");
printf("\t\tLEGENDA\n");
printf("B sono le palline blù del giocatore 1\n");
printf("R sono le palline rosse del giocatore 2\n");
printf("@ sono i buchi in cui le palline possono cadere\n\n");
system("pause");
break;
case 'g':
case 'G':
fflush(stdin);
guida();
break;
case 'a':
case 'A':
annullaMossa(&testa);
counter--;
break;
default:
printf("Attenzione, errore di battitura\n\n");
system("pause");
break;
}
//time(&finish);
//duration = difftime(finish, start);
/*for (i=0;i<l;i++)
{
printf("%d %d %d %d\n",i,senso[i],numerolistello[i],direzione[i]);
}
nuovoElemento = (struct cella*)malloc(sizeof(struct cella));
if (nuovoElemento == NULL)
{
printf("\n\n Errore nell\'allocazione della memoria.\n Il programma verra\' chiuso!\n ");
system("pause");
exit(1);
}
nuovoElemento->secondi = duration;
nuovoElemento->next = testa;
testa = nuovoElemento;
tot++;*/
if (mossa) //solo se è stata eseguita una mossa vera e propria viene aumentato il counter e fatto il salvataggioMosse
{
counter++;
salvataggioMosse(&testa,scelta,rigaScelta,latoScelto,colonnaScelta,versoScelto,counter,Piano_1,Piano_2);
stampaMosse(testa);
}
system("pause");
controlloBuchi(Piano_1, Piano_2, Tavolo);
}
system("pause");
return;
}
void inserireNomiGiocatori(char giocatori[2][10]) //ok
{
system("cls");
printf("Inizio Gioco");
for (i = 0; i < 2; i++)
{
printf("\nInserire il nome del giocatore %d: ",i+1);
fflush(stdin);
scanf("%s",giocatori[i]);
}
system("cls");
printf("\n\n%s giochera\' contro %s\n\n\n",giocatori[0],giocatori[1]);
system("pause");
return;
}
void guida() //ok
{
system("cls");
printf("\t\tGUIDA\n\n");
printf("Gioco per due giocatori\n");
printf("Obbiettivo: Lo scopo del gioco e\' far cadere tutte le palline dell'avversario intrappola.\n");
printf("E' un gioco a turni che si svolge su di una griglia 8*8.\n");
printf("Ogni giocatore avrà 10 palline e ad ogni turno deve spostare un listello,\norizzontale o verticale, a sua scelta di una posizione.\n");
printf("Ogni listello presenta dei buchi sulla sua superficie.\n");
printf("Se due buchi si trovano uno sopra l'altro generano una cavità e la pallina che si trova sopra la griglia cade.\n");
printf("Per fare iniziare i due giocatori in condizioni di equita\' all'inizio del gioco non potra\' esserci gia\' un buco\n");
printf("Vince chi per primo riesce a far cadere in trappola le palline avversarie.\n\n");
system("pause");
system("cls");
return;
}
void stampaTavoloDaGioco(int Tavolo1[16][16],int *pallinerosse1,int *pallineblu1) //ok
{
/***** STAMPA DEL TAVOLO DA GIOCO e conteggio palline *****/
printf("+------------------------------------------------------------------------------+");
printf("| |");
printf("| TENDI LA TRAPPOLA |");
printf("| |");
printf("+------------------------------------------------------------------------------+");
printf("\t\t\t\t 1-2-3-4-5-6-7-8\n");
printf("\t\t\t\t+---------------+\n");
for (i=4; i<12; i++)
{
printf("\t\t\t\t|");
for (j=4; j<12; j++)
{
if (Tavolo1[i][j]!=1)
{
if (Tavolo1[i][j]==5)
{
printf("R|",Tavolo1[i][j]);
*pallinerosse1 +=1;
}
else
{
if (Tavolo1[i][j]==3)
{
printf("B|",Tavolo1[i][j]);
*pallineblu1 +=1;
}
else
printf("@|",Tavolo1[i][j]);
}
}
else printf("%d|",Tavolo1[i][j]);
}
printf("\n");
}
printf("\t\t\t\t+---------------+\n");
return;
}
void controlloVittoria(int pallinerosse1,int pallineblu1,char giocatori[2][10],int *gioca1) //ok
{
/* Calcolo palline rimanenti ai player */
printf("%s ha %d pallin",giocatori[0],pallineblu1);
if (pallineblu1==1)
printf("a\n");
else
printf("e\n");
printf("%s ha %d pallin",giocatori[1],pallinerosse1);
if (pallinerosse1==1)
printf("a\n");
else printf("e\n");
/* Controllo condizioni di vittoria */
if (pallineblu1==0 || pallinerosse1==0)
{
printf("\n\n\t\t\t\tPARTITA CONCLUSA");
if (pallineblu1==0 && pallinerosse1!=0)
{
printf("\n\n\n\t\t\t\t VINCE %s\n\n",giocatori[0]);
stampalista=1;
*gioca1=0;
system("pause");
}
if (pallinerosse1==0 && pallineblu1!=0 )
{
printf("\n\n\n\t\t\t\t VINCE %s\n\n",giocatori[1]);
stampalista=1;
*gioca1=0;
system("pause");
}
if (pallinerosse1==0 && pallineblu1==0)
{
printf("\n\n\n\t\t\t\t PAREGGIO\n\n");
stampalista=1;
*gioca1=0;
system("pause");
}
}
//*gioca1=0;
}
void puliziaTavolo(int Tavolo1[16][16]) //da controllare
{
int i,j=0;
for (i=0; i<16; i++)
{
for (j=0; j<16; j++)
{
if (Tavolo1[i][j] == 8)
{
Tavolo1[i][j]=1;
}
}
}
}
void stampaLista() //mancano ancora dei dati che vengono utilizzati dalla funzione
{
printf("stampa lista");
/*system("cls");
printf("\n\n STAMPA ELENCO MOSSE\n\n");
tem = testa;
l--;
while (tem != NULL)
{
if (tot % 2!=0) printf("%s",player[0]);
else printf("%s", player[1]);
printf(" ha mosso la");
printf(" %d ^ ",numerolistello[l]);
if(senso[l]==1) printf(" righa ");
else
{
if (senso[l]==2) printf(" colonna ");
else
printf("%d",senso[l]);
}
printf("verso ");
if (senso[l] == 1 && direzione[l] == 1) printf("sinistra");
else
if (senso[l] == 1 && direzione[l] == 2) printf("destra");
if (senso[l] == 2 && direzione[l] == 1) printf("l'alto");
if (senso[l] == 2 && direzione[l] == 2) printf("il basso");
printf(" ed ha effettuato la %d^ mossa in %f secondi \n",(tot),tem->secondi);
tem = tem->next;
tot--;
count++;
--l;
}
printf("\n\nStampate %d mosse\n ",count);
system("pause");
return;*/
}
void spostaRiga(int Piano1[16][16], int counter_Righe1[16],int *sceltaRiga,int *sceltaLato)
{
int errore1=1;
int errore2=1;
//int sceltaRiga=0;
//int sceltaLato=0;
int temp=0;
//senso[l]=1;
while (errore1)
{
/* Sposta riga orizzontalmente (piano 1) */
printf("Inserisci la riga da spostare(1-2-3-4-5-6-7-8): ");
scanf("%1d",&*sceltaRiga);
if (*sceltaRiga>0 && *sceltaRiga<9)
{
errore1 = 0;
//numerolistello[l]=b;
}
else
printf("Hai sbagliato a digitare, riprova!\n");
}
*sceltaRiga = *sceltaRiga+4;
while (errore2)
{
printf("Vuoi spostare a sinistra (premi '1') o a destra (premi '2')? ");
scanf("%d",&*sceltaLato);
if (*sceltaLato == 1 || *sceltaLato == 2)
{
errore2 = 0;
//direzione[l]=sceltaLato;
//l++;
}
else
printf("Hai sbagliato a digitare, riprova!\n");
}
fflush(stdin);
if (*sceltaLato == 1)
{
counter_Righe1[*sceltaRiga-1]--;
if (counter_Righe1[*sceltaRiga-1]==-4)
{
printf("\nE\' l'ultima volta che puoi spostare a sinistra questa bacchetta");
system("pause");
}
for (i=0,temp = Piano1[*sceltaRiga-1][i]; i<15; i++)
{
Piano1[*sceltaRiga-1][i] = Piano1[*sceltaRiga-1][i+1]; //sposta la riga a sinistra
}
Piano1[*sceltaRiga-1][i]= temp;
}
if (*sceltaLato == 2)
{
counter_Righe1[*sceltaRiga-1]++;
if (counter_Righe1[*sceltaRiga-1]==4)
{
printf("\nE\' l'ultima volta che puoi spostare a destra questa bacchetta");
system("pause");
}
for (i=15,temp = Piano1[*sceltaRiga-1][i]; i>0; i--)
{
Piano1[*sceltaRiga-1][i] = Piano1[*sceltaRiga-1][i-1]; //sposta la riga a destra
}
Piano1[*sceltaRiga-1][i]= temp;
}
mossa=1;
}
void spostaColonna(int Piano2[16][16], int counter_Colonne1[16],int *sceltaColonna,int *sceltaVerso)
{
/****** Sposta colonna verticalmente (piano 2) ******/
int errore1=1;
int errore2=1;
//int sceltaColonna=0;
//int sceltaVerso=0;
int temp=0;
//senso[l]=2;
while (errore1)
{
printf("Inserisci la colonna da spostare(1-2-3-4-5-6-7-8): ");
scanf("%1d",&*sceltaColonna);
if (*sceltaColonna>0 && *sceltaColonna<9)
{
errore1 = 0;
//numerolistello[l]=sceltaColonna;
}
else
printf("Hai sbagliato a digitare, riprova! \n");
}
*sceltaColonna = *sceltaColonna+4;
while (errore2)
{
printf("Vuoi spostare in alto (premi '1') o in basso (premi '2')? ");
scanf("%d",&*sceltaVerso);
if (*sceltaVerso == 1 || *sceltaVerso == 2)
{
errore2 = 0;
//direzione[l]=sceltaVerso;
//l++;
}
else
printf("Hai sbagliato a digitare, riprova! \n");
}
fflush(stdin);
if (*sceltaVerso == 1)
{
counter_Colonne1[*sceltaColonna-1]++;
if (counter_Colonne1[*sceltaColonna-1]==4)
{
printf("\nE\' l'ultima volta che puoi spostare in alto questa bacchetta");
system("pause");
}
for (i=0, temp= Piano2[i][*sceltaColonna-1]; i<15; i++)
{
Piano2[i][*sceltaColonna-1] = Piano2[i+1][*sceltaColonna-1]; //sposta in alto
}
Piano2[i][*sceltaColonna-1]= temp;
}
if (*sceltaVerso == 2)
{
counter_Colonne1[*sceltaColonna-1]--;
if (counter_Colonne1[*sceltaColonna-1]==-4)
{
printf("\nE\' l'ultima volta che puoi spostare in basso questa bacchetta\n");
system("pause");
}
for (i=15, temp=Piano2[i][*sceltaColonna-1]; i>0; i--)
{
Piano2[i][*sceltaColonna-1] = Piano2[i-1][*sceltaColonna-1]; //sposta in basso
}
Piano2[i][*sceltaColonna-1]= temp;
}
mossa=1;
}
void controlloBuchi(int Piano1[16][16], int Piano2[16][16], int Tavolo1[16][16])
{
/* Controllo buchi */
for (i=0; i<16; i++)
{
for (j=0; j<16; j++)
{
if (Piano1[i][j] == 1 && Piano2[i][j] == 1)
{
Tavolo1[i][j]=8;
}
}
}
}
void salvataggioMosse(struct cella **t, char scelta1,char sceltaRiga1,char sceltaLato1,char sceltaColonna1,char sceltaVerso1,int counter1,int Piano1[16][16],int Piano2[16][16])
{
struct cella *nuovoElemento;
nuovoElemento = (struct cella*)malloc(sizeof(struct cella));
if (nuovoElemento == NULL)
{
printf("\n\n Errore nell\'allocazione della memoria.\n Il programma verra\' chiuso!\n ");
system("pause");
exit(1);
}
nuovoElemento->sceltaRigaColonna = scelta1;
nuovoElemento->sceltaRigaS = sceltaRiga1;
nuovoElemento->sceltaLatoS = sceltaLato1;
nuovoElemento->sceltaColonnaS = sceltaColonna1;
nuovoElemento->sceltaVersoS = sceltaVerso1;
nuovoElemento->counterS = counter1;
nuovoElemento->Piano1S = Piano1;
nuovoElemento->Piano2S = Piano2;
nuovoElemento->next = *t;
*t = nuovoElemento;
}
void stampaMosse(struct cella *t)
{
printf("\n");
if (t == NULL)
{
printf(" La pila e\' vuota!\n");
return;
}
do
{
printf(" \nMOSSA NUMERO: %i\n",t->counterS);
printf(" scelta riga o colonna: %c\n",t->sceltaRigaColonna);
if (t->sceltaRigaS !=0) printf(" numero di riga scelto: %i\n",t->sceltaRigaS-4);
else printf(" numero di riga scelto: %i\n",t->sceltaRigaS);
printf(" lato di spostamento scelto: %i\n",t->sceltaLatoS);
if ( t->sceltaColonnaS !=0 ) printf(" numero di colonna scelta: %i\n",t->sceltaColonnaS-4);
else printf(" numero di colonna scelta: %i\n",t->sceltaColonnaS);
printf(" verso di spostamento scelto: %i\n",t->sceltaVersoS);
t = t->next;
} while(t != NULL);
}
struct cella * pop(struct cella **t)
{
struct cella *temp;
if (*t == NULL)
return NULL;
temp = *t;
*t = (*t)->next;
temp->next = NULL;
return temp;
}
void annullaMossa(struct cella **t)
{
struct cella *temp;
temp = pop(t);
if (temp != NULL)
free(temp);
}
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.